Huffman树的定义
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。(来自百度百科)
算法思想
1.对给出的所有叶子节点的权重进行从小到大的排序,得到权重向量W = (p1, p2, p3…pn)。
2.写出子节点为p1,p2父节点为p1+p2的单元树
3.对p1+p2及p3,p4…pn从小到大排序,再重复2,3,直到只剩一片叶子
程序的参数说明
1.A为叶子节点的权重向量
2.W为输出的Huffman树
MATLAB实现
function W = Huftref(A)
k = 1;
Y = sort(A);
n = length(A);
B = Y(1) + Y(2);
W = [Y(1) Y(2) B];
Y1 = Y;
m = 0;
while m == 0
k = k + 1;
B1 = [B Y1(3 : length(Y1))];
f = length(B1);
if f >= 2
Y1 = sort(B1);
B = Y1(1) + Y1(2);
W(k,:) = [Y1(1) Y1(2) B];
else
m = 1;
end
end
测试
1.测试用例:A =
2 4 5 6 8 9
2.测试结果:W =
2 4 6
5 6 11
6 8 14
9 11 20
14 20 34