题目
已知一段文本有1382个字符,使用了1382个字节进行存储,这段文本全部是由a、b、c、d、e这5个字符组成,a出现了354次,b出现了483次,c出现了227次,d出现了96次,e出现了232次,对这5个字符使用哈夫曼(Huffman)算法进行编码,则以下哪些说法正确()
A.使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间
B.使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值是唯一确定的
C.使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值可以有多套,但每个字符编码的位(bit)数是确定的
D.b这个字符的哈夫曼编码值位数应该最短,d这个字符的哈夫曼编码值位数应该最长
怎么没能早点看到你这篇文章呢
B和D?就大神指点
霍夫曼编码是,电文总长最短的二进制前缀编码。
其实D看漏了。很简单,1382个字符占用1382个字节,每个字符占一个字节存储,出现次数最多的,先用内存字节数也最多,因此,根据哈夫曼的数学原理,即树的带权路径和最小,编码最优。因此离树根最近的,必然应该编码它占用位数最少。
Huffman树就是求最优解。可以有多套方案,但最终每套方案生成的编码长度都相同且都是最优解
感觉A说的不是很严谨,最优解只是对于Huffman编码的储存来讲,但别的压缩方法会比Huffman压缩更小,感觉有点不对
关于D选项,从哈夫曼编码思想的角度,频率最高的编码就应该最短,频率最低的编码就应该最长,选项中说的是“应该”,提出的是要求,而实际是不是有和它一样长的,只有编码之后才知道,有也并不违背这个要求,所以D没毛病
A为啥要选?难道直接用字符储存不如编码节约空间?
哈夫曼编码采用变长编码对源符号进行编码,变长编码表根据源符号出现概率得到,源符号出现概率越大,对应编码越短,反之越长。这样得到的编码平均长度和期望值最小,可以压缩存储。使用哈夫曼编码这几个字符对应的编码值不唯一,但是它们所占的编码位数唯一。所以答案为ACD