贪心算法:哈弗曼编码

来源:互联网 发布:微信一键转发软件免费 编辑:程序博客网 时间:2024/06/15 18:32

哈弗曼树构建:每次选取频率最小和次小的两个字符;

                         将这两个字符从序列中删去;

                         新建一个节点

                        按照左小右大,分别作为新节点的左右子树;

                        新节点的频率为其左右子树频率之和;

                        将新节点插入字符序列中;

                        重复以上过程,知道序列中指一个节点(字符)

算法伪代码:

符号说明:

C是n个字符的集合;

对于每个c∈C,c都是一个对象:c.freq为该字符出现的频率

Q为一个以c.freq为关键字的最小优先队列

EXTRACT_MIN(Q):表示从优先队列中选出最小的元素,并删除该元素。

核心代码:

void hunfuman(C)

        n=|C|;

       Q=C;

       for i=1 to i=n-1

              创建一个新节点z ;

               z.left=x=EXTRACT_MIN(Q);

               z.right=y=EXTrACT_MIN(Q);

               z.freq=x.freq+y.freq;

               Insert(Q,z);

   return EXTRACT_MIN(Q);









                         

0 0
原创粉丝点击