简易费诺算法的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语言实现的主要内容,如果未能解决你的问题,请参考以下文章

[译]C语言实现一个简易的Hash table

C语言一个小时实现简易三子棋,看看你能不能让愚蠢的电脑获胜,还不快上手试试吗(无AI算法)

C 语言实现简易区块链

C语言实现简易日历(附源码)

C语言实现简易日历(附源码)

C语言实现扫雷简易版