matlab实现多元霍夫曼编码

    采用matlab矩阵和元胞数据结构等可以简单的实现多元霍夫曼编码。

   (1) 假设实现Q元霍夫曼编码,首先判断符号数量个数len是否满足(len-Q) / (Q-1)为整数,如果不是,向概率中添加若干0概率事件,事件符号为len+1,len+2...直到满足前面所述等式,添加完后的事件个数记为N。

    (2)将事件符号(1-N),父亲节点(先置为0),概率大小(probability)添加到矩阵temp中。

    (3)将temp按照概率从大到小排序,截去最后三行,将这三行的父亲节点置为N+1,然后存入矩阵final中。计算这三行的概率之和,形成一个新节点new,new的事件符号为N+1,父亲节点为0,概率大小为选取的三行的概率之和。将new加入temp,重复第三步,直至temp为空。

    (4)在搜索节点,构造编码。首先声明alldict元胞矩阵,共三列,第一列第二列分别存储final第一列第二列,第三列为空。

    (5)将0-(Q-1)分配给事件符号最大的节点,存入第三列,然后寻找事件符号次大的节点,将0-(Q-1)分配给第三列,如果第三列已经存在部分编码,则将现在分配的编码和已分配的编码合并,并且现在分配的编码放在原来编码的前面。重复第五步,直至没有父亲节点。编号的码已存在alldict的第三列。

    (6)将alldict按照第一列排序,选取前len行

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值