《程序是怎樣跑起來的》第六章讀后感
本章講述的是如何壓縮數(shù)據(jù)。文件壓縮在發(fā)送郵件和轉(zhuǎn)發(fā)文件時經(jīng)常用到,或者是照片保存在計算機上時,也會壓縮成JPEG格式,而文件的壓縮機制是基礎(chǔ),也是必須掌握的知識。
首先,文件是數(shù)據(jù)存儲在存儲媒介中的一種形式。也就是說,無數(shù)數(shù)據(jù)存儲在磁盤、內(nèi)存等存儲位置時的形式就形成了文件。而文件中這些數(shù)據(jù)的單位就是字節(jié),在我們接觸網(wǎng)絡(luò)中應(yīng)用程序或者文件時,xxMB,xxKB表示的內(nèi)存大小,就是很多字節(jié)(Byte)組成的。用8位1字節(jié)表示的數(shù)據(jù)有256種,用二進制來表示范圍就是00000000~11111111,重點是,文件中的字節(jié)數(shù)據(jù)都是連續(xù)儲存的。
書中講到一個算法,叫RLE算法(Run Length Encoding)。RLE是一個針對無損壓縮的非常簡單的算法。它用重復(fù)字節(jié)和重復(fù)的次數(shù)來簡單描述來代替重復(fù)的字節(jié)。盡管簡單并且對于通常的壓縮非常低效,但它有的時候卻非常有用。例如,圖片的壓縮格式JPEG就使用它。簡單來說就是數(shù)據(jù)×重復(fù)次數(shù)來壓縮字節(jié)從而壓縮文件大小,如下圖。

但是這種算法并不適合文本文件的壓縮,因為文本文件中同樣字符連續(xù)出現(xiàn)的部分并沒有多少,總不至于一個文本文件全篇同樣的詞語連續(xù)出現(xiàn)多次吧。在使用RLE算法機制壓縮文本時在每個字符后都會加上重復(fù)的次數(shù),壓縮后可能還會比之前的大,但是也可以避免,不以1個字節(jié)為單位查找重復(fù)次數(shù),但是這樣貌似就失去了這種算法的簡單性的特點了。
書中講到的第二種壓縮方法叫哈曼夫算法,用到一種叫莫爾斯編碼的東西,這種編碼我們在電影里都有看到過,又叫摩斯電碼,用長點短點的組合來傳遞信息,這種算法的最大特點就是多次出現(xiàn)的數(shù)據(jù)用小于8位的字節(jié)數(shù)來表示,不常用的數(shù)據(jù)可以用超過8位的字節(jié)數(shù)來表示,這種算法的特點就在于靈活。
莫爾斯編碼也不是所有情況都適用,所以書中還講到一種是使用二叉樹構(gòu)造編碼體系,如圖。

我的理解是,就類似于數(shù)學(xué)中的統(tǒng)計,根據(jù)數(shù)據(jù)出現(xiàn)的頻率,再進行組合,最后形成一串哈曼夫編碼,這種方法可以大大提高壓縮比率。
書中還講到兩個概念,可逆壓縮和非可逆壓縮,顧名思義,可逆壓縮是指壓縮前后的文件數(shù)據(jù)沒有丟失,非可逆壓縮反之。
這就是我在第六章中學(xué)到的知識。
浙公網(wǎng)安備 33010602011771號