⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shannon.c

📁 Shannon算法C语言的实现 Shannon算法C语言的实现
💻 C
字号:
#include "stdio.h"
#include "math.h"
main()
{
    int i,t;
    float buff,ka,R,Hx;
    float p[ ]={0,0.2,0.19,0.18,0.17,0.15,0.10,0.01};  /*符号概率*/
    float ps[10];                                      /*累加概率*/
    int k[10];                                         /*码字长度*/
    char m[10][10];                                    /*码字*/
    /*计算累加概率*/
    for (i=1;i<=7;i++)
    {
        for(t=1;t<i;t++)
        {
            ps[i]=ps[i]+p[t];
        }
    }
    /*计算码字长度*/
    for(i=1;i<=7;i++)
    {
        k[i]=(int)((-log(p[i])/log(2)))+1;
    }
    /*求出码字*/
    for(i=1;i<=7;i++)
    {
        buff=ps[i];
        for(t=1;t<=k[i];t++)
        {
            buff=buff*2;
            if(buff>=1) 
            {
                m[i][t]='1';
                buff=buff-1;
            }
            else
            {
                m[i][t]='0';
            }
        }
    }
    /*输出结果*/
    for(i=1;i<=7;i++)
    {
        printf("The code word x%d is:",i);
        for(t=1;t<=k[i];t++)
        {
            printf("%c",m[i][t]);
        }
        printf("\n");
        ka=ka+p[i]*k[i];
        Hx=Hx-p[i]*(log(p[i])/log(2));
    }
    R=Hx/ka;
    printf("The average length is %f m/f",ka);  /*m/f:码元/符号*/
    printf("The rate is %f bit/m",R);                       /*bit/m:比特/码元*/
    getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -