5.给定如表4-9所示的概率模型,求出序列a1a1a3a2a3a1的实值标签。
表4-9 习题5,习题6的概率模型
字母 概率
a1 0.2
a2 0.3
a3 0.5
解:由题可知,映射a1<=>1,a2<=>2,a3<=>3
Fx(k)=0, k≤0, Fx(1)=0.2, Fx(2)=0.5, Fx(3)=1, k>3
下界: l(0)=0,上界:u(0)=1
该序列的第1个元素为a1:
l(1)= 0+(1- 0)Fx(0)=0
u(1)=0+(1-0) Fx(1)=0.2
序列的第2个元素为a1
l(2)= 0+(0.2- 0)Fx(0)=0
u(2)=0+(0.2-0) Fx(1)=0.04
序列的第3个元素为a3
l(3)= 0+(0.04- 0)Fx(2)=0.02
u(3)=0+(0.04-0) Fx(3)=0.04
序列的第4个元素为a2
l(4)= 0.02+(0.04- 0.02)Fx(1)=0.024
u(4)=0.02+(0.04-0.02) Fx(2)=0.03
序列的第5个元素为a3
l(5)= 0.024+(0.03- 0.024)Fx(2)=0.027
u(5)=0.024+(0.03-0.024) Fx(3)=0.03
序列的第6个元素为a1
l(6)= 0.027+(0.03- 0.027)Fx(0)=0.027
u(6)=0.027+(0.03-0.027) Fx(1)=0.0276
该序列a1a1a3a2a3a1的标签所在的区间为[0.027,0.0276)
可以生成序列a1a1a3a2a3a1的标签如下:
Tx(a1a1a3a2a3a1)= l(6)+u(6)/2
=(0.027+0.0276)/2
=0.0273
6、对于表4-9所示的概率模型,对于一个标签为0.63215699的长度为10的序列进行解码。
include
int main()
{
double tag=0.63215699;
double l[100],u[100];
double t;
l[0]=0;
u[0]=1;
double A0=0.0,A1=0.2,A2=0.5,A3=1.0;
int M[100];
for(int k=1;k<=10;k++)
{
t=(double)(tag-l[k-1])/(u[k-1]-l[k-1]);
if(t>=A0&&t<=A1)
{
u[k]=l[k-1]+(u[k-1]-l[k-1])A1;
l[k]=l[k-1]+(u[k-1]-l[k-1])A0;
M[k]=1;
}
else if(t>A1&&t<=A2)
{
u[k]=l[k-1]+(u[k-1]-l[k-1])A2;
l[k]=l[k-1]+(u[k-1]-l[k-1])A1;
M[k]=2;
}
else if(t>A2&&t<=A3)
{
u[k]=l[k-1]+(u[k-1]-l[k-1])A3;
l[k]=l[k-1]+(u[k-1]-l[k-1])A2;
M[k]=3;
}
printf("%d",M[k]);
}
return 0;
}