费诺编码C程序及演示结果
来源:互联网 发布:golang io.readfull 编辑:程序博客网 时间:2024/05/29 11:47
费诺编码
功能简介:首先输入信源符号的个数,然后输入各个信源符号的概率。(概率之和等于1)
主程序: 李松林
#include<stdio.h> 湖北师范学院
#include<math.h>
#define G 20
int function1(int c,int M);
void function2(int c,int num1,int M,int cs);
void function3(int c,int M);
float a[G]={0},tmp=0,m[G]={0},k=0,H=0,num[G]={0},sum1=0,sum2=0;
int K[G]={0},i,j,N,s[G][G],c,cs=0,num1=0,ks[G],zj[G],zh[G];
void main()
{
loop:printf("请输入信源符号个数N:");
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%f",&a[i]);
tmp+=a[i];
}
if(tmp<0.9999||tmp>1.0001)
{
printf("输入的数据不符合要求,请重新输入\n");
tmp=0;
goto loop;
}
else
{
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
{
if(a[i]<a[j]) //从大到小排序
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
for(i=0;i<N;i++)
{
m[i]=-log10(a[i])/log10(2.0);//求出-log p(ai)并保存在数组m里
}
/////////////////////////////////////////////////////////////////////////////
function3(0,N);
for(i=0;i<N;i++)
{
H+=a[i]*m[i];//求信源熵
k+=a[i]*K[i];//平均码长
}
printf("信源消息符号ai 符号概率p(ai) 码长Ki 二元码字\n");
for(i=0;i<N;i++)
{
printf(" a%d %-4.2f %d ",i+1,a[i],K[i]);
for(j=0;j<K[i];j++)
printf("%d",s[i][j]);
printf("\n");
}
printf("信源熵H=%5.3f bit/符号 费诺码的平均码长k=%5.3f 码元/符号 编码效率n=%4.1f%% \n",H,k,100*(H/k));
}
}
int function1(int c,int M)//求出分界点
{
int d=c;
for(i=c;i<M-1;i++)
{
for(j=c;j<i+1;j++)
sum1+=a[j];
for(j=i+1;j<M;j++)
sum2+=a[j];
num[i]=fabs(sum1-sum2);//取绝对值
sum1=0;
sum2=0;
}
for(i=c;i<M-1;i++)
{
if(num[d]>num[i])
d=i;
}
d+=1;
return d;
}
void function2(int c,int num1,int M,int cs)//进行分组并计算码长、码字
{
for(i=c;i<num1;i++)
{
s[i][cs]=0;
K[i]+=1;
}
for(j=num1;j<M;j++)
{
s[j][cs]=1;
K[j]+=1;
}
}
void function3(int c,int M)
{
num1=function1(c,M);
function2(c,num1,M,cs);
ks[cs]=c;
zj[cs]=num1;
zh[cs]=M;
cs++;
if((zj[cs-1]-ks[cs-1])>1)
{
function3(ks[cs-1],zj[cs-1]);
}
if((zh[cs-1]-zj[cs-1])>1)
{
function3(zj[cs-1],zh[cs-1]);
}
cs--;
}
第一次输入:6 0.32 0.22 0.18 0.16 0.08 0.04
结果:
第二次输入:7 0.20 0.19 0.18 0.17 0.15 0.10 0.01
结果:
第三次输入:8 0.1 0.18 0.4 0.05 0.06 0.1 0.07 0.04
结果:
- 费诺编码C程序及演示结果
- 香农编码C程序及演示结果
- 哈夫曼编码C程序及演示结果
- 费诺编码C语言实现
- Keras 示例程序结果演示及代码解析
- 费诺编码
- 费诺编码
- 香农编码、费诺编码、哈弗曼编码
- 演示程序及源代码
- 配置C程序的编译环境,及怎样演示Demo
- 信源编码算法(费诺编码&&哈夫曼编码)
- 信源编码算法(费诺编码&哈夫曼编码)
- 演示程序及文档下载
- 【C语言】程序结果
- URL编码解码原理及演示(Java演示)
- C#URL编码解码演示代码
- C#:一个增强的TcpClient(*)客户端演示程序及源代码下载
- C#:一个增强的TcpListener(*)服务器演示程序及源代码下载
- Android项目打包成APK文件
- Codeforces Round #331 (Div. 2)A. Wilbur and Swimming Pool(简单计算)
- hdu 1004 字符串统计
- swift之控制转移语句,continue,break,fallthrough,return,带标签的语句
- Tuple
- 费诺编码C程序及演示结果
- 删除Xcode中多余的证书provisioning profile
- 一分钟认识 Git
- Andorid制作内含控件的自定义布局
- 做一个下拉刷新必须需要掌握的android知识点
- 读书笔记:构造函数、析构函数、拷贝构造函数、赋值函数
- Zxing 竖屏切换 android
- 双十一剁手族,电商背后的那些技术你们造吗?
- 自己开发jquery插件的方法