• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签:

资源简介

信息论实验报告必备编码——基于上下文自适应算术编码

资源截图

代码片段和文件信息

#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“

评论

共有 条评论

相关资源