首頁(yè) 短篇

編程代碼之戰(zhàn)

第十章 地圖壓縮

編程代碼之戰(zhàn) 程序小猿 538 2022-09-03 20:36:09

  “阿歷克斯,再想想別的法子吧,這可是我的美好回憶哪...”

  牛仔央求著說道。

  “唉,好吧”。

  楊成只好單手托著腮,開始了思考。

  地圖信息對(duì)象是像這樣的:

  [1,1,1,0,1]

  [0,0,1,0,0]

  [1,0,1,0,1]

  [1,0,0,0,1]

  [1,1,1,1,1]

  這是一個(gè)5X5的矩陣,其中數(shù)字1代表可通行的區(qū)域,數(shù)字0標(biāo)注的區(qū)域無法通行。

  那么,怎么把這個(gè)地圖實(shí)例壓縮到10個(gè)字符以內(nèi)呢?

  像這樣?

  “[[1,1,1,0,1],[0,0,1,0,0],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]”

 ?。╯tringify)

  這種轉(zhuǎn)為字符串的方法很有效,但缺點(diǎn)也很明顯。

  它占用的存儲(chǔ)空間太多了,遠(yuǎn)遠(yuǎn)超過了10個(gè)字符的長(zhǎng)度。

  所以,必須想一個(gè)辦法,對(duì)地圖信息進(jìn)行壓縮。

  楊成通過觀察,發(fā)現(xiàn)了一種比較好的壓縮方法。

  首先將矩陣的每一行,都看作是二進(jìn)制表示的一個(gè)數(shù)字。

  比方說,第一行:

  [1,1,1,0,1]

  把它看作二進(jìn)制數(shù)字:

  “11101”

 ?。?6進(jìn)制由0-9和a-z組成,a-z對(duì)應(yīng)10-35)

  接著,將這個(gè)2進(jìn)制數(shù)字,轉(zhuǎn)換為36進(jìn)制。

  得到小寫字母“t”。

  這樣,又足足減少了4個(gè)字符,達(dá)到了壓縮的目的!

  如果對(duì)矩陣的每一行都這么處理,就可以得到5個(gè)36進(jìn)制字符。

 ?。╰,4,l,h,v)

  再將這5個(gè)字符用逗號(hào)分割開來,以表明是不同的行,到時(shí)候方便還原數(shù)據(jù)。

  總共只需要5+4=9個(gè)字符,其中包括4個(gè)逗號(hào)。

  Bingo!

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁(yè)
返回書頁(yè)
指南