第十章 地圖壓縮
“阿歷克斯,再想想別的法子吧,這可是我的美好回憶哪...”
牛仔央求著說道。
“唉,好吧”。
楊成只好單手托著腮,開始了思考。
地圖信息對象是像這樣的:
[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]
這是一個5X5的矩陣,其中數(shù)字1代表可通行的區(qū)域,數(shù)字0標注的區(qū)域無法通行。
那么,怎么把這個地圖實例壓縮到10個字符以內(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)
這種轉為字符串的方法很有效,但缺點也很明顯。
它占用的存儲空間太多了,遠遠超過了10個字符的長度。
所以,必須想一個辦法,對地圖信息進行壓縮。
楊成通過觀察,發(fā)現(xiàn)了一種比較好的壓縮方法。
首先將矩陣的每一行,都看作是二進制表示的一個數(shù)字。
比方說,第一行:
[1,1,1,0,1]
把它看作二進制數(shù)字:
“11101”
?。?6進制由0-9和a-z組成,a-z對應10-35)
接著,將這個2進制數(shù)字,轉換為36進制。
得到小寫字母“t”。
這樣,又足足減少了4個字符,達到了壓縮的目的!
如果對矩陣的每一行都這么處理,就可以得到5個36進制字符。
?。╰,4,l,h,v)
再將這5個字符用逗號分割開來,以表明是不同的行,到時候方便還原數(shù)據(jù)。
總共只需要5+4=9個字符,其中包括4個逗號。
Bingo!