香农码,费诺码和霍夫曼码的编码方法与简单比较

香农码

编码步骤:

  1. 将信源符号的发生概率(降序)排序;
  2. 计算各信源符号的自信息量
  3. 码长:自信息量向上取整;(保证是唯一可译码,且无失真编码)
  4. 排序后的信源符号,计算累加概率(取左端点);
  5. 累加概率二进制话,取对应码长,得到编码码字;

编码举例:

有a b c d概率分别为0.25 0.4 0.2 0.15

码元概率Ii=-logPi码长(向上取整)累加概率(左端点)二进制化香农码
b0.41.322200.0000
a0.252.020+0.4=0.40.0101
c0.22.32230+0.4+0.25=0.650.101101
d0.152.73730+0.4+0.25+0.2=0.850.110110

 

平均码长=(0.4+0.25)*2+(0.2+0.15)*3=2.35

信源熵=0.5328+0.5+0.4644+0.41055=1.90775

编码效率=1.90775/2.35=0.812


费诺码:

编码步骤:

  1. 将信源符号的发生概率排序(为了方便,不是必须的);
  2. 尽可能的等概率划分成两类;
  3. 以符号“0”和“1”标识;
  4. 直到只有一个符号时结束;

编码举例: 

有a b c d概率分别为0.25 0.4 0.2 0.15

码元概率第一次第二次第三次费诺码(根节点到叶节点
b0.400
a0.251010
c0.210110
d0.151111

平均码长=0.4+0.25*2+(0.2+0.15)*3=1.95

信源熵=0.5328+0.5+0.4644+0.41055=1.90775

编码效率=1.90775/1.95=0.978


霍夫曼码:

编码步骤:

  1. 按概率递减排序;
  2. 将概率最小的两个相加并用“0”和“1”表示,得到新的信源
  3. 对新的信源按概率(递减)排序
  4. 重复以上步骤,直到信源只剩两个符号;
  5. 然后从叶节点到根节点的顺序,获得编码;

 编码举例:

过程:

 可以得到:

bacd
101000

001

平均码长=0.4+0.25*2+(0.2+0.15)*3=1.95

信源熵=0.5328+0.5+0.4644+0.41055=1.90775

编码效率=1.90775/1.95=0.978


比较:

  1. 香农编码具有很好的扩展性;
  2. 实际的编码效率:霍夫曼>费诺>香农;
  • 18
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值