首先统计各字母出现频率,为了用最少的编码位数,尽量把出现频率高的字母放在树的最高位,下面来看怎么做的:
m:3
n:2
a:1
b:2
排序为:
字符 a b n m
频率 1 2 2 3
低的在树的最下面,先合并,权值相加,a和b合并,权值1+2=3
假设a和b合并的新节点为c
相加后的是3,n的权值是2,所以a和b合并得到的节点要插入在n和m中间
新的排序为
字符 n c m
频率 2 3 3
所以接下来n和c合并
假设新节点为d,权值是n的权值2加上c的权值3,所以d的权值为5
新的排序为:
字符 m d
频率 3 5
所以m和d合并
再把左节点编码为0,右边节点编码为1
最终可以得到下面的编码表:
字符 m n a b
编码 1 00 010 011
所以"mabbnmnm"的编码为:
1 010 011 011 00 1 00 1共16位
详细哈夫曼编码参考https://blog.csdn.net/FX677588/article/details/70767446