信息論與編碼實(shí)驗(yàn)報(bào)告_第1頁
信息論與編碼實(shí)驗(yàn)報(bào)告_第2頁
信息論與編碼實(shí)驗(yàn)報(bào)告_第3頁
信息論與編碼實(shí)驗(yàn)報(bào)告_第4頁
信息論與編碼實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、信息論與編碼實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)課程名稱 : 赫夫曼編碼 (二進(jìn)制與三進(jìn)制編碼) 專 業(yè) 信息與計(jì)算科學(xué)班 級(jí) 信息與計(jì)算科學(xué)1班 學(xué)生姓名 李林鐘 學(xué) 號(hào) 2013326601049 指導(dǎo)老師 王老師 一、實(shí)驗(yàn)?zāi)康睦煤辗蚵幋a進(jìn)行通信可以大大提高通信利用率,縮短信息傳輸時(shí)間,降低傳輸成本。赫夫曼編碼是信源編碼中最基本的編碼方法。l 理解赫夫曼編碼,無論是二進(jìn)制赫夫曼編碼,還是m進(jìn)制赫夫曼編碼,都要理解其編碼原理和編碼步驟。l 回顧無失真信源編碼定理,理解無失真編碼的基本原理和常用編碼方法。l 掌握二進(jìn)制赫夫曼編碼和m進(jìn)制赫夫曼編碼的基本步驟,能計(jì)算其平均碼長(zhǎng),編碼效率等。l 應(yīng)用二進(jìn)制赫夫曼編碼或

2、m進(jìn)制赫夫曼編碼處理簡(jiǎn)單的實(shí)際信源編碼問題。二、實(shí)驗(yàn)環(huán)境與設(shè)備1、操作系統(tǒng)與編程軟件:windows操作系統(tǒng),cfree5.0, Visual C+ 6.0。2、編程語言:C語言以及C+語言 三、實(shí)驗(yàn)內(nèi)容1. 二進(jìn)制赫夫曼編碼原理及步驟:(1)信源編碼的計(jì)算設(shè)有N個(gè)碼元組成的離散、無記憶符號(hào)集,其中每個(gè)符號(hào)由一個(gè)二進(jìn)制碼字表示,信源符號(hào)個(gè)數(shù)n、信源的概率分布P=p(si),i=1,.,n。且各符號(hào)xi的以li個(gè)碼元編碼,在變長(zhǎng)字編碼時(shí)每個(gè)符號(hào)的平均碼長(zhǎng)為 ;信源熵為: ;唯一可譯碼的充要條件: ; 其中m為碼符號(hào)個(gè)數(shù),n為信源符號(hào)個(gè)數(shù),Ki為各碼字長(zhǎng)度。(2)二元霍夫曼編碼規(guī)則 (1)將信源符

3、號(hào)依出現(xiàn)概率遞減順序排序。 (2)給兩個(gè)概率最小的信源符號(hào)各分配一個(gè)碼位“0”和“1”,將兩個(gè)信源符號(hào)合并成一個(gè)新符號(hào),并用這兩個(gè)最小的概率之和作為新符號(hào)的概率,結(jié)果得到一個(gè)只包含(n-1)個(gè)信源符號(hào)的新信源。稱為信源的第一次縮減信源,用s1 表示。(3)將縮減信源 s1 的符號(hào)仍按概率從大到小順序排列,重復(fù)步驟(2),得到只含(n-2)個(gè)符號(hào)的縮減信源s2。(4)重復(fù)上述步驟,直至縮減信源只剩兩個(gè)符號(hào)為止,此時(shí)所剩兩個(gè)符號(hào) 的概率之和必為 1,然后從最后一級(jí)縮減信源開始,依編碼路徑向前返回,就得到各信源符號(hào)所對(duì)應(yīng)的碼字。18(3).算法基本步驟描述得到信源序列 輸出得出信源序列個(gè)數(shù)得出信源序

4、列的概率輸出計(jì)算信源符號(hào)熵輸出信源符號(hào)的赫弗曼編碼平均碼長(zhǎng)輸出輸出編碼效率輸出碼方差(4).編碼及注解(見附頁1)(5).驗(yàn)證截圖: 2. 三進(jìn)制編碼:(1).三進(jìn)制赫弗曼編碼原理:對(duì)于多進(jìn)制赫夫曼編碼,為了提高編碼效率,就要是長(zhǎng)碼的符號(hào)數(shù)量盡量少、概率盡量小,所以信源符號(hào)數(shù)量最好滿足n=(m-1)*k+r,其中m為進(jìn)制數(shù),k為縮減的次數(shù)。設(shè)計(jì)步驟如下:1將信源符號(hào)按概率從大到小的順序排列,令p(x1) p(x2) p(xn)2給兩個(gè)概率最小的信源符號(hào)p(xn-1)和p(xn)各分配一個(gè)碼位“0”和“1”,將這兩個(gè)信源符號(hào)合并成一個(gè)新符號(hào),并用這兩個(gè)最小的概率之和作為新符號(hào)的概率,或者在新添加

5、一個(gè)信源符號(hào),令其概率為0,則個(gè)分配一個(gè)碼位“0”、“1”和“2”,將其合并,結(jié)果得到一個(gè)只包含(n1)個(gè)信源符號(hào)的新信源。稱為信源的第一次縮減信源,用S1表示。3將縮減信源S1的符號(hào)仍按概率從大到小順序排列,此后每次合并3個(gè)信源符號(hào),得到只含(n3)個(gè)符號(hào)的縮減信源S2。4重復(fù)上述步驟,直至最后,此時(shí)所剩符號(hào)的概率之和必為1。然后從最后一級(jí)縮減信源開始,依編碼路徑向前返回,就得到各信源符號(hào)所對(duì)應(yīng)的碼字。(2).編碼及注解(見附頁2)(3).例題:對(duì)如下單符號(hào)離散無記憶信源編三進(jìn)制赫夫曼碼。這里:m=3,n=8令k=3,m+k(m1)=9,則 s=9n=98=1所以第一次取ms=2個(gè)符號(hào)進(jìn)行編

6、碼。由計(jì)算可得:平均碼長(zhǎng)為: (3.1)信息率為:(3.2)編碼效率為:(3.3)(4).驗(yàn)證結(jié)果截圖: 四.實(shí)驗(yàn)總結(jié):用C語言實(shí)現(xiàn)二進(jìn)制赫夫曼編碼對(duì)信源無失真編碼。由于課本知識(shí)點(diǎn)的不太理解,一點(diǎn)都不知道編碼的過程,后來通過閱讀<<信息論與編碼>>課本、網(wǎng)上查閱資料,最后才對(duì)本次設(shè)計(jì)有了一定的理解,詳細(xì)理解了赫夫曼的具體編碼過程。經(jīng)過理解,發(fā)現(xiàn)這種編碼其實(shí)挺簡(jiǎn)單的,最重要的是怎樣用程序把他實(shí)現(xiàn),這對(duì)我們的編程能力也是一次考驗(yàn)。設(shè)計(jì)要求中要求計(jì)算信源熵,這又考察了現(xiàn)代通信原理的知識(shí)。以C+語言實(shí)現(xiàn)三進(jìn)制赫夫曼編碼來詮釋多進(jìn)制赫夫曼編碼,其實(shí)不論是幾進(jìn)制的赫夫曼編碼,只要掌

7、握了編碼的原理,是非常簡(jiǎn)單的。通過這次課程設(shè)計(jì),我又重新的將信息論編碼與設(shè)計(jì)的教材翻看了一遍,在網(wǎng)上也搜到了不少相關(guān)的知識(shí),知識(shí)有提升不少。在這次課程設(shè)計(jì)中,最讓人難懂的就是C+的編程,讓我找了不少相關(guān)的書籍,上網(wǎng)查閱了不少的程序,對(duì)以前學(xué)過的編程又進(jìn)一步鞏固和提高了。在編程中,要涉及到編制赫夫曼樹,平均碼長(zhǎng),編碼效率,信息率,信源熵。通過同學(xué),網(wǎng)上查閱資料,終于得到解決,雖然仍有一些問題,但是大體上自己能編程出來,是對(duì)自己的考驗(yàn)。而且由網(wǎng)上得知:赫夫曼碼對(duì)信源的統(tǒng)計(jì)特性沒有特殊要求,編碼效率比較高,對(duì)編碼設(shè)備的要求也比較簡(jiǎn)單,因此綜合性能優(yōu)于香農(nóng)碼和費(fèi)諾碼。赫夫曼編碼在具體實(shí)用時(shí),設(shè)備較復(fù)雜

8、。在編碼器中需要增加緩沖寄存器,因?yàn)槊總€(gè)信源符號(hào)所對(duì)應(yīng)的碼符號(hào)長(zhǎng)度不一,負(fù)責(zé)會(huì)造成輸入和輸出不能保持平衡。對(duì)于自己來說,編程能力尚有欠缺,自主編程能力較差,希望以后多加學(xué)習(xí),掌握基礎(chǔ)語言的編程基礎(chǔ)。附頁1:#include<stdio.h>#include<string.h>#include<math.h>#define MAX 100/定義全局變量h存放信息熵double h=0;/定義結(jié)構(gòu)體用于存放信源符號(hào),數(shù)目及概率typedef struct/不同的字符char SOURCECODE;/不同字符出現(xiàn)的次數(shù)int NUM;/不同字符出現(xiàn)的概率doubl

9、e PROBABILITY; /赫夫曼編碼符號(hào)int CodeMAX;int start;/赫夫曼樹的父結(jié)點(diǎn)int parent;/赫夫曼樹的左右子結(jié)點(diǎn)int lchild;int rchild;/赫夫曼編碼的長(zhǎng)度int lengthofhuffmancode;Hcode;Hcode INFORMATIONMAX;/該函數(shù)用來求信源所包含的符號(hào),以及不同符號(hào)出現(xiàn)的次數(shù)和概率int Pofeachsource(char informationsourceMAX,int a)int i,j=1,m,flag=0;char temp;/預(yù)先存入第一個(gè)字符,便于與后面的字符進(jìn)行比較/統(tǒng)計(jì)不同的字符存入

10、結(jié)構(gòu)體數(shù)組中/利用flag標(biāo)簽來標(biāo)記每個(gè)字符是否出現(xiàn)過,若出現(xiàn)過標(biāo)記為1,否則置為零INFORMATION0.SOURCECODE=informationsource0;for(i=1;i<a;i+) for(m=0;m<i;m+)flag=0;if(informationsourcem=informationsourcei)flag=1;break;if(flag=1)continue;else INFORMATIONj+.SOURCECODE=informationsourcei;INFORMATIONj.SOURCECODE='0'printf("信

11、源符號(hào)數(shù)為:%dn",j);/統(tǒng)計(jì)相同的字符出現(xiàn)的次數(shù)/每做一個(gè)字符出現(xiàn)次數(shù)的統(tǒng)計(jì)都將結(jié)構(gòu)體數(shù)組里的NUM置為零for(i=0;i<j;i+) INFORMATIONi.NUM=0;for(m=0;m<a;m+)if(informationsourcem=INFORMATIONi.SOURCECODE)INFORMATIONi.NUM+;/統(tǒng)計(jì)每個(gè)字符出現(xiàn)的概率for(i=0;i<j;i+) INFORMATIONi.PROBABILITY=(float)INFORMATIONi.NUM/a;/將每個(gè)不同字符出現(xiàn)的次數(shù)概率都顯示出來for(i=0;i<j;i+

12、)printf("The NUM and PROBABILITY of Code'%c'is %d and %.3fn",INFORMATIONi.SOURCECODE,INFORMATIONi.NUM,INFORMATIONi.PROBABILITY);return j;/求信源符號(hào)的熵void H(int a)int i;for(i=0;i<a;i+)h+=(-1)*(INFORMATIONi.PROBABILITY)*(log(INFORMATIONi.PROBABILITY)/log(2);/赫夫曼編碼函數(shù)void Huffman(int a)

13、Hcode cd;int i,j,m=0,lm=0,p,c;double min,lmin;/順序初始化每個(gè)信源父子結(jié)點(diǎn)為-1 for(i=0;i<a;i+) INFORMATIONi.parent=-1; INFORMATIONi.lchild=-1; INFORMATIONi.lchild=-1; /循環(huán)構(gòu)造Huffman樹 for(i=0;i<a-1;i+) /min,lmin中存放兩個(gè)無父結(jié)點(diǎn)且結(jié)點(diǎn)權(quán)值最小的兩個(gè)結(jié)點(diǎn) min=lmin=MAX; /找出所有結(jié)點(diǎn)中權(quán)值最小、無父結(jié)點(diǎn)的兩個(gè)結(jié)點(diǎn),并合并之為一顆二叉樹 for (j=0;j<a+i;j+) if(INFORM

14、ATIONj.PROBABILITY<min)&&(INFORMATIONj.parent=-1) lmin=min; lm=m; min=INFORMATIONj.PROBABILITY; m=j; else if (INFORMATIONj.PROBABILITY<lmin)&&(INFORMATIONj.parent=-1) lmin=INFORMATIONj.PROBABILITY; lm=j; /設(shè)置找到的兩個(gè)子結(jié)點(diǎn) m、lm 的父結(jié)點(diǎn)信息 INFORMATIONm.parent=a+i; INFORMATIONlm.parent=a+i;

15、 INFORMATIONa+i.PROBABILITY=INFORMATIONm.PROBABILITY+INFORMATIONlm.PROBABILITY;INFORMATIONa+i.parent=-1; INFORMATIONa+i.lchild=m; INFORMATIONa+i.rchild=lm; for (i=0;i<a;i+) cd.start=a-1; c=i; p=INFORMATIONc.parent; while(p!=-1) /* 父結(jié)點(diǎn)存在 */ if(INFORMATIONp.lchild=c) cd.Codecd.start=1; else cd.Code

16、cd.start=0; cd.start-; /* 求編碼的低一位 */ c=p; p=INFORMATIONc.parent; /* 設(shè)置下一循環(huán)條件 */ /保存求出的每個(gè)葉結(jié)點(diǎn)的赫夫曼編碼和編碼的起始位 for(j=cd.start+1;j<m;j+) INFORMATIONi.Codej=cd.Codej; INFORMATIONi.start=cd.start; main()/定義存放信源符號(hào)的數(shù)組char informationsourceMAX;int i,j,m;double averageofhuffmancode=0.0,Eita,cV=0.0;printf(&quo

17、t;please input the source of information:");for(i=0;i+)scanf("%c",&informationsourcei);if(informationsourcei='n')break;informationsourcei='0'printf("信源序列為:");/顯示已輸入的一串信源符號(hào)puts(informationsource);/返回不同信源符號(hào)的數(shù)目m=Pofeachsource(informationsource,i);/求信源的符號(hào)熵H(m

18、);printf("信源的符號(hào)熵:H(X)=%.3f(比特/符號(hào))n",h);Huffman(m);/輸出已保存好的所有存在編碼的赫夫曼編碼 for(i=0;i<m;i+) printf("%c's Huffman code is: ",INFORMATIONi.SOURCECODE); for(j=INFORMATIONi.start+1;j<m;j+) printf("%d",INFORMATIONi.Codej);INFORMATIONi.lengthofhuffmancode=m-INFORMATIONi.

19、start-1; printf("n"); /求赫夫曼編碼的平均碼長(zhǎng)和編碼效率for(i=0;i<m;i+)averageofhuffmancode+=INFORMATIONi.PROBABILITY*INFORMATIONi.lengthofhuffmancode;printf("赫夫曼編碼的平均碼長(zhǎng)為:%lf(碼元/信源符號(hào))n",averageofhuffmancode);Eita=h/averageofhuffmancode;printf("赫夫曼編碼的編碼效率為:%lfn",Eita);/求赫弗曼編碼的碼方差for(i

20、=0;i<m;i+)cV+=INFORMATIONi.PROBABILITY*INFORMATIONi.lengthofhuffmancode*INFORMATIONi.lengthofhuffmancode;cV-=averageofhuffmancode*averageofhuffmancode;printf("赫弗曼編碼的碼方差為:%lfn",cV);附頁2#include <iostream.h>#include <math.h>#include <string.h>#include <stdio.h>#incl

21、ude <stdlib.h>#include <vector> /為了使用vector容器using namespace std; /vector屬于std命名域,因此使用全局命名域方式struct Huffman_InformationSource /信源類型 char InformationSign10; /信源符號(hào)double Probability; /概率char Code10; /編碼結(jié)果 int CodeLength; /碼長(zhǎng);struct HuffNode /赫夫曼樹的節(jié)點(diǎn)類型char InformationSign10;double Probabili

22、ty;HuffNode *LeftSubtree,*middleSubtree,*RightSubtree,*Next;char Code10;int CodeLength;class CHuffman_3 /三進(jìn)制赫夫曼編碼public:CHuffman_3() /初始化ISNumber=0;AvageCodeLength=0.0;InformationRate=0.0;CodeEfficiency=0.0;CHuffman_3()DestroyBTree(HuffTree);void Huffman_Input(); /輸入信息void Huffman_Sort(); /排序void Hu

23、ffman_Tree(); /構(gòu)造赫夫曼樹void Huffman_Coding(); /生成赫夫曼編碼void Huffman_CodeAnalyzing(); /結(jié)果分析void Huffman_Display(); /顯示結(jié)果信息void DestroyBTree(HuffNode *TreePointer); /釋放資源private:vector<Huffman_InformationSource>ISarray; /聲明ISarray數(shù)組,初始時(shí)為空int ISNumber; /符號(hào)個(gè)數(shù)double AvageCodeLength; /平均碼長(zhǎng)double Inform

24、ationRate; /信息率double CodeEfficiency; /編碼效率HuffNode * HuffTree; /赫夫曼樹private:void Huffman_Code(HuffNode *TreePointer);/輸入信源信息如果需要添加信源信息在這里修改即可void CHuffman_3:Huffman_Input()Huffman_InformationSource temp1="A",0.40,"",0;ISarray.push_back(temp1);Huffman_InformationSource temp2=&quo

25、t;B",0.18,"",0;ISarray.push_back(temp2);Huffman_InformationSource temp3="C",0.10,"",0;ISarray.push_back(temp3);Huffman_InformationSource temp4="D",0.10,"",0;ISarray.push_back(temp4);Huffman_InformationSource temp5="E",0.07,""

26、,0;ISarray.push_back(temp5);Huffman_InformationSource temp6="F",0.06,"",0;ISarray.push_back(temp6);Huffman_InformationSource temp7="G",0.05,"",0;ISarray.push_back(temp7);Huffman_InformationSource temp8="H",0.04,"",0;ISarray.push_back(temp8)

27、;ISNumber=ISarray.size();/按概率“從大到小”排序:void CHuffman_3:Huffman_Sort()Huffman_InformationSource temp;int i,j;for(i=0;i<ISNumber-1;i+)for(j=i+1;j<ISNumber;j+)if(ISarrayi.Probability<ISarrayj.Probability)temp=ISarrayi;ISarrayi=ISarrayj;ISarrayj=temp;/基于ISarray數(shù)組構(gòu)造赫夫曼樹void CHuffman_3:Huffman_Tre

28、e()int i;HuffNode *ptr1,*ptr2,*ptr3,*ptr4,*temp1,*temp2;/(1):基于數(shù)組,創(chuàng)建單向鏈表ptr1=new HuffNode;strcpy(ptr1->InformationSign,ISarray0.InformationSign);ptr1->Probability=ISarray0.Probability;strcpy(ptr1->Code,ISarray0.Code); ptr1->LeftSubtree=NULL;ptr1->middleSubtree =NULL;ptr1->RightSubt

29、ree=NULL;ptr1->Next=NULL; HuffTree=ptr1; /賦給數(shù)據(jù)成員HuffTreefor(i=1;i<ISNumber;i+)ptr2=new HuffNode;strcpy(ptr2->InformationSign,ISarrayi.InformationSign);ptr2->Probability=ISarrayi.Probability;strcpy(ptr2->Code,ISarrayi.Code); ptr2->LeftSubtree=NULL;ptr2->middleSubtree =NULL;ptr2-&

30、gt;RightSubtree=NULL;ptr2->Next=ptr1;ptr1=ptr2;/結(jié)果:鏈表的表頭為數(shù)組的最小元素。HuffTree=ptr1; /使HuffTree指向鏈表頭/(2):基于鏈表,構(gòu)造赫夫曼樹int k; /樹的層次int s; /需要添加的無用符號(hào)的數(shù)目。k=ceil(double)(ISNumber-3)/(3-1); /“3”:表示三進(jìn)制 /ceil函數(shù):向上取整; /floor函數(shù):向下取整s=3+k*(3-1)-ISNumber;if(s=1) /第一次取m-s=3-1=2個(gè)符號(hào)/合并概率最小的二個(gè)節(jié)點(diǎn)ptr1、ptr2,生成一個(gè)新節(jié)點(diǎn)ptr4:p

31、tr2=ptr1->Next;ptr4=new HuffNode;strcpy(ptr4->InformationSign,"*");/新節(jié)點(diǎn)的符號(hào)為“*”ptr4->Probability=ptr1->Probability+ptr2->Probability; /新節(jié)點(diǎn)的概率為二者之和strcpy(ptr4->Code,""); ptr4->LeftSubtree =NULL;ptr4->middleSubtree=ptr1; /最小的節(jié)點(diǎn)ptr1成為ptr4的“中”子樹,將來賦予碼元“1”ptr4-&

32、gt;RightSubtree=ptr2;/次小的節(jié)點(diǎn)ptr2成為ptr4的“右”子樹,將來賦予碼元“0”HuffTree=ptr2->Next; /指向下一個(gè)節(jié)點(diǎn)/重新排序:temp1=HuffTree;while(temp1&&(ptr4->Probability>temp1->Probability)temp2=temp1;temp1=temp1->Next;ptr4->Next=temp1; /插在當(dāng)前節(jié)點(diǎn)temp1之前if(temp1=HuffTree)HuffTree=ptr4;else temp2->Next=ptr4;

33、/插在temp2節(jié)點(diǎn)之后ptr1=HuffTree;while(ptr1->Next)/合并概率最小的三個(gè)節(jié)點(diǎn)ptr1、ptr2,生成一個(gè)新節(jié)點(diǎn)ptr4:ptr2=ptr1->Next;ptr3=ptr2->Next;ptr4=new HuffNode;strcpy(ptr4->InformationSign,"*");/新節(jié)點(diǎn)的符號(hào)為“*”ptr4->Probability=ptr1->Probability+ptr2->Probability+ptr3->Probability; /新節(jié)點(diǎn)的概率為三者之和strcpy(pt

34、r4->Code,""); ptr4->LeftSubtree=ptr1;/最小的節(jié)點(diǎn)ptr1成為ptr4的“左”子樹,將來賦予碼元“2”ptr4->middleSubtree=ptr2/次小的節(jié)點(diǎn)ptr2成為ptr4的“中”子樹,將來賦予 “1”ptr4->RightSubtree=ptr3;/次次小的節(jié)點(diǎn)ptr3成為ptr4的“右”子樹,將來賦予 “0”HuffTree=ptr3->Next;temp1=HuffTree;while(temp1&&(ptr4->Probability>temp1->Prob

35、ability)temp2=temp1;temp1=temp1->Next;ptr4->Next=temp1; /插在當(dāng)前節(jié)點(diǎn)temp1之前if(temp1=HuffTree)HuffTree=ptr4;else temp2->Next=ptr4; /插在temp2節(jié)點(diǎn)之后ptr1=HuffTree;/釋放:ptr1=NULL;ptr2=NULL;ptr3=NULL;ptr4=NULL;temp1=NULL;temp2=NULL;/設(shè)置根節(jié)點(diǎn):strcpy(HuffTree->Code,"");HuffTree->CodeLength=0;/生

36、成赫夫曼碼:void CHuffman_3:Huffman_Code(HuffNode *TreePointer)if (TreePointer = NULL)return;char tempstr10=""if(!TreePointer->LeftSubtree&&!TreePointer->middleSubtree&&!TreePointer->RightSubtree)for(int i=0;i<ISNumber;i+)if(strcmp(ISarrayi.InformationSign,TreePointer

37、->InformationSign)=0)strcpy(ISarrayi.Code,TreePointer->Code);ISarrayi.CodeLength=TreePointer->CodeLength;return;return;if(TreePointer->LeftSubtree)/生成左子樹編碼:strcpy(tempstr,TreePointer->Code);strcat(tempstr,"2");strcpy(TreePointer->LeftSubtree->Code,tempstr);TreePointer-

38、>LeftSubtree->CodeLength=TreePointer->CodeLength+1;Huffman_Code(TreePointer->LeftSubtree);if(TreePointer->middleSubtree)/生成中子樹編碼:strcpy(tempstr,TreePointer->Code);strcat(tempstr,"1");strcpy(TreePointer->middleSubtree->Code,tempstr);TreePointer->middleSubtree->

39、CodeLength=TreePointer->CodeLength+1;Huffman_Code(TreePointer->middleSubtree);if(TreePointer->RightSubtree)/生成右子樹編碼:strcpy(tempstr,TreePointer->Code);strcat(tempstr,"0");strcpy(TreePointer->RightSubtree->Code,tempstr);TreePointer->RightSubtree->CodeLength=TreePointer->CodeLength+1;Huffman_Code(TreePointer->RightSubtree);void CHuffman_3:Huffman_Coding()Hu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論