哈夫曼树字符编码
问题描述
设一份电文中有不同出现频率的字符,为了提高电文的输入和翻译效率,必须有一套简短而又不会产生歧义的字符代码。试根据哈夫曼算法,对电文中的不同字符,构造出一棵哈夫曼树,对每个字符进行编码。
问题分析
本题只需要在一个简单的哈夫曼树的基础上,在节点信息中加入字符即可。实现后,出现频率高的字符会离根节点更近。也可以将出现频率改为其他信息,比如节点权重之类的。
代码
LetterTimes Class
由于普通的哈夫曼树的nodeValue
是int类型,所以我们这里自定义一个包含字符letter
和每个字符在电文中出现的频率times
,目的是为了可以在后续的输出中,直接输出每个字符在树中的位置。
public class LetterTimes {
private char letter;
private int times;
public LetterTimes(char letter, int times) {
this.letter = letter;
this.times = times;
}
public char getLetter() {
return letter;
}
public int getTimes() {
return times;
}
}