1、数据结构考试哈夫曼编码特辑能求哈夫曼树、哈夫曼编码,能求平均编码长度哈夫曼树:举个例子有个序列是(7,9,2,6,32,3,21,10)叫你求哈夫曼树注意:一般小的数放左边,大的放右边。左右节点可以互换的,编码也有不同。哈夫曼编码没有唯一性的,它的目的是用最短的代价去表示一系列数。步骤一:把这些点都看成是一个只有根结点的树的集合F步骤二,选2个值最小的树 步骤三:在这些树的集合F中删除这2棵树然后把 构成一颗二叉树变成了(5 = 2 + 3)然后把这个树加入到集合F 5代表这棵树的权值然后继续上述步骤肯定是选 5 和 6 把这2个构成二叉树在F中删除5 6 加入11这棵树变成了继续上述步骤选7
2、 和 9在F中删除7 和9 加入16这棵树变成了继续上述步骤选 10 和11在F中删除10 和11 加入21这棵树继续上述步骤选16和21 (有2个21,随便选哪个)我选那个只有一个根结点的21好了16和21构成二叉树 在F中删除这16和21这两棵树加入37这棵树继续上述步骤选21和32构成二叉树在F中删除21和32这2两棵树加入53这棵树还是继续上面步骤把F中的两棵树合并成一棵树完成了!这个就是哈夫曼树哈夫曼编码:以上图结果为例,左边为0,右边为1,进行编码,结果如下图:7,9,2,6,32,3,21,10编码为:7的编码为0009的编码为0012的编码为101006的编码为101132的编
3、码为113的编码为1010121的编码为0110的编码为100以上述结果为例,如果题目为:要输出的字符集D=A,B,C,D,E,F,G,H字符出现频率w=0.07,0.09,0.02,0.06,0.32,0.03,0.21,0.10对应编码就是:(A)0.07的编码为000(B)0.09的编码为001(C)0.02的编码为10100(D)0.06的编码为1011(E)0.32的编码为11(F)0.03的编码为10101(G)0.21的编码为01(H)0.10的编码为100以上述结果为例,求平均编码长度:3*0.07+3*0.09+5*0.02+4*0.06+2*0.32+5*0.03+2*0.
4、21+3*0.10=2.33以3*0.07为例, 0.07为频率w里面的0.07,因为编码是000,有3位数,所以是3。公式是:编码位数*频率w。以上述结果为例,如果题目为:若用这三位二进制数(07)对这8个字母进行等长编码,则哈夫曼编码的平均码长是等长编码的百分之几?它使电文总长平均压缩多少?答:用三位二进行数进行的等长编码平均长度为3 2.33/3=0.77=77% 其平均码长是等长码的77%。 所以平均压缩率为23%。注释:三位二进制数(07)对这8个字母进行等长编码意思是: (0)A=000,(1)B=001,(2)C=010,(3)D=011,(4)E=100,(5)F=101,(6)G=110,(7)H=111