本文目录一览

1,哈夫曼编码算法

因为其中一个不能是另一个的前缀 所以只能是1111、1110、1101、1100

哈夫曼编码算法

2,赫夫曼编码后将结果以二进制形式存入文件即0 1 的信息用比特

首先 赫夫曼编码 你要会写. 假如写出来后 a 0b 10c 110d 111那么 用比特表示 (写入二进制)a 写入 0 b 写入 2 c写入 6d 写入 7

赫夫曼编码后将结果以二进制形式存入文件即0 1 的信息用比特

3,什么是哈夫曼编码和译码

哈夫曼编码http://baike.baidu.com/view/95311.htm译码http://baike.baidu.com/view/189742.htm

什么是哈夫曼编码和译码

4,哈夫曼树的构建过程

哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树的构造:假设给定的权值如下:3,5,7,8,10,15;首先取集合中最小的两个数:3+5=8,再删除集合中3和5的值,把8放入原集合,原集合变成:7,8,8,10,15; 8 / \ 3 5再从7,8,8,10,15中再取2个最小的数构成一个树 15 / \ 8 7 / \ 3 5再从8,10,15,15中再取2个最小的数构成一个树: 18 / \ 8 10再从15,15,18中取两个最小数:15,15,构成树: 30 / \ 15 15 / \ 8 7 / \ 3 5最后把18,30构成树(此时集合中已经没元素了,就形成了哈夫曼树): 48 / \ 30 18 / \ / \ 15 15 8 10 / \ 8 7 / \ 3 5希望你能看懂!!

5,什么是霍夫曼编码

霍夫曼(Huffman)编码原理 霍夫曼(Huffman)编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。 霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。 步骤进行:l)将信号源的符号按照出现概率递减的顺序排列。2)将两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率。 3)重复进行步骤1和2直到概率相加的结果等于1为止。4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示。5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码。例:设信号源为 s={s1, s2, s3, s4, s5}对应的概率为p={0.25,0.22,0.20, 0.18,0.15}。根据字符出现的概率来构造平均长度最短的异字头码字。霍未曼编码通常采用两次扫描的办法,第一次扫描得到统计结果,第二次扫描进行编码。霍夫曼编码具有一些明显的特点:1) 编出来的码都是异字头码,保证了码的唯一可译性。2) 由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。3) 编码长度不统一,硬件实现有难度。4) 对不同信号源的编码效率不同,当信号源的符号概率为2的负幂次方时,达到100%的编码效率;若信号源符号的概率相等,则编码效率最低。5) 由于"0"与"1"的指定是任意的,故由上述过程编出的最佳码不是唯一的,但其平均码长是一样的,故不影响编码效率与数据压缩性能。

6,霍夫曼树和霍夫曼编码trcpy怎么定义

一、哈夫曼树的概念和定义什么是哈夫曼树?让我们先举一个例子。判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:[cpp] view plain copyif(score<60) cout<<"Bad"<<endl; else if(score<70) cout<<"Pass"<<endl else if(score<80) cout<<"General"<<endl; else if(score<90) cout<<"Good"<<endl; else cout<<"Very good!"<<endl; [cpp] view plain copyif(score<60) cout<<"Bad"<<endl; else if(score<70) cout<<"Pass"<<endl else if(score<80) cout<<"General"<<endl; else if(score<90) cout<<"Good"<<endl; else cout<<"Very good!"<<endl; 若考虑上述程序所耗费的时间,就会发现该程序的缺陷。在实际中,学生成绩在五个等级上的分布是不均匀的。当学生百分制成绩的录入量很大时,上述判定过程需要反复调用,此时程序的执行效率将成为一个严重问题。但在实际应用中,往往各个分数段的分布并不是均匀的。下面就是在一次考试中某门课程的各分数段的分布情况: 下面我们就利用哈夫曼树寻找一棵最佳判定树,即总的比较次数最少的判定树。第一种构造方式:第二种构造方式:这两种方式,显然后者的判定过程的效率要比前者高。在也没有别地判定过程比第二种方式的效率更高。我们称判定过程最优的二叉树为哈夫曼树,又称最优二叉树===================================================================================================定义哈夫曼树之前先说明几个与哈夫曼树有关的概念:路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。路径长度:路径上的分枝数目称作路径长度。树的路径长度:从树根到每一个结点的路径长度之和。结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值 之积称为该结点的带权路径长度(weighted path length) 什么是权值?( From 百度百科 )  计算机领域中(数据结构)  权值就是定义的路径上面的值。可以这样理解为节点间的距离。通常指字符对应的二进制编码出现的概率。  至于霍夫曼树中的权值可以理解为:权值大表明出现概率大!  一个结点的权值实际上就是这个结点子树在整个树中所占的比例.  abcd四个叶子结点的权值为7,5,2,4. 这个7,5,2,4是根据实际情况得到的,比如说从一段文本中统计出abcd四个字母出现的次数分别为7,5,2,4. 说a结点的权值为7,意思是说a结点在系统中占有7这个份量.实际上也可以化为百分比来表示,但反而麻烦,实际上是一样的.树的带权路径长度:如果树中每个叶子上都带有一个权值,则把树中所有叶子的带权路径长度之和称为树的带 权路径长度。设某二叉树有n个带权值的叶子结点,则该二叉树的带权路径长度记为:公式中,Wk为第k个叶子结点的权值;Lk为该结点的路径长度。示例:======================================================================================================一般来说,用n(n>0)个带权值的叶子来构造二叉树,限定二叉树中除了这n个叶子外只能出现度为2的结点。那么符合这样条件的二叉树往往可构造出许多颗,其中带权路径长度最小的二叉树就称为哈夫曼树或最优二叉树===============================================================================二、哈夫曼树的构造根据哈弗曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。哈弗曼依据这一特点提出了一种构造最优二叉树的方法,其基本思想如下:下面演示了用Huffman算法构造一棵Huffman树的过程:三、哈夫曼树的在编码中的应用在电文传输中,需要将电文中出现的每个字符进行二进制编码。在设计编码时需要遵守两个原则:(1)发送方传输的二进制编码,到接收方解码后必须具有唯一性,即解码结果与发送方发送的电文完全一样;(2)发送的二进制编码尽可能地短。下面我们介绍两种编码的方式。1. 等长编码这种编码方式的特点是每个字符的编码长度相同(编码长度就是每个编码所含的二进制位数)。假设字符集只含有4个字符A,B,C,D,用二进制两位表示的编码分别为00,01,10,11。若现在有一段电文为:ABACCDA,则应发送二进制序列:00010010101100,总长度为14位。当接收方接收到这段电文后,将按两位一段进行译码。这种编码的特点是译码简单且具有唯一性,但编码长度并不是最短的。2. 不等长编码在传送电文时,为了使其二进制位数尽可能地少,可以将每个字符的编码设计为不等长的,使用频度较高的字符分配一个相对比较短的编码,使用频度较低的字符分配一个比较长的编码。例如,可以为A,B,C,D四个字符分别分配0,00,1,01,并可将上述电文用二进制序列:000011010发送,其长度只有9个二进制位,但随之带来了一个问题,接收方接到这段电文后无法进行译码,因为无法断定前面4个0是4个A,1个B、2个A,还是2个B,即译码不唯一,因此这种编码方法不可使用。因此,为了设计长短不等的编码,以便减少电文的总长,还必须考虑编码的唯一性,即在建立不等长编码时必须使任何一个字符的编码都不是另一个字符的前缀,这宗编码称为前缀编码(prefix code)(1)利用字符集中每个字符的使用频率作为权值构造一个哈夫曼树;(2)从根结点开始,为到每个叶子结点路径上的左分支赋予0,右分支赋予1,并从根到叶子方向形成该叶子结点的编码例题:假设一个文本文件TFile中只包含7个字符利用哈夫曼树可以为文件TFile构造出符合前缀编码要求的不等长编码具体做法:1. 将TFile中7个字符都作为叶子结点,每个字符出现次数作为该叶子结点的权值2. 规定哈夫曼树中所有左分支表示字符0,所有右分支表示字符1,将依次从根结点到每个叶子结点所经过的分支的二进制位的序列作为该 结点对应的字符编码3. 由于从根结点到任何一个叶子结点都不可能经过其他叶子,这种编码一定是前缀编码,哈夫曼树的带权路径长度正好是文件TFile编码 的总长度通过哈夫曼树来构造的编码称为哈弗曼编码(huffman code)http://blog.csdn.net/sddxqlrjxr/article/details/51114809

文章TAG:哈夫曼编码  编码  怎么  算法  哈夫曼编码怎么算  
下一篇