简易费诺算法的C语言实现
Posted 书盲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简易费诺算法的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下载
以上是关于简易费诺算法的C语言实现的主要内容,如果未能解决你的问题,请参考以下文章