{
Ft=Fs; Pt=Ps;
Ft+=Pt*f[j];//对进行逆编码 Pt*=P[j]; }
void main() {
}
if(gFs>=Ft)//对其进行判断,并且将值存入到数组A中 { }
Fs=Ft; Ps=Pt; cout<
}
cout< cout<<\输入所要编码的符号的个数,并按回车跳转:\int a,i,h=0; cin>>a; cout<<\请输入符号及其相对应的概率值,并按回车跳转:\for(i=0;i char x; float y; cin>>x; A[i]=x;//将字符依次存入数组A中 cin>>y; P[i]=y;//将字符所对应的概率依次存入到数组P中 } for(i=1;i f[0]=0; f[i]=f[i-1]+P[i-1];//将要编码的数据映射到一个位于[0,1)的实数区间中 cout<<\请输入所要编码的符号序列,并以*结尾:\ while(1)//这个while语句的作用是将要编码的字符存入到数组S中 { char ss; cin>>ss; if(ss=='*')break;//在以“*”为结尾的时候结束存储 S[h++]=ss; } } cout<<\输入的字符经过算术编码之后为:\cout<<\由上述所对应的解码为:\jiema(a,h); bianma(a,h); 七、实验结果: 八、结果分析 首先根据显示输入所有的字符的个数,以及字符和其概率,经过对“CADACDB”编码之后,我们可以在屏幕上看到最终的编码结果为0.514388,与上式的分析结果相同,进过转换之后产生的二进制代码为10000011101011110。同样也显示了译码结果和输入的相同,即同为“CADACDB”。证明实验编码是可行的。 九、心得体会 这是第二次的信息论实验,借助上周编写的哈夫曼编码的知识和经验,以及在网络上的相关查阅,我也成功的做好了算术编码及其译码的实验,通过这个实验,让我对算术编码有了更进一步的了解,以及对C++的运用,因为我们之前都是使用C语言进行编写程序,对于知识有了新的吸收。受益匪浅啊。