- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Huffman树及其应用 Huffman树简介: 构造霍夫曼树的基本思想: 构造Huffman树的步骤: 操作要点2:按左0右1对Huffman树的所有分支编号! 例2:假设用于通信的电文仅由8个字母 a, b, c, d, e, f, g, h 构成,它们在电文中出现的概率分别为 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10 ,试为这8个字母设计哈夫曼编码。如果用0~7的二进制编码方案又如何? 为清晰起见,重新排序为:w 2, 3, 6, 7, 10, 19, 21, 32 对应的哈夫曼编码(左0右1): 例3:设字符集为26个英文字母,其出现频度如下表所示。 采用C语言的编程方法在VC++6.0环境下实现本题目的要求。主程序流程图 压缩部分 #include #include #include #define MAX_SIZE 1000000 #define n 150 #define m 2*n-1 typedef struct char ch; int weight; int lchild,rchild,parent; HuffmanTree; typedef HuffmanTree HTree[m]; typedef struct char ch; char bits[n+1]; HuffmanCode; typedef HuffmanCode HCode[n]; int FileRead int count[],char s[],char filename[] int i 0,N 0,k 0,temp[n]; char c; FILE *rf; rf fopen filename,r ; if rf NULL printf cannot open file\n ; exit 0 ; for i 0;i n;i++ temp[i] 0; count[i] 0; while !feof rf c fgetc rf ; k c; temp[k]++; i++; fclose rf ; for i 0;i n;i++ if temp[i]! 0 s[N] i; count[N] temp[i]; N++; return N; //FileRead 三 生成Huffman树函数 选取字符中权值最小的两个节点建树,将权值相加放在根节点中,将原节点删除,新节点放入数组。递归进行上述操作直到数组中只有一个节点为止。 算法如下: 2、建立哈夫曼树 构造哈夫曼数时,首先将n个权值的叶子结点存放到数组huffTree[2*num]的前n个分量中,然后不断的将两棵子树合并为一棵子树,并将新子树的根结点顺序存放到数组huffTree[2*num]的前n个分量的后面。设n个叶子的权值保存在数组cnt[n]中,哈夫曼树的存储主要是利用数组存储,例如将已知字符窜s为abcdeacedaeadcedabadadaead统计出的字符频率分别为a:9,b:2,c:3,d:7,e:5则构造哈夫曼树的存储空间的初始状态 最后状态如图: 四 求Huffman编码函数: 从叶子节点找到根节点,若该节点是双亲节点的左孩子为1,反之为0,直到根节点为止求得该节点Huffman编码的逆序列; 1.、对哈夫曼树进行编码函数void Huffmancoding element huffTree[],Code CodeNode[],char str[],int n ; 主要思想:规定哈夫曼编码树的左分支代表0,右分支代表1,则从根结点对应的字符的编码,称为哈夫曼编码。例如上面所举例子的哈夫曼编码构造树及哈夫曼编码 对每个叶子结点进行编码: a.1初始化编码深度为0,将孩子结点的双亲结点付给一个变量,双亲结点不为空时,深度加1,继续向上查找,这时该双亲结点已变成孩子结点,循环知道双亲结点为空,求出每一个叶子结点的深度。 a.2将编码初始结点初始化为深度+1,将孩子结点的双亲结点付给一个变量,双亲结点不为空时,初始结点-1,如果此孩子为双亲的左孩子,则置为0,否则置为1,循环知道双亲结点为空。编码完毕! 函数C代码: void HuffmanCoding HTree T,HCode H,int N,char s[] int c,p,i,start; char cd[n+1]; cd[N+1] \0; for i 0;i N;i++ H[i].ch s[i]; start N; c i; p T[c].parent; while p if T[p].lchild c cd[--start] 0; else cd[--start] 1; c p; p T[p]
您可能关注的文档
最近下载
- 天然气长输管道安装施工风险危害清单.docx VIP
- 【国家标准】NBT 31008-2019 海上风电场工程概算定额.pdf VIP
- 2025年通信工程施工企业安全生产三类人员考试(项目负责人·B证)历年参考题库含答案详解(5套).docx VIP
- 1例慢性心功能不全急性加重的护理查房.pptx VIP
- 习题-9-能量代谢与体温.doc VIP
- 四大家鱼养殖技术规范(DB44-T 483-2008).docx VIP
- 下载PDF文件(1429K).PDF VIP
- 科研项目经费报销细则_附件.doc VIP
- 中医治疗心悸课件最新完整版本.pptx VIP
- JB∕T 7175.6-2015 滚动直线导轨副 第6部分:额定动载荷和额定寿命.pdf
原创力文档


文档评论(0)