哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報(bào)告_第1頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報(bào)告_第2頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報(bào)告_第3頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報(bào)告_第4頁
哈弗曼編碼教學(xué)規(guī)劃實(shí)驗(yàn)報(bào)告_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余47頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目錄、實(shí)訓(xùn)要求:.2二、課題分析和設(shè)計(jì)1 、 基本需求分析2、 對應(yīng)的類3,4,5三、主要功能界面:51、主界面2、讀取文章并對字符編碼3、哈弗曼編碼信息6 -4、文章編碼:65、文章譯碼:66、錯(cuò)誤處理714四、總結(jié)(課設(shè)心得體會) 五、附錄(主要函數(shù)代碼)、實(shí)訓(xùn)要求1、輸入為:一段中文或英文的文章的文件名。2、讀取文章的字符信息。3、對字符進(jìn)行權(quán)值的計(jì)算。4、根據(jù)權(quán)值構(gòu)造哈弗曼樹。5、生成對應(yīng)的編碼。6、輸出為:原文章的編譯(譯文)。7、根據(jù)已經(jīng)生成的編碼表,輸入任意的譯文可以得到原文。、課題分析和設(shè)計(jì)1.基本需求分析:1)在通信過程中,為了提高信道利用率,縮短信息傳輸時(shí)間降低傳輸成本,需

2、要編譯碼器。2)此哈弗曼編碼譯碼器應(yīng)具有編碼譯碼的雙向功能,即在發(fā)送端通過編碼系統(tǒng)對傳入的數(shù)據(jù)進(jìn)行編碼。3)在接收端將數(shù)據(jù)譯碼,將具有兩項(xiàng)功能的編碼譯碼器用于雙工信道就可滿足,雙工信道的雙向編譯功能。4)輸入某段報(bào)文是,系統(tǒng)將自己完成編譯輸出。5 )、程序設(shè)計(jì)流程 : 文字表述:開始進(jìn)入功能選擇界面,包含五種操作(1)讀取文章并對字符編碼。哈夫曼編碼信息。文章編碼。(4)文章譯碼。退出程序。操作:(1)給定一篇文章,統(tǒng)計(jì)字符出現(xiàn)的概率,并根據(jù)概率建立哈弗曼樹,并利用哈弗曼樹對字符進(jìn)哈夫曼編碼。(2)顯示哈弗曼編碼信息,包括字符和其哈弗曼編碼。(3)對文章進(jìn)行譯碼,顯示譯碼信息,并保存。(4 )

3、對文章進(jìn)行譯碼,顯示并保存。流程圖:程序開始I2、對應(yīng)的類: 定義類:class Element/ 結(jié)點(diǎn)類public:char name;/字符名int weight;/字符權(quán)值int lchild;/左孩子int rchild;/右孩子int parent;/父結(jié)點(diǎn)Element()weight = 0;lchild = -1;rchild = -1;parent =-1;Element() ; 定義字符和出現(xiàn)的次數(shù):class Name / 字符類public:char pname;/ 字符名int num;/ 字符出現(xiàn)的次數(shù)double lweight;/ 字符的權(quán)值Name()num

4、 = 0;lweight = 0;Name() ; 定義字符總類總數(shù)和存儲信息:class GetName / 關(guān)于字符類public:char file_namemax2;/文件名int n; / 字符的種類int sum; / 字符的總數(shù)Name lettermax1; / 存儲字符信息的類的數(shù)組GetName()sum = 0;n = 0;; 定義編碼類:class CodeNode/ 編碼類public:char ch; / 存儲字符char save_codemax1; /存儲編碼; 主要功能實(shí)現(xiàn)類:class Function public:GetName L;int fn; /定

5、義哈夫曼數(shù)組大小哈夫曼數(shù)組Eleme nt Huffma nTmax3; /CodeNode Codemax1; /字符編碼數(shù)組Fun cti on()fn = 0;三、主要功能界面:1、主界面:*& 辻入狷 / 誦目手統(tǒng)*耳3耳HfCH K 41UC H KM KWH卑斗其卅刑呉耳再耳耳*嗯柯王耳曲苜八“你 *1 -話5烹章護(hù)賽于苻霜19十* M HXKH-k 杞-f 莒.總-* XKKKH hTTTXKKKKH*XMa4K3hMKXh H-n-KMK-K-H-=爲(wèi)蘿=A請?jiān)柟止δ?2、讀取文章并對字符編碼:fl. txt3、哈弗曼編碼信息:Dh:1 a I I kiMiiiimu(du*i

6、uuud.uUWIQI4、文章編碼:EMRil |、L1 iiiaeiiiieiiiii lOJ iiiiiaaseeeoeeieaoiaQaaiieioeeieQaoieieQxieeioeTOiiioieeQi 11111BOL iieaiaieeeJlaaiBasBeiaBiaseesiaBaLBeeseiiieeiaiBiBaiBieiBiiiiiJiiiiieeie 1 laBiBeBBseiii iiiseiiQaeeiiiiQieieeeiiaii Liieeeiseeeie 丄oi 丄e丄BBie窗丄 i丄 a 丄 m.iae(iLL 丄丄 91111 Ofti LoBQi 0

7、ej emsii soeiBQii i ai lOi Baiseoi icu loaei ii i 丄丄 Qeenacn丄oatM 丄丄目qq 丄 Ofn 丄 e aeoi 01 miieooi ooei aioaoi ioiii i leei eem i 丄丄 qodu aeeii eeoi oeaoiii aiiii eoaii eoi aoei a 0110001 Ill 11 eeeeoeeoi oeioeeeaei neoi loeiieiiiiiiBeiooeiieiioeaiiiOiBooioiiiii 1 lOQieai 11110011 iini iieiiiiiiieeie

8、QaaoQaeieetiiei iiieaeiioeieeiieiBOi aieiiio 1iiiiBieBiiaeiaeiejaaaiBiesiiaieeiesj ai aniiileaaeleim biBiesiiiiilaeej aaiaeiei iiBaiieieeiDBaii0iiaQffiiiii9eeLeeiaaaBiiiiie9eieei 丄丄 1丄0毗0屈丄10010丄也00丄1丄丄丄丄 i 90011 lOQieooaii 1 oBooi tnai aei aieei i oi aoi ooQieeoaei ii ecu QieiOQieioi zi 丄 ml 丄 i ii

9、 ae !i0iioeioeoDioiiiiiia0aieeoaeiiieiiw0iiQieioiieeiefKioeaoQiiioaioiaiHioiaiQi a uij.iiiiiemieeoj oi soi 10001 aeofli 11 Bioeieei 1 eeaei meioeoei 1001 o i aaji 100011 oei 111 I eoQiieeoii9iei iwiaeneiiseiaBeaeiaoiaioiiiiiiiaoeeieiaioioioexiiiiieoeiaQieeeQo 9iiiaiiiieiiBiaeieeeiiiaiaeBiB9Bi aeesee

10、ii 111 neeei ae ae 1 loai Biesii eeai 1 ee j iiiiBsei 丄 asoiiBaiBeeeiBiQe 丄 a/i a 丄 BixBeiseeLieiiaaBiiiiieseeeeseiLBaeixiiiiiiia 1 丄 iiiBseaiie 9ia0(riioieeai9eaioa9iLt(rifniiiiaiiiiiiii0ooieeeoiiieiioaQiiaiQcuaiamioaiit 丄 ifn 丄丄 0i001loeoofliiioeiaioiaaioifliaiiiiiiiiiiiOQeieoaeiii0110100190010911

11、liiioBoiiiee a oeiiei0oimii loi uiiamiiiaii ueoi loeeieoiaiaii 11 iioeoeieioiaiaiflexj iiiiemio aioQOi eeiiiiiiieiimiaeoi seetieuiuii QOisxiiiiieeiiooiaeQxiei 10010001 Qseeen 9SQ1 aeieiieai a ei eeeeii QaeieBiiiBi leii j aaiiiBieeeiiBeeiQQBiiieBeeiBiii lu iiiiieeie iiaBiBaiBieiiiiiieeaaiffieiiBiBiee

12、LiiiiiaBaiBeeiiseeeii 丄oi 丄1 丄00丄6窗丄 i 丄 iiiiseaiii iiitiiaiiiiooieoeiaaoiiiiiieoaieeiiiaaaiooaiiaiiMfliiiitiGooicuiiiiiioaiasaiaiQa a 111 oeii am ai Ml 1000110011 III 90011 eaaiieaiQoofliaieei sen 001 Mill 11 an 0111010111115、文章譯碼:晴輔人禪在忘童洽駐匕丈豬=Fuerjltnily ii rrt til Ilf f AilHre, betmc if nw*in u1t

13、nt (卜琮屮 vlmt 3 narc pcQp Lc c* n Ir-firri f r-nii the i.r unxLi 匸匸 uhh Ful r-xprt-ic-nczr so 七h(yuǎn)* 七 七h(yuǎn)r# c nn inpr-nur t hr i.嚴(yán) nr th* ic* Ev曰Ey f a Luie nearis the cloeanecs of succes-ff we shouLd tAhe the pas Ltive at titudo to fmxLuro. uo ca.n 501 ovor it oon and people t incan g*Gt the v Ictop V-

14、 Bo 諸ve ncct th* dU4luIticA,. don t Jh* Alaid al the bAd i-sawitJuit 険H楓L tun潔拘旺育犍緞鐮.6、錯(cuò)誤處理:卩丿肖0生坪牯詳,請i新輸A !歐迎進(jìn)入編/譯碼系統(tǒng)KhMJtXMH功育屯如-pT * MHfthHHMWHHrthMHHMHHrtgg播羊文i甘7J壬符編瑪E”曲 2 .噲夫舅編碼K M*Si 程序屏前入碼誤,請重新 4俞.入.3 -ifz回上一畀面= A A請選扌革功SS I四、總結(jié)(課設(shè)心得體會):三周的課程設(shè)計(jì)結(jié)束了,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識,也培養(yǎng)了我如何計(jì),和同學(xué)們相互探討, 相互學(xué)

15、習(xí), 相互監(jiān)督。 學(xué)會了合作, 學(xué)會了運(yùn)籌帷幄, 學(xué)會了寬容,學(xué)會了理解,也學(xué)會了做人與處世。課程設(shè)計(jì)是我們專業(yè)課程知識綜合應(yīng)用的實(shí)踐訓(xùn)練,著是我們邁向社會,從事職業(yè)工作前一個(gè)必不少的過程.”千里之行始于足下”,通過這次課程設(shè)計(jì),我深深體會到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會腳踏. 通過這次課程設(shè)實(shí)地邁開這一步, 就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ) 計(jì),本人在多方面都有所提高。 在這次設(shè)計(jì)過程中, 體現(xiàn)出自己單獨(dú)設(shè)計(jì)模具的能力以及綜 合運(yùn)用知識的能力, 體會了學(xué)以致用、 突出自己勞動成果的喜悅心情, 從中發(fā)現(xiàn)自己平時(shí)學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補(bǔ)。六、附錄

16、(源代碼):#include #include #include #include #define max1 150 #define max2 50 #define max3 256 using namespace std;class Element/ 結(jié)點(diǎn)類public:char name;/字符名int weight;/字符權(quán)值int lchild;/左孩子int rchild;/右孩子int parent;/父結(jié)點(diǎn)Element()weight = 0;lchild = -1;rchild = -1;parent =-1;Element() ;class CodeNode/ 編碼類pub

17、lic:char ch; / 存儲字符char save_codemax1; /存儲編碼;class Name/ 字符類public:char pname;/ 字符名int num;/ 字符出現(xiàn)的次數(shù)double lweight;/ 字符的權(quán)值Name()num = 0;lweight = 0;Name() ;class GetName / 關(guān)于字符類public:char file_namemax2;/文件名int n; / 字符的種類int sum; / 字符的總數(shù)Name lettermax1; / 存儲字符信息的類的數(shù)組GetName()sum = 0;n = 0;void GetWe

18、ight()/ 得到字符的權(quán)值出現(xiàn)的次數(shù)除總數(shù)得到for (int i = 0; i n; i+)letteri.lweight = (double) letteri.num / sum; /權(quán)值int ReadLetter()ifstream input;cout 請輸入文件名: file_name;if (input.fail()cout 該文件不存在! endl;return 0;char ch;ch = input.get();letter0.pname = ch;letter0.num+;sum+;while (!input.eof()/ 讀取文件中的所有字符int tag = 0;

19、ch = input.get();for (int i = 0; i n + 1; i+)if (letteri.pname = ch)letteri.num+;sum+;tag = 1;if (tag = 0)n+;lettern.pname = ch;lettern.num+;sum+;sum-;input.close();GetWeight(); / 得到字符權(quán)值;class Function public:GetName L;int fn; / 定義哈夫曼數(shù)組大小Element HuffmanTmax3; /哈夫曼數(shù)組CodeNode Codemax1; /字符編碼數(shù)組Function

20、()fn = 0;void CharHuffmanTCoding()/編碼功能實(shí)現(xiàn)int i, f, c;char *cd = new char L.n+1; /暫時(shí)存儲編碼的數(shù)組int start; / 編碼讀取起始位置cdL.n = 0;for (i = 0; i = 0)if (HuffmanTf.lchild = c)/如果為左孩子,為 0 cd-start = 0;else/ 如果為右孩子,為 1cd-start = 1;將結(jié)果存入對應(yīng)的編碼數(shù)組中c = f;strcpy(Codei.save_code, &cdstart); /void OutputHuffmanTCode()co

21、ut 哈夫曼編碼: endl;cout endl;cout 字符tt哈夫曼編碼 endl;for (int i = 0; i L.n; i+)/輸出字符,哈夫曼編碼cout endl;cout HuffmanT t t;cout Codei.save_code;cout endl;cout endl;void InitHT()/ 哈夫曼初始化L.ReadLetter();fn = (L.n)*2 - 1;for (int i = 0; i fn; i+)if (i L.n)HuffmanT = L.letteri.pname;選擇最小的兩個(gè)節(jié)點(diǎn)HuffmanTi.wei

22、ght = L.letteri.lweight;void Select_2Min(int m, int &p1, int &p2)/int i;double m1, m2;m1 = m2 = 1;p1 = p2 = -1;for (i = 0; i m; i+)找出未訪if (HuffmanTi.parent = -1 & HuffmanTi.weight m1)/問過的權(quán)值最小節(jié)點(diǎn)m2 = m1;p2 = p1;m1 = HuffmanTi.weight;找出p1 = i;else if (HuffmanTi.parent = -1 & HuffmanTi.weight m2)/未訪問過的權(quán)

23、值第二小結(jié)點(diǎn)m2 = HuffmanTi.weight;p2 = i;void CreatHT()/ 建立哈夫曼樹 / 核心int i, p1, p2;InitHT();for (i = L.n; i fn; i+)Select_2Min(i, p1, p2);HuffmanTp1.parent = HuffmanTp2.parent = i;HuffmanTi.weight = HuffmanTp1.weight + HuffmanTp2.weight;HuffmanTi.lchild = p1;HuffmanTi.rchild = p2;int OutArticleCode()/ 顯示文章

24、編碼ifstream input;input.open(L.file_name);if (input.fail()cout 文件不存在! endl;return 0;char ch;while (!input.eof()ch = input.get();cout 文章編碼如下: endl;for (int i = 0; i L.n; i+)if (Codei.ch = ch)cout Codei.save_code;cout endl;input.close();int SaveArticleCode()/ 保存文章編碼ofstream output;ifstream input;char n

25、amef1max2;input.open(L.file_name);if (input.fail()cout 該文件不存在! endl;return 0;cout 請輸入保存文章編碼的文件名: namef1;output.open(namef1);char ch;while (!input.eof()ch = input.get();for (int i = 0; i L.n; i+)if (Codei.ch = ch)for (int j = 0; j strlen(Codei.save_code); j+)j);output.put(Codei.save_codeinput.close()

26、;output.close();int OutTransCode() / 文章譯碼操作ifstream input;char namefmax2;cout 請輸入保存文章編碼的文件名: namef;input.open(namef);if (input.fail()cout 該文件不存在! = 0)判斷是否到葉子c = HuffmanTc.lchild;if (HuffmanTc.lchild = -1)/cout = 0)c = HuffmanTc.rchild;if (HuffmanTc.rchild = -1)/判斷是否到葉子cout HuffmanT; /c = 2 * L

27、.n - 2; / 返回根節(jié)點(diǎn)ch = input.get();input.close();int SaveTransCode()/ 保存文章譯碼輸出字符cout endl;ofstream output;ifstream input;char namefmax2;char namef1max2;cout 請輸入文章編碼所在的文件名: namef;input.open(namef);if (input.fail()cout 該文件不存在! endl;return 0;cout 請輸入保存文章譯碼的文件名: namef1;output.open(namef1);char ch;ch = inpu

28、t.get();int c = 2 * L.n - 2;while (!input.eof()if (ch = 0)if (HuffmanTc.lchild = 0)c = HuffmanTc.lchild;if (HuffmanTc.lchild = -1)output.put(HuffmanT);c = 2 * L.n - 2;if (ch = 1)if (HuffmanTc.rchild = 0)c = HuffmanTc.rchild;if (HuffmanTc.rchild = -1) output.put(HuffmanT);c = 2 * L.n - 2;

29、ch = input.get();input.close();output.close();cout 保存完畢! endl;int main()Function *a = new Function;while (1) / 主界面顯示cout*endl;cout* 歡 迎 進(jìn) 入 編 / 譯 碼 系 統(tǒng)*endl;cout*endl;coutendl;cout* 功 能 如 下 :*endl;*endl;cout*2. 哈 夫 曼 編 碼 信*endl;cout*3.*endl;cout*4.*endl;cout*5.*endl;coutendl;char ch;cout 請選擇功能: ;cin ch;switch (ch)case 1:/ 讀取文章并對字符編碼delete a;a = new Function;a-CreatHT();a-CharHuffmanTCo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論