




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、西安郵電大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告哈夫曼編/譯碼器院系名稱:計(jì)算機(jī)學(xué)院專業(yè)名稱:軟件工程班 級(jí):1103 班王夢(mèng)楠學(xué)生姓名:學(xué)號(hào)(8位):04113078曾艷指導(dǎo)教師:設(shè)計(jì)起止時(shí)間:2012年12月3日2012年12月14日.設(shè)計(jì)目的加深對(duì)哈夫曼樹(shù)的理解與運(yùn)用,提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn) 題的能力。縮短信息傳輸時(shí)間,降低傳輸在接收端將傳來(lái)的數(shù)據(jù)進(jìn)行二.設(shè)計(jì)內(nèi)容利用哈夫曼編碼進(jìn)行信息通信可以大大提高信道利用率,-成本。這要求在發(fā)送端通過(guò)一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)預(yù)先編碼, 譯碼(復(fù)原)。為這樣的信息收發(fā)站寫(xiě)一個(gè)哈夫曼的編/譯碼器。1. 建立哈夫曼樹(shù):讀入文件(*.souce),統(tǒng)
2、計(jì)文件中字符出現(xiàn)的頻度,并以這些字符的頻度作為權(quán)值,建立哈夫曼樹(shù)。2. 編碼:利用已建立好的哈夫曼樹(shù),獲得各個(gè)字符的哈夫曼編碼,并對(duì)正文進(jìn)行編碼,然后輸出編碼結(jié)果,并存入文件(*.code)中。3. 譯碼:利用已建立好的哈夫曼樹(shù)將文件(*.code)中的代碼進(jìn)行譯碼,并輸出譯碼結(jié)果,并存入文件(*.decode)中。三.概要設(shè)計(jì)1. 功能模塊圖;2. 各個(gè)模塊詳細(xì)的功能描述。a. 獲取字符頻度模塊:通過(guò)讀入以存在文件中的字符,進(jìn)行字符頻度的統(tǒng)計(jì),并將頻度進(jìn) 行屏幕輸出。b. 哈夫曼樹(shù)建立模塊:將已經(jīng)統(tǒng)計(jì)好的字符頻度作為權(quán)值,通過(guò)每次比較求出最小的權(quán)值, 然后進(jìn)行哈夫曼樹(shù)的建立。c. 求哈夫曼編
3、碼模塊:定義向左為0,向右為1,對(duì)每個(gè)字符的編碼進(jìn)行求解。d. 譯碼模塊:讀取保存的哈夫曼編碼文件,將編碼根據(jù)已經(jīng)建立好的哈夫曼樹(shù)進(jìn)行翻譯, 并保存。e. 屏幕輸出模塊:在屏幕上輸出字符頻度統(tǒng)計(jì)結(jié)果,哈夫曼樹(shù),文件編碼,文件譯碼結(jié)果 等。f. 主函數(shù)模塊:調(diào)用各個(gè)功能函數(shù)。四.詳細(xì)設(shè)計(jì)1.功能函數(shù)的調(diào)用關(guān)系圖2.各功能函數(shù)的數(shù)據(jù)流程圖a. getcharsFreqO 函數(shù):chile=parentc. makeHuffma n()函數(shù):makeHuffma n()d. dehuffma n()函數(shù)I dehuffma n()13重點(diǎn)設(shè)計(jì)及編碼a. 文件字符頻度的獲取:以字符的 ASCII 編碼
4、為數(shù)組下標(biāo),以數(shù)組元素值為頻度,每讀入一個(gè)字符進(jìn)行元素值 的加 1,直至字符統(tǒng)計(jì)完畢,具體代碼如下:FREQ *getCharsFreq(const char *fileName, int *Count) FILE *fpin;FREQ *freq = NULL;int chars256 = 0;int count = 0;int i, j;char ch;if(fpin = fopen(fileName, r) = NULL)printf( 打開(kāi)失敗 ,文件不存在! n); exit(-1);ch = fgetc(fpin);while(!feof(fpin)if (chars(int)ch
5、 = 0) count+;chars(int)ch+;ch = fgetc(fpin);freq = (FREQ *)malloc(sizeof(FREQ)*count);printf(” 字符 t 權(quán)值 rr);for (i = j = 0; i 256; i+)if(charsi)printf(%ct,freqj.chars =i);printf(%dn,freqj+.weight = charsi);printf( 字符種類個(gè)數(shù): %dn, count); putchar(n);* Count = count;fclose(fpin);return freq;b. 求字符的哈夫曼編碼:定
6、義向左為 0,向右為 1,對(duì)每個(gè)字符的編碼進(jìn)行求解,具體代碼如下: void makehuffmancode(HTNode *h,int count) char * code = NULL;int i,j=0;int child, parent;code=(char *)calloc(sizeof (char),count);for(i = 0; i count; i+)parent = hi.parent;child = i;while (parent != -1)if(hparent.lchild = child) codej+ = 0;elsecodej+ = 1;child = par
7、ent;parent = hchild.parent;codej = 0;strcpy(hi.code , strrev(code,(int)strlen(code); j = 0; free(code);五測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果1正常測(cè)試數(shù)據(jù)和運(yùn)行結(jié)果a. 輸入已存在文件 1.souce 運(yùn)行結(jié)果如下:下標(biāo)字符權(quán)值左孩子右孩子父節(jié)點(diǎn)編碼08-1-1490101#2-1-133001012X11-128101100331-1401110140211-128leiioi6=4-1-14200117A21-134611118021-135100009E4143011010I1
8、-1-129leiiio1131-1-12910111112M3-1141060013N2-1-1351000114021-1361601015P1-12-1-1361001117T1-12-1-13710100196-1-147111121b3-1-141600122d2-1-1371010123f11131neon2411-11-1s_1_-1QQgQ28guest-QydqlKwmnvIrtuat-machine: 字符權(quán)值#82%130221二4A2D
9、2E4I131M3N202P1R2T1V2Y1a6b3d2f1 I1k1s1z5字符種類個(gè)數(shù):27Z5-1-146iiei28ff22538(null)292101138(null)302151739(null)312192339(null)32#2242540(null)33ff326142(null.)3444743(null)354a1344(null)364141644(null)37ff4182245(null)3&4ZB2945(null)J9430JI4G(null)40#S32347(null)416122148(null)42#73364S(null)43393449(nul
10、l)440S353650(null)4S337sa50(null)46#9392751(null)47#11402051(null)4813414252(null)49ff1604352(null)5016444553(null)51#26464753(null)52ff294S4954(null)53#36so5154(null)54ff右55253-1(null)譴輸入妾保存人的文件名:2,codeb.輸入保存編碼的文件名2.code ,結(jié)果如下:hi輔入S保存A的文客:2,CMlela白日11111日11111日10日日11091111101日1094日1石111&1日611日日119&
11、11右61日111091日1右60991101日日10091日1119日日日11&日日1111c.輸入編碼文件名進(jìn)行譯碼,并將譯碼結(jié)果保存入3.decode 運(yùn)行結(jié)果如下:請(qǐng)輸入需要解碼的文怕二名:2* code請(qǐng)輸入保存解碼的文怕二名:3* decode解碼后的內(nèi)容:MAJOR=2 MINOR=eDEVNAHE=fdO DEVTY PE=dislddaaaabbbZ2ZZ22.異常測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果a.輸入不存在需編碼的文件名(4.souce )時(shí),運(yùn)行結(jié)果如下:4.souceb.輸入不存在的編碼文件名(5.code)時(shí),運(yùn)行結(jié)果如下:請(qǐng)輸入需要解碼的文件名: 打開(kāi)失敗,文件不存在!六.調(diào)試情況,設(shè)計(jì)技巧及體會(huì)1 .改進(jìn)方案程序只是對(duì)文件進(jìn)行了哈夫曼編/譯碼,并未實(shí)現(xiàn)將文件進(jìn)行壓縮與解壓縮
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新鄉(xiāng)職業(yè)技術(shù)學(xué)院《分子細(xì)胞生物學(xué)專論》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江橫店影視職業(yè)學(xué)院《流體輸配管網(wǎng)課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江省慈溪市六校2024-2025學(xué)年高中畢業(yè)班聯(lián)考生物試題含解析
- 湖南省長(zhǎng)沙市天心區(qū)長(zhǎng)郡中學(xué)2024-2025學(xué)年高三3月月考生物試題理試卷含解析
- 山西省晉南地區(qū)達(dá)標(biāo)名校2025屆初三調(diào)研試題(一)生物試題含解析
- 浙江省金華市義烏市2025屆高三下學(xué)期第十二次重點(diǎn)考試歷史試題含解析
- 新疆新源縣2025年高中畢業(yè)生五月供題訓(xùn)練(二)化學(xué)試題含解析
- 星海音樂(lè)學(xué)院《合成生物技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省濟(jì)寧地區(qū)(SWZ)重點(diǎn)中學(xué)2025年初三下學(xué)期第八次模擬考試物理試題試卷含解析
- 江蘇省南京玄武區(qū)十三中學(xué)集團(tuán)科利華2024-2025學(xué)年初三考前全真模擬密卷數(shù)學(xué)試題試卷(6)含解析
- 2023屆高考作文模擬寫(xiě)作:“成器”和“不器”導(dǎo)寫(xiě)及范文
- GB/T 8237-2005纖維增強(qiáng)塑料用液體不飽和聚酯樹(shù)脂
- GB/T 14713-2009旋切機(jī)通用技術(shù)條件
- 低成本自動(dòng)化的開(kāi)展與案例課件
- 不予受理反訴民事上訴狀(標(biāo)準(zhǔn)版)
- 高中英語(yǔ)語(yǔ)法之虛擬語(yǔ)氣(課件3份)
- 粵教版2022年小學(xué)六年級(jí)科學(xué)下冊(cè)期中測(cè)試試卷及答案2022-2023
- 北師大六年級(jí)下冊(cè)數(shù)學(xué)第三單元《圖形的運(yùn)動(dòng)》教學(xué)設(shè)計(jì)
- 國(guó)際石油合作主要合同模式課件
- 橋梁加固改造工程施工質(zhì)量管理體系與措施
- 第二十六章慢性腎小球腎炎演示文稿
評(píng)論
0/150
提交評(píng)論