哈夫曼树及其应用ppt课件

上传人:无*** 文档编号:150287804 上传时间:2022-09-09 格式:PPT 页数:55 大小:1.18MB
收藏 版权申诉 举报 下载
哈夫曼树及其应用ppt课件_第1页
第1页 / 共55页
哈夫曼树及其应用ppt课件_第2页
第2页 / 共55页
哈夫曼树及其应用ppt课件_第3页
第3页 / 共55页
资源描述:

《哈夫曼树及其应用ppt课件》由会员分享,可在线阅读,更多相关《哈夫曼树及其应用ppt课件(55页珍藏版)》请在装配图网上搜索。

1、第六章续哈夫曼树及其运用 设有设有1000010000个学生某门课程的考试成果的分布如个学生某门课程的考试成果的分布如下表所示:下表所示:一、问题的提出一、问题的提出分数05960697079 808990100学生比例数0.050.150.400.300.10学生成果数据分布情况表*问题:如今要编写程序依次根据每个学生的成果打印出该学生的成果等级。分数05960697079 808990100学生比例数0.050.150.400.300.10学生成果数据分布情况表方法方法1:a60打印打印bad“yesa70no打印打印passyesa80no打印打印generalyesa90no打印打印g

2、oodyes打印打印excellentno5%的学生的学生15%的学生的学生40%的学生的学生30%的学生的学生10%的学生的学生共做31500次比较读取一个学生成果a循环一万次 i=1i=10000N终了终了 i=i+1分数05960697079 808990100学生比例数0.050.150.400.300.10学生成果数据分布情况表方法方法2:a80打印打印badyesa90noyesnoa70yesnoa60yesno打印打印“good打印打印excellent打印打印pass打印打印general5%的学生的学生15%的学生的学生40%的学生的学生30%的学生的学生10%的学生的学生

3、读取一个学生成果a循环一万次 i=1i=10000N终了终了分数05960697079 808990100学生比例数0.050.150.400.300.10学生成果数据分布情况表方法方法2:a80打印打印badyesa90noyesnoa70yesnoa60yesno打印打印“good打印打印excellent打印打印pass打印打印general5%的学生的学生15%的学生的学生40%的学生的学生30%的学生的学生10%的学生的学生共做22000次比较读取一个学生成果a循环一万次 i=1i=10000N终了终了思索:如何找到一棵最优的判别树使得编写出来的程序的运转时间是最高效的?1.1.哈夫

4、曼树的有关概念哈夫曼树的有关概念 结点的途径长度:结点的途径长度:从根结点沿某条途径到某结点途中所阅历的弧的条数从根结点沿某条途径到某结点途中所阅历的弧的条数称为该结点的途径长度。称为该结点的途径长度。二、哈夫曼树及其运用二、哈夫曼树及其运用 树的途径长度:树的途径长度:从根结点到每一个叶子结点的途径长度之和。从根结点到每一个叶子结点的途径长度之和。树的带权途径长度树的带权途径长度(WPL)(WPL):树中一切叶子结点的带权途径长度之和称为树的带权树中一切叶子结点的带权途径长度之和称为树的带权途径长度。途径长度。结点的带权途径长度:结点的带权途径长度:某结点的途径长度与该结点上的权值的乘积称为

5、该结某结点的途径长度与该结点上的权值的乘积称为该结点的带权途径长度。点的带权途径长度。1.1.哈夫曼树的有关概念哈夫曼树的有关概念 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知某二叉树的四个叶子结点实例:知某二叉树的四个叶子结点 a,b,c,d分分别带权别带权7,5,2,4,那么可构造出有如下几,那么可构造出有如下几种不同方式的二叉树:种不同方式的二叉树:aaa777b5b5c2d4c2d4b5c2d 4树的带权途径长度为:WPL=2*7+2*5+2*2+2*4=36树的带权途径长度为:WPL=2*4+3*7+3*5+1*2=46树的带权途径长度为:WPL=1*7+2*5+3*2+3*4=

6、351.1.哈夫曼树的有关概念哈夫曼树的有关概念 二、哈夫曼树及其运用二、哈夫曼树及其运用哈夫曼树的定义:设有n个叶子结点的二叉树,其第i个叶子结点的权值为wi(i=1,2,3,.n),且第i个叶子结点的途径长度为li,那么使WPL=wi*li最小的二叉树称为“最优二叉树或称为“哈夫曼树。i=1n n2.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用问题:知n个叶子的权值为w1,w2,.wn,构造一棵最优二叉树。2.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用方法:步骤步骤1:构造一个具有构造一个具有n棵二叉树的森林棵二

7、叉树的森林F=T1,T2,.,Tn,其中其中Ti是只需一个根结点且根结点的权值为是只需一个根结点且根结点的权值为wi的二叉树。的二叉树。步骤步骤2:在在F中选取两棵其根结点的权值最小的二叉树,从中选取两棵其根结点的权值最小的二叉树,从F中删除这两棵树,并以这两棵二叉树为左右子树构造一中删除这两棵树,并以这两棵二叉树为左右子树构造一棵新的二叉树添加到棵新的二叉树添加到F中,该新的二叉树的根结点的权值中,该新的二叉树的根结点的权值为其左右孩子二叉树的根结点的权值之和。为其左右孩子二叉树的根结点的权值之和。步骤步骤3:判别判别F中能否只需独一的一棵二叉树。假设是,那中能否只需独一的一棵二叉树。假设是

8、,那么求解过程终了;否那么,转步骤么求解过程终了;否那么,转步骤2。2.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知有5个叶子结点的权值分别为:5,15,40,30,10;试画出一棵相应的哈夫曼树。a40b30c5d10e15152.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知有5个叶子结点的权值分别为:5,15,40,30,10;试画出一棵相应的哈夫曼树。a40b30c5d10e15152.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知有5个叶子结点的权值分

9、别为:5,15,40,30,10;试画出一棵相应的哈夫曼树。a40b30c5d10e1515302.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知有5个叶子结点的权值分别为:5,15,40,30,10;试画出一棵相应的哈夫曼树。a40b30c5d10e151530602.2.哈夫曼树的求解过程哈夫曼树的求解过程 二、哈夫曼树及其运用二、哈夫曼树及其运用实例:知有5个叶子结点的权值分别为:5,15,40,30,10;试画出一棵相应的哈夫曼树。a40b30c5d10e151530601003.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其

10、运用等长编码:以英文字符编码为例,普通英文字符编码是采用7位二进制数编码ASCII码。7位二进制数可以为27个不同的英文字符编码。下面为讨论问题简单起见,假设被编码的字符集中只需4个即22个不同字符,故只需两位二进制数即可完成编码。设这4个不同的字符为A,B,C,D,那么可进展等长编码如下:3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其运用等长编码:设这4个不同的字符为A,B,C,D,那么可进展等长编码如下:3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其运用等长编码:设这4个不同的字符为A,B,C,D,那么可进展等长编码如下:A:00 B:01 C:10

11、 D:11 那么对于电文“ABACCDA的二进制电码为:00010010101100 总长为14位 译码时,两位一分进展译码,可独一得到电文:ABACCDA 。3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其运用紧缩编码:即采用不等长的编码方案,将“高频字符的编码设计得尽能够短一些,把最长的编码留给“低频字符。例如:对于刚刚的4个字符的编码问题,可以按如下不等长编码方案进展编码:A:0 B:00 C:1 D:01问题:译码时能够出现多意性,即译码不独一:那么对于电文“ABACCDA的二进制电码为:000011010 总长为9位3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用

12、二、哈夫曼树及其运用紧缩编码:例如:对于刚刚的4个字符的编码问题,可以按如下不等长编码方案进展编码:A:0 B:00 C:1 D:01问题:译码时能够出现多意性,即译码不独一:那么对于电文“ABACCDA的二进制电码为:000011010 总长为9位3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其运用紧缩编码:例如:对于刚刚的4个字符的编码问题,可以按如下不等长编码方案进展编码:A:0 B:00 C:1 D:01问题:译码时能够出现多意性,即译码不独一。那么对于电文“ABACCDA的二进制电码为:000011010 总长为9位 如000011010中的前4个0的译码会有如下几

13、种不同译码:0000AAAA;0000ABA;0000BB思索:如何处理这一问题?问题的关键在于编码能否为无前缀编码。3.3.哈夫曼编码哈夫曼编码 二、哈夫曼树及其运用二、哈夫曼树及其运用无前缀紧缩编码既哈夫曼编码:*思想:利用哈夫曼树设计出来的不等长的编码方案一定是无前缀的。*方法:步骤1:将各字符按照其“出现频率的统计数字安排一个“权值并作为“叶子,然后求出相应的哈夫曼树;步骤2:树中各结点到其左孩子的边上的权值设为0、到其右孩子的边上的权值设为1即所谓左0右1;步骤3:从根开场到“叶子所阅历的边上的数值的序列即为该“叶子所对应的字符的编码。三、实例三、实例 知某通讯誉电文仅由A、B、C、

14、D这4个字符构成,其出现的频率分别为:8、4、6、2,请给出它们的哈夫曼编码,要求写出相应的哈夫曼树。解:根据哈夫曼算法,求得哈夫曼树如下:208122664BDAC010101 从根开场到叶子得各字符的哈夫曼编码如下:A:0 B:100 C:11 D:101 那么对于电文“ABACCDA的二进制电码为:0100011111010 总长为13位三、实例三、实例补充内容:用一维数组存放单链表静态链表李赵孙周郑吴王钱A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李赵孙周郑吴王钱A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:

15、用一维数组存放单链表静态链表2 李赵 8 孙周郑吴王钱A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李赵 8 孙周郑吴王钱 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李赵 8 孙 1 周郑吴王钱 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周郑吴王钱 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑吴王钱 3A 0

16、 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑吴 5 王钱 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王钱 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6

17、 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3 史A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3 史A 0 1 2 3 4 5 6

18、 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3 史 3A 0 1 2 3 4

19、 5 6 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2

20、 3 4 5 6 7 8 9在“孙的前面插入一个“史:删除“周时表的变化:2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:删除“周时表的变化:2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1

21、2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:删除“周时表的变化:2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1

22、 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面插入一个“史:删除“周时表的变化:2 李 6 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 92 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9在“孙的前面

23、插入一个“史:删除“周时表的变化:2 李 6 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 9 史 3A 0 1 2 3 4 5 6 7 8 9总结:静态链表在插入和删除时普通不需求挪动元素,仅需求修正指针即可。但在恳求存储空间时需求一次性恳求足够大的空间。三、实例三、实例补充内容:用一维数组存放单链表静态链表2 李 4 赵 8 孙 1 周 6 郑 7 吴 5 王 0 钱 3A 0 1 2 3 4 5 6 7 8 9静态链表的构造类型定义:#defined MAXSIZE 1000 /链表的最大尺寸Typedef struct StaticListNode ElemType data;/

24、存放表中元素的值 int next;/指示后继元素的存放位置 StaticListNode,StaticLinkList MAXSIZE;/定义一个数组四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序1.哈夫曼树的结点的物理构造:weightparentlchildrchildTypedef struct HTNode unsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;/该指针用以恳求数组时作为数组名2.结点物理构造的C言语定义:例如:7 7 0 05 6

25、 0 025 0045006 634a7b5c2d 4117256111818016 1 2 3 4 5 6 7HT哈夫曼树HT的存储构造如下(HT为HuffmanTree类型):HT是一个HTNode类型的一维数组,用以存放m个结点元素(m=2n-1,其中n为叶子个数);即采用静态二叉链表存放哈夫曼树;故HT可以用如下语句为其恳求空间:HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);其中 0号单元未用,从HT1开场存放树的结点四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序1.哈夫曼树的结点的物理构造:weigh

26、tparentlchildrchildtypedef char*HaffmanCode;/HaffmanCode是指向一个 字符型数组的指针类型 3.用n个字符型数组存放n个叶子的哈夫曼编码这n个字符数组的头指针HCi(1in)分别指向一个字符型数组的首地址,又构成一个指针类型的一维数组;“0“1“1“0“0“1“0“0.“0“0“1“1“1“0HC1HC2HCn.那么n个字符串数组的头指针HCi(1 in)可以如此定义:HC=(HuffmanCode)malloc(n+1)*sizeof(char*);HCi=(char*)malloc(编码长度+1)*sizeof(char);四、构造哈夫

27、曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序4.构造哈夫曼树的程序之实现:算法思想:例如:a7b5c2d 4611187 0 0 05 0 0 020 0040000 00000000000 1 2 3 4 5 6 7HT其哈夫曼树HT的存储构造的初始情况如下:针对第i个结点(n+1i2n-1,n=4为叶子结点的个数),在1i-1号结点中为第i个结点寻觅两个儿子结点(该两个儿子应该是i-1个节点中无父亲且权值最小的两个结点)四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序4.构造哈夫曼树的程序之实现:算法思想:例如:a

28、7b5c2d 4611187 0 0 05 0 0 025 0045006 03400000000 1 2 3 4 5 6 7HT其哈夫曼树HT的存储构造的初始情况如下:针对第i个结点(n+1i2n-1,n=4为叶子结点的个数),在1i-1号结点中为第i个结点寻觅两个儿子结点(该两个儿子应该是i-1个节点中无父亲且权值最小的两个结点)四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序4.构造哈夫曼树的程序之实现:算法思想:例如:a7b5c2d 4611187 0 0 05 6 0 025 0045006 634110250000 1 2 3 4 5 6

29、7HT其哈夫曼树HT的存储构造的初始情况如下:针对第i个结点(n+1i2n-1,n=4为叶子结点的个数),在1i-1号结点中为第i个结点寻觅两个儿子结点(该两个儿子应该是i-1个节点中无父亲且权值最小的两个结点)四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序4.构造哈夫曼树的程序之实现:算法思想:例如:a7b5c2d 4611187 7 0 05 6 0 025 0045006 6341172518016 1 2 3 4 5 6 7HT其哈夫曼树HT的存储构造的初始情况如下:针对第i个结点(n+1i2n-1,n=4为叶子结点的个数),在1i-1号结点

30、中为第i个结点寻觅两个儿子结点(该两个儿子应该是i-1个节点中无父亲且权值最小的两个结点)四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序4.构造哈夫曼树的程序之实现:void HuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,int n)/w是存放n个字符的权值的一维数组,n为叶子个数;构造哈夫曼树HT;if(n=1)return;m=2*n-1;/n即为叶子数n0,由二叉树性质3,n0=n2+1,故树中结点数为2*n-1 HT=(HuffmanTree)malloc(m+1)*sizeof(HTNo

31、de);/0号单元未用 for(i=1;i=n;i+)/n个叶子结点赋初值,n个叶子最初为n个根结点 HTi.weight=wi-1;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;for(i=n+1;i=m;i+)/n-1个度为2的结点赋初值 HTi.weight=0;HTi.parent=0;HTi.lchild=0;HTi.rchild=0;for(i=n+1;i=m;i+)/第i次循环时为第i个结点选择两个儿子结点s1与s2 Select(HT,i-1,&s1,&s2);/在i-1棵子树中也即HT1.i-1中选择无父亲(parent为0)/且权值最小的两个

32、结点(其序号分别为s1和s2)。该子程序是一个顺序查找过程 HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;/建立父子关系 /哈夫曼树HT构造终了四、构造哈夫曼树并求四、构造哈夫曼树并求n个字符的哈夫曼编码之程序个字符的哈夫曼编码之程序5.从叶子到根逆向求每个字符的哈夫曼编码的程序之实现:/从叶子到根逆向求每个字符的哈夫曼编码从叶子到根逆向求每个字符的哈夫曼编码;HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/恳求恳求n个字

33、符编码的头指针个字符编码的头指针数数 组的存储空间组的存储空间 cd=(char*)malloc(n*sizeof(char);/恳求存放编码的任务数组恳求存放编码的任务数组(n+1个字符个字符空间空间)cdn-1=“0;/当前字符的编码任务数组的最后一个单元存放一个终了当前字符的编码任务数组的最后一个单元存放一个终了符。符。for(i=1;i=n;+i)/第第i次循环时求第次循环时求第i个叶子个叶子(字符字符)的哈夫曼编码的哈夫曼编码 start=n-1;/start指向指向cd数组数组(即任务数组即任务数组)中编码终了符的位置中编码终了符的位置 for(c=i,f=HTi.parent;f

34、!=0;c=f,f=HTf.parent)/从叶子到根逆向求编从叶子到根逆向求编码码 if(HTf.lchild=c)cd-start=“0;/假设当前结点是其父亲的左孩子,假设当前结点是其父亲的左孩子,赋赋0值值 else cd-start=“1;/假设当前结点是其父亲的右孩子,那么赋假设当前结点是其父亲的右孩子,那么赋1值值 HCi=(char*)malloc(n-start)*sizeof(char);/为存放第为存放第i个字符的编码恳求个字符的编码恳求空间空间strcpy(HCi,&cdstart);/从从cd复制编码复制编码(串串)到到HC,规范函数,规范函数 strcpy在头文在头

35、文 件件string.h中,故程序的最前面应该有伪操作中,故程序的最前面应该有伪操作#include /i从从1到到n求求n个叶子的编码个叶子的编码 free(cd);/求编码终了,求编码终了,释放任务数组释放任务数组cd所占用的存储空间所占用的存储空间/HuffmanCoding五、小结五、小结:4.哈夫曼树的运用:哈夫曼编码的设计问题。2.哈夫曼树的定义:WPL=wi*li最小的二叉树称为“最优二叉树或称为“哈夫曼树。3.哈夫曼树求解的算法思想:3个步骤。1.哈夫曼树的引入:程序优化问题。i=1n n作业:1.假设用于通讯的电文仅由6个字母 A,B,C,D,E,F组成,这6个字母在电文中出现的频率高低依次为:3,4,5,8,9,4,试为这6个字母设计哈夫曼编码。2.证明:假设哈夫曼树中有n个叶子结点,那么该哈夫曼树中共有2n-1个结点。提示:哈夫曼树中无度数为1的结点,那么利用教材第124页二叉树的性质3即可得证3.试用规范C言语实现根据n个字符结点的权值求哈夫曼树及n个字符的哈夫曼编码的子程序,并编制主程序main调用该子程序对其正确性进展验证。End

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!