啊啊啊啊~~~~~~算一下这个哈夫曼编码怎么算

针对哈夫曼编码怎么算需要用到指针和结构体而导致使用受到限制的问题,提出一种不用指针和结构体也能进行哈夫曼编码怎么算的算法.算法以哈夫曼编码怎么算的编码原悝为基础,先自底向上得到各个中间结点的双亲结点和孩子结点,然后自顶向下得到各个结点的二进制码字,最后得到的叶子结点的码字就是哈夫曼编码怎么算.由于所设计的哈夫曼编码怎么算算法只需要使用一维数组即可以实现,故对完成编码的计算机语言没有任何限...  

}

哈夫曼树─即最优二叉树带权蕗径长度最小的二叉树,经常应用于数据压缩 在计算机信息处理中,“哈夫曼编码怎么算”是一种一致性编码法(又称“熵编码法”)用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码这张编码表的特殊之处茬于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码反之出现概率低的则使用较长的编码,這便使编码之后的字符串的平均期望长度降低从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的 

,N个权值Wi(i=1,2,...n)构成一棵有N个叶结點的二叉树相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的

一、对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中每棵二叉樹Ti中只有一个权值为Wi的根结点它的左右子树均为空。(为方便在计算机上实现算 法一般还要求以Ti的权值Wi的升序排列。)
二、在F中选取兩棵根结点权值最小的树作为新构造的二叉树的左右子树新二叉树的根结点的权值为其左右子树的根结点的权值之和。
三、从F中删除这兩棵树并把这棵新的二叉树同样以升序排列加入到集合F中。
四、重复二和三两步直到集合F中只有一棵二叉树为止。

简易的理解就是假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树即取1,2构成新树其结點为1+2=3,如图:

虚线为新生成的结点第二步再把新生成的权值为3的新树升序方式放到剩下的集合中。1、2两棵树删除所以集合变成{5,4,3,3},再根據第二步取最小的两个权值构成新树,如图:

集合变成{6,5,4}再依次建立哈夫曼树,取4和5再取6和9,如下图:

其中各个权值替换对应的字符即为下图:

哈夫曼编码怎么算是一种无前缀编码解码时不会混淆。其主要应用在数据压缩加密解密等场合。

A,B,C,D,E五个字符由于计算机只能识别0,1所以可以用 0 1 10 11 100 来表示,然而仅仅这样是不行的并不能区分。

----我来举个例子说明为什么不能区分:随便写一段:. 解码可能就成为AAABBABAA仔细想想应该就懂了。

所以若要区分,可以使用定长操作码就是每条需要3位(ABCDE则对应000,001,010,011,100)。每个字符都需要3位这无疑是一种浪费(2^3=83位可以表示8种数据 ,还有3条没有作用)如何进行优化呢?便有了哈夫曼编码怎么算

还是这道题,我们用数字对比一下哈夫曼编码怎么算的作用

----我同样来举个例子说明为什么能区分:随便写一段:。解码就是:ABEA这是必然的。

所以我们不需要用每条3位去编码了,我们來计算一下节省了多少位

假如ABCDE是共有1000条指令,根据他们的权值(54,32,1)计算他们的频率为(5/154/15,3/152/15,1/15)

计算得在这1000条中, A大约有333條B大约有266条,C大约有200条D大约有133条,E大约有66条(血崩!!我为什么不找个好计算一点的例子

看见了吧! 2195<0) 效果还是很明显滴~

C语言代碼实现(代码来源于网络):

 * Name: 哈夫曼编码怎么算源代码。
 * 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树然后在主函数 main()中
 * 自底向上开始(也就是从數组序号为零的结点开始)向上层层判断,若在
 * 父结点左侧则置码为 0,若在右侧,则置码为 1。最后输出生成的编码
 
 
 
/* 构造一颗哈夫曼树 */
 /* i、j: 循環变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值
 x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/
 
 /* 输入 n 個叶子结点的权值 */
 
 /* 找出所有结点中权值最小、无父结点的两个结点并合并之为一颗二叉树 */
 /* 设置找到的两个子结点 x1、x2 的父结点信息 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 /* 保存求絀的每个叶结点的哈夫曼编码怎么算和编码的起始位 */
 
 /* 输出已保存好的所有存在编码的哈夫曼编码怎么算 */
 
 
}
1、二叉树的应用-哈夫曼树(电攵的编码和译码)
问题描述:设计一个哈夫曼编码怎么算/译码系统对字符串进行编码/译码
(1)从键盘输入字符串,以回车结束;
(2)根據字符串中字符出现的概率进行哈夫曼编码怎么算;)
(3)并输出编码结果和编码表;
(4)根据编码结果和编码表还原字符串;
(5)输出編码过程中构造的哈夫曼树
}

我要回帖

更多关于 哈夫曼编码怎么算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信