資源簡介
信息論實驗報告必備編碼——基于上下文自適應算術編碼
代碼片段和文件信息
#include
#include
#include
double?proc1[3]={1.0/31.0/31.0/3}proc2[3][3]={1.0/21.0/41.0/41.0/41.0/21.0/41.0/41.0/41.0/2};
double?proc3[3][3][3]={3.0/51.0/51.0/5
??1.0/41.0/41.0/2
??1.0/41.0/41.0/2
??1.0/21.0/41.0/4
??1.0/53.0/51.0/5
??1.0/41.0/41.0/2
??1.0/21.0/41.0/4
??1.0/21.0/41.0/4
??1.0/51.0/53.0/5};//概率
double?resultarea=1areaBegin=0areaEnd=1;//譯碼所選取的數
int?cord[256]dcord[256]cordLength;//編碼、譯碼及長度
char?str[256];//輸入符號字符串
int?strLength=0;
int?readdat()
{
printf(“***********基于上下文自適應算術編碼***********“);
printf(“請輸入字符串(0——2):\n“);
scanf(“%s“str);
strLength=strlen(str);
for(int?i=0;i if(str[i]>=‘0‘&&str[i]<=‘9‘)
return?1;
return?0;
}
int?count(char?*strint?iint?k)
{
int?jn=1;
char?m=k+‘0‘;
for(j=0;j<=i;j++)
if(str[j]==m)
n++;
return?n;
}
void?encord()
{
printf(“編碼:\n“);
int?ijn1n2n3;
for(i=0;i {
if(i==0)
{
n1=str[0]-‘0‘;
for(j=0;j areaBegin+=proc1[j]*area;
areaEnd=areaBegin+proc1[n1]*area;
}
if(i==1)
{
n2=str[1]-‘0‘;
for(j=0;j areaBegin+=proc2[n1][j]*area;
areaEnd=areaBegin+proc2[n1][n2]*area;
}
if(i>=2)
{
n1=str[i-2]-‘0‘;
n2=str[i-1]-‘0‘;
n3=str[i]-‘0‘;
for(j=0;j areaBegin+=proc3[n1][n2][j]*area;
areaEnd=areaBegin+proc3[n1][n2][n3]*area;
}
area=areaEnd-areaBegin;
}
result=areaBegin*0.01+areaEnd*0.99;
cordLength=int(log(1.0/area)/log(2))+1;
printf(“編碼選取的數為:%f??\n“
- 上一篇:二叉排序樹C語言版的!.c
- 下一篇:MFC可編輯列表框控件
評論
共有 條評論