简易费诺算法的C语言实现

编码算法

步骤1:开始时,统计字符串中信源符号(K)的符号总个数(N),并计算不同信源的概率分布(qK),即qK = NumK / N;

步骤2:将A,B,C三个信源符号按其概率(qK)递减排序:q0>=q1>=q2,其中q0,q1,q2代表qA,qB,qC按其概率大小排列的结果(概率相同的情况按字母升序排列,比如qA = qB,且都大于qC,则q0代表qA,q1代表qB);

步骤3:进行第一次分组:

         1.将依次排列的信源符号(K)按概率分为两大组,使两大组分别的概率和相差最小(算法可简化为概率最大的信源符号作第一组,其他两个符号作为第二组);

         2.第一组中Code[0][0] = 0,第二组中Code[m][0] = 1,其中m = 1和2;

步骤4:进行二次分组:

        1.按步骤3中分组方法将第一次分组中第二组的信源符号(K)进一步分成两组;

        2.其中分组后的第一组中Code[1][1] = 0;第二组中Code[2][1] = 1;

步骤5:输出信源符号(K)所对应的费诺编码(Code),其中Code数组中的一行(Code[m])代表某个信源符号(K)对应的费诺编码;

步骤6:输出字符串对应的费诺编码码流并结束。

注意:若某两个信源符号出现概率相同,对其概率从大到小排序时应按字母表升序排序。

费诺编码示例

运行结果:

 

 

代码是C语言实现的,想需要的可以给我留言单独发送。

源码下载链接:(1条消息) 费诺算法源码(技能大赛中算法)-电信文档类资源-CSDN下载

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值