贪心算法:哈弗曼编码

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

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

                         新建一个节点

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

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

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

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

算法伪代码:

符号说明:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值