第十章 地圖壓縮
“阿歷克斯,,再想想別的法子吧,,這可是我的美好回憶哪...”
牛仔央求著說道。
“唉,好吧”,。
楊成只好單手托著腮,開始了思考,。
地圖信息對(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,!