數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告【一】 課程設(shè)計(jì)題目:文本文件壓縮【一】 1. 2. 3. 4. 5. 6. 7. 模塊及框架設(shè)計(jì): 按功能需求,,主要分為五個(gè)模塊 主要模塊: 1. 2. 輔助模塊: 2. 3. l 定義:利用算法將文件有損或無(wú)損地處理,以達(dá)到保留最多文件信息,,而令文件體積變小,。 在文本文件中,一個(gè)ASCII碼占用一個(gè)字節(jié)空間(1Byte),,漢字由兩個(gè)字節(jié)構(gòu)成(區(qū)碼和位碼),,區(qū)碼和位碼分別用ASCII碼的161-255字符表示,共94*94=8836個(gè)【GB2312編碼】 即,,無(wú)論字符還是漢字,,均可由ASCII碼表示,我們可以以二進(jìn)制文件形式將一個(gè)文本文件讀入,,分析每個(gè)ASCII碼的頻數(shù),,構(gòu)造huffman樹(shù),并得到相應(yīng)的編碼,。 編碼是由0,、1組成的一串?dāng)?shù)字,出現(xiàn)頻率越高的字符,,其編碼越短,,通過(guò)這個(gè)特性,我們可以將每8位組成一個(gè)新的字符(1Byte),,輸出到壓縮文件中,,達(dá)到壓縮的目的。 例如: 已知 如果其中的一段是::abcde 則處理如下: 補(bǔ)上兩位 每次取7位【取8位亦可,,但此處為了處理最后一個(gè)字符,,只取7位】 0+7位湊成1Byte,,轉(zhuǎn)化為相應(yīng)AscII碼輸出 最后一位一般不能剛好湊夠8 bit 所以需要補(bǔ)上0 而補(bǔ)上的0的個(gè)數(shù)記錄為補(bǔ)位數(shù) 【補(bǔ)位數(shù)的處理】 原來(lái): 處理后:2*1Byte=2 Byte l 字符,,即ASCII碼,ASCII編碼由8位組成,,共256個(gè)字符,足夠表示英文文本,。 漢字,,是考慮的重點(diǎn),,多方考慮下,,我選擇了系統(tǒng)支持的GB2312編碼表,而非轉(zhuǎn)化為UNICODE編碼,。GB2312的漢字編碼占用兩個(gè)字節(jié),,區(qū)碼和位碼分別由ASCII碼表的161-255字符表示,,共8836個(gè)漢字,足以承擔(dān)漢字處理,,而UNICODE編碼表是變長(zhǎng)編碼,,處理困難且不利于壓縮。 漢字ASCII碼八位1******* 以字符形式讀入,,每次讀入一個(gè)字節(jié)(1Byte)進(jìn)行處理,,不去判斷區(qū)分是字符還是漢字,只識(shí)別ASCII碼,,進(jìn)行處理,。 l 讀入的字符所需要存儲(chǔ)的信息:字符,頻數(shù)以及各自編碼 僅僅以char數(shù)組存儲(chǔ)將帶來(lái)非常大的缺陷,。 作用:提高效率,,減小復(fù)雜性 { char c;//字符 int count;//字符出現(xiàn)的次數(shù) intbit[20];//用于存儲(chǔ)huffman編碼 |