常用的壓縮文件的擴展名
ZIP:windows,WINZIP可打開
RAR:windows令蛉,WINRAR可打開
LZH(日本):windows聚霜,LZH工具可打開
gz:Unix狡恬,WINZIP可打開
z:Unix,WINZIP可打開
文件以字節(jié)為單位保存
文件壓縮的算法
第一種蝎宇,使用RLE算法弟劲。
RLE算法
1個英文半角字符=1字節(jié),1個漢字全角字符=2字節(jié)
RLE(Run Length Recording姥芥,行程長度編碼)算法:使用 “數(shù)據(jù)x重復次數(shù)” 的方法表示文件兔乞。
如AAAAAABBCDDEEEEEF=17字符=17字節(jié),使用RLE算法壓縮后寫為凉唐,A6B2C1D2E5F1=12字符=12字節(jié)庸追。
優(yōu)點:壓縮機制簡單,容易編寫台囱。
缺點:適合壓縮重復數(shù)據(jù)多的文件锚国,因此適合于壓縮圖像文件,不適合文本文件玄坦。
第二種血筑,使用哈夫曼算法和莫爾斯電碼。
哈夫曼算法
關鍵:多次出現(xiàn)的數(shù)據(jù)用小于8位的字節(jié)數(shù)表示煎楣,不常出現(xiàn)的數(shù)據(jù)用大于8位的字節(jié)數(shù)表示豺总。但是,最后這些數(shù)據(jù)都以8位為單位存儲择懂。
為待壓縮對象文件分別構造最佳的編碼體系喻喳,并基于這種編碼體系進行壓縮。
莫爾斯電碼
莫爾斯電碼的概念構成了壓縮算法的基礎困曙。
例:AAAAAABBCDDEEEEEF=17字符=17字節(jié)
RLE算法:A6B2C1D2E5F1=12字符=12字節(jié)
莫爾斯編碼:A6次+B2次+C1次+D2次+E5次+F1次+字符間隔16次
參考莫爾斯編碼和位長表表伦,4位6次+8位2次+9位1次+6位2次+1位5次+8位1次+2位16次=106位=14字節(jié)
直接使用莫爾斯電碼來壓縮,顯然是有很大提升空間的慷丽。
結合二叉樹的哈夫曼算法
使用二叉樹蹦哼,為出現(xiàn)頻率最多的字符分配最小的位數(shù),提高壓縮率要糊。
使用二叉樹之前纲熏,先嘗試:
缺點:不能明確區(qū)分同位數(shù)的編碼,如100不能明確區(qū)分是C還是BA還是EAA锄俄。
使用二叉樹(哈夫曼樹)
使用哈夫曼樹局劲,得到能夠明確區(qū)分的編碼方案。再次回到上面的栗子:
哈夫曼樹編碼后奶赠,
AAAAAABBCDDEEEEEF
=00 00 00 00 00 00 100 100 110 101 101 01 01 01 01 01 111
=2x6+3x2+3x1+3x2+2x5+3x1=40位=5字節(jié)鱼填。
壓縮率大大提高!
使用哈夫曼樹編碼壓縮毅戈,對各種主要文件類型苹丸,都可以得到很高的壓縮率塑猖。
可逆壓縮和非可逆壓縮
圖像文件的數(shù)據(jù)形式
windows中,標準圖像數(shù)據(jù)格式為BMP,即位圖(bitmap)格式谈跛,是一種完全未壓縮的格式羊苟。
其他圖像數(shù)據(jù)格式:
與EXE文件、文本文件不同感憾,多數(shù)情況下蜡励,圖像文件并不要求壓縮后的文件能夠完全還原。
可逆壓縮:壓縮文件能夠完全還原阻桅。
不可逆壓縮:壓縮文件不能完全還原
BMP格式:可逆壓縮凉倚,畫質(zhì)無損失。
JPEG格式:非可逆壓縮嫂沉,因此畫質(zhì)有損失稽寒。
GIF格式:可逆壓縮,但是有顏色不能超過256色的限制趟章,因此在色彩上有損失杏糙。
TIFF格式:可選擇可逆壓縮或不可逆壓縮。這里選擇可逆壓縮蚓土,看到它的大小比BMP格式的圖片還要大宏侍,這是因為包含了標簽的緣故。