费诺编码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10
void fano();
void read();
void px();
int i,j=0,q;
float a[N],c=0,p=0;
char b[N][N];
void main()
{
void fano(int m,int j,float a[N]);
FILE *write;
write=fopen("2.txt","w");
a[0]=0.0;
fprintf(write,"排序前的概率为:");
read();
for(i=1;i<=j;i++)
{
fprintf(write,"%1.2f/t",a[i]);
}
fprintf(write,"/n");
fprintf(write,"排序后的概率为:");
px(i,j);
for(i=1;i<=j;i++)
{
fprintf(write,"%1.2f/t",a[i]);
}
fprintf(write,"/n");
fprintf(write,"费诺编码为:/n");
fano(1,j,a);
fprintf(write,"a/t概率/t编码/n");
for(i=1;i<=j;i++)
{
fprintf(write,"a[%d]/t%1.2f/t%s/n",i,a[i],b[i]);
}
}
//------------------------------------------------------------------------------------//
void read()
{
FILE *read;
read=fopen("1.txt","r");
for(i=1;i<N;i++)
{
fscanf(read,"%f/t",&a[i]);
p+=a[i];
j++;
if(p==1)
break;
}
}
void px(,int i,int j)//排序
{
for(i=1;i<j;i++)
{
for(q=1;q<=j;q++)
{
if(a[q]<a[q+1])
{
c=a[q];
a[q]=a[q+1];
a[q+1]=c;
}
}
}
}
//--------------------------------------------------------------------------//
void fano(int m,int j,float a[N])
{
int x;
float t1,t2=0.0,sum=0.0;
if(m==j)
{return;}
for(i=m;i<=j;i++)
{
sum+=a[i];
x=m;
}
do{
t1=t2;
t2=t2+a[x];
x++;
}while(t2<=sum-t2);
if((sum-2*t1)<=(2*t2-sum))x--;
for(i=m;i<x;i++)
strcat(b[i],"0");
for(i=x;i<=j;i++)
strcat(b[i],"1");
fano(m,x-1,a);
fano(x,j,a);
//-----------------------------------------------------------//
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值