5、给定如表4-9所示的概率模型,求出序列a1a1a3a2a3a1的实质标签。
表4-9 习题5、习题6的概率模型
字母 | 概率 |
a1 | 0.2 |
a2 | 0.3 |
a3 | 0.5 |
解:由概率模型可知: Fx(1)=0.2 , Fx(2)= 0.5 , Fx(3)=1
则X(ai)=i, X(a1)=1,X(a2)=2,X(a3)=3
FX(0)=0,FX(1)=0.2 ,FX(2)=0.5 ,FX(3)=1.0, U(0)=1 ,L(0)=0
由公式得, L(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn-1)
U(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn)
第一次出现a1时:
L(1)=L(0)+(U(0)-L(0))Fx(0)=0
U(1)=L(0)+(U(0)-L(0))Fx(1)=0.2
第二次出现a1时:
L(2)=L(1)+(U(1)-L(1))Fx(0)=0
U(2)=L(1)+(U(1)-L(1))Fx(1)=0.04
第三次出现a3时:
L(3)=L(2)+(U(2)-L(2))Fx(2)=0.02
U(3)=L(2)+(U(2)-L(2))Fx(3)=0.04
第四次出现a2时:
L(4)=L(3)+(U(3)-L(3))Fx(1)=0.024
U(4)=L(3)+(U(3)-L(3))Fx(2)=0.03
第五次出现a3时:
L(5)=L(4)+(U(4)-L(4))Fx(2)=0.027
U(5)=L(4)+(U(4)-L(4))Fx(3)=0.03
最后一次出现a1时:
L(6)=L(5)+(U(5)-L(5))Fx(0)=0.027
U(6)=L(5)+(U(5)-L(5))Fx(1)=0.0276
所以,序列a1a1a3a2a3a1的实值标签为:T(113231)=(L(6)+ U(6))/2=0.0273
6、对于表4-9给出的概率模型,对于一个标签为0.63215699的长度为10的序列进行编码。
表4-9
字母 | 概率 |
a1 | 0.2 |
a2 | 0.3 |
a3 | 0.5 |
源程序如下:
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 double u[11],l[11],F[4];; 8 u[0]=1;l[0]=0; 9 F[0]=0;F[1]=0.2;F[2]=0.5;F[3]=1; 10 double x=0.63215699; 11 for(int i=1;i<11;i++) 12 { 13 for(int j=1;j<4;j++) 14 { 15 l[i]=l[i-1]+(u[i-1]-l[i-1])*F[j-1]; 16 u[i]=l[i-1]+(u[i-1]-l[i-1])*F[j]; 17 if(x>=l[i]&&x<u[i]) 18 { 19 printf("%d ",j); 20 break; 21 } 22 23 } 24 } 25 26 return 0; 27 }
程序运行结果如下:
所以得该序列为a3a2a2a1a2a1a3a2a2a3。