第十章 地圖壓縮
“阿歷克斯,再想想別的法子吧,這可是我的美好回憶哪...”
牛仔央求著說(shuō)道。
“唉,好吧”。
楊成只好單手托著腮,開始了思考。
地圖信息對(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ū)域無(wú)法通行。
那么,怎么把這個(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)超過(guò)了10個(gè)字符的長(zhǎng)度。
所以,必須想一個(gè)辦法,對(duì)地圖信息進(jìn)行壓縮。
楊成通過(guò)觀察,發(fā)現(xiàn)了一種比較好的壓縮方法。
首先將矩陣的每一行,都看作是二進(jìn)制表示的一個(gè)數(shù)字。
比方說(shuō),第一行:
[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)分割開來(lái),以表明是不同的行,到時(shí)候方便還原數(shù)據(jù)。
總共只需要5+4=9個(gè)字符,其中包括4個(gè)逗號(hào)。
Bingo!