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

📄 信息论哈夫曼编码.txt

📁 输入每个符号的概率
💻 TXT
字号:
#include "stdio.h"
#include "math.h"
main()
{
 float a[100]={0};
 float f; 
 int i,j,k; 
 int x,y;
 int n;
 float sum1=0,sum2=0,sum3=0;
 
 printf("设信号源有n个符号,n=");
 scanf("%d",&n);
 printf("请输入这些符号的概率,概率由高到低输入:\n");
 
 AGAIN:
            
  for(i=1;i<=n;i++) 
  { 
    scanf("%f",&a[i]);
  
  }
   
   for(i=1;i<=n;i++)
      {
   	     sum1=sum1+a[i];
   	    }
   printf("输出结果:");   
      
   if(sum1!=1)
      { 
      	printf("\n概率和为:p[a1]+p[a2]+...+p[a%d]=%.2f  ",n,sum1);
       	printf("概率和不等于1,输入概率有误。\n请重新输入:\n");
       	
       	sum1=0;
        	
       	goto AGAIN;
      }
      
      for(j=2;j<n+2;j++)
   {
      a[n+1]=a[n+1]+a[j-2]; 
      printf("\n符号概率p(a%d)=%.2f  累加概率P%d=%.2f  ",j-1,a[j-1],j-1,a[n+1]);
      
      f=log10(1/a[j-1])/log10(2);
      printf("-logp(a%d)=%.2f  ",j-1,f);
      x=f; 

      a[n+2]=a[n+1];
      
      if(x==f) printf("码长K%d=%d  ",j-1,x);
      else
      {
      	x=x+1;
      	printf("码长K%d=%d  ",j-1,x);
      }
      
      sum2=sum2+a[j-1]*x;
      
      printf("码字: ");
      for(y=0;y<x;y++)
      {
      	a[n+2]=2*a[n+2];
      	if(a[n+2]<1)   printf("0");
      	else
      	{
      		printf("1");
      		a[n+2]=a[n+2]-1;
      		}
      	}
   }
    
   for(k=1;k<=7;k++)
   {
   	sum3=sum3+a[k]*log10(1/a[k])/log10(2);
   	}    
   
   printf("\n\n信源熵为  %.3f bit/符号\n",sum3);
   printf("平均码长为 %.3f码元/符号\n",sum2);
   printf("编码效率为 %.3f\n",sum3/sum2);  
 }

⌨️ 快捷键说明

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