費諾編碼C程式及演示結果

2021-07-07 05:36:10 字數 2459 閱讀 2679

費諾編碼

功能簡介:首先輸入信源符號的個數,然後輸入各個信源符號的概率。(概率之和等於1)

主程式:  李松林

#include  湖北師範學院

#include

#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]=,tmp=0,m[g]=,k=0,h=0,num[g]=,sum1=0,sum2=0;

int k[g]=,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;iscanf("%f",&a[i]);

tmp+=a[i];

if(tmp<0.9999||tmp>1.0001)

printf("輸入的資料不符合要求

,請重新輸入

\n");

tmp=0;

goto loop;

else

for(i=0;ifor(j=i+1;jif(a[i]從大到小排序

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

for(i=0;im[i]=-log10(a[i])/log10(2.0);//求出

-log p(ai)

並儲存在陣列m裡

function3(0,n);

for(i=0;ih+=a[i]*m[i];//求信源熵

k+=a[i]*k[i];//平均碼長

printf("信源訊息符號

ai  

符號概率

p(ai)    

碼長ki      

二元碼字

\n");

for(i=0;iprintf("     a%d           %-4.2f              %d           ",i+1,a[i],k[i]);

for(j=0;jprintf("%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;ifor(j=c;jsum1+=a[j];

for(j=i+1;jsum2+=a[j];

num[i]=fabs(sum1-sum2);//取絕對值

sum1=0;

sum2=0;

for(i=c;iif(num[d]>num[i])

d=i;

d+=1;

return d;

void function2(int c,int num1,int m,int cs)//進行分組並計算碼長、碼字

for(i=c;is[i][cs]=0;

k[i]+=1;

for(j=num1;js[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語言實現漢諾塔自動遞迴演示程式 project 漢諾塔演示軟體 language c語言 author 404name 疊64層需要開全視窗並且將字型大小調整為6 0 include include int len,width,left,mid,rig...

C語言 用C語言實現漢諾塔自動遞迴演示程式

1.變介面大小依照輸入遞迴數改變。2.漢諾塔自動移動演示。3.採用gotoxy實現流暢重新整理。4.保留文字顯示遞迴流程 部落格鏈結 輸入要遞迴的漢諾塔數目,在原來的漢諾塔基礎上新增move play函式展示遞迴,用next陣列儲存每種移動狀態。對應的從哪到哪可自動對應相應的移動方式自動移動。ini...

配置C程式的編譯環境,及怎樣演示Demo

並將mingw解壓至c盤。環境配置 1 建立高階環境變數中建立系統變數 1 lib 值為 c mingw lib 這裡面含有gcc.exe編譯工具 2 include 值為 c mingw include 這裡面是一些標頭檔案 2 在系統變數path中新增 c mingw bin 如上圖配置成功 以...