1、哈夫曼编码用于压缩,哈夫曼编码长度不固定,每次都需要重新计算编码,需要一定时间开销,虽然可以压缩但是是以消耗时间为代价的,大规模传输不能用哈夫曼编码,时间比较慢。更不用于加密通话。
2、23个字母的字符串(ajkfa sjkdh akjha jkssa jks),用ASKI编码消耗23*8=184bit,编码长度由字符种类决定的,由于ASKI有字母数字和符号,所以需要255即8个字节长度。对于定长编码(比如八位(ajkfsdh),就可以用2的三次方来表示),那么这23个字母就消耗23*3=69bit。
3、产生不定长编码又不会产生重复需要使用哈夫曼编码。
4、哈夫曼树的生成:先统计每个字符出现的次数即a-5,j-5,k-5,f-1,s-4,d-1,h-2。然后选两个频率最低的,若两个频率相等,任选一个即可。d、f频率最低,作为两个节点,合成一个2,让2代替这两个字符放进这些字符里,然后再选两个个最小的h和2,合成为4,把4放进去,在选两个最小的4和h,合称为8,放进去然后再选两个最小的,由于这三个一样大,任选两个即可j和a,合成为10,把10放进去,选取两个最小的8和k,合称为13,最后13和10合称为23,一直重复该过程,直到只剩下一个数为止。这样会形成一个树,我们让这个数的左侧等于0,右侧等于1(右侧等于0,左侧等于1也可),这样就可以得到一个哈夫曼树。每个字符的编码就是从上到下的路径即a-11,j-10,k-01,f-00001,s-001,d-00000,h-0001。这就形成了哈夫曼编码(只要字符都在叶子节点上,他们的路径就不会重复)。所以对于哈夫曼编码需要消耗:2*5+2*5+2*5+5*1+3*4+5*1+4*2=60bit。由于会有相同频率的,如果有多个,每次都人选两个,所以形成的哈夫曼编码可能会不同。不同的哈夫曼树会产生不同的哈夫曼编码,但最终计算的结果都为60bit。因为每个哈夫曼树都是最优的。