5、给定如表4-9所示的概率模型,求出序列a1a1a3a2a3a1的实质标签。
表4-9 习题5、习题6的概率模型
字母 | 概率 |
a1 | 0.2 |
a2 | 0.3 |
a3 | 0.5 |
解:根据题意:从概率模型可知:
映射a1<=>1,a2<=>2,a3<=>3
所以cdf:Fx(1)=0.2,
Fx(2)=0.5,
Fx(3)=1.0
Fx(K)=0,K<=0,Fx(K)=1,K>3
我们可以利用公式确定标签所在区间的上下限,将u(0)初始化为1,将L(1)初始化为0,
第一次 出现a1,时
上界:U(0)=1, 下界:L(0)=0
L(1)=L(1-1)+(u(1-1)-L(1-1))Fx(1-1)=0+(1-0)0=0
u(1)=L(1-1)+(u(1-1)-L(1-1))Fx(1)=0+(1-0)0.2=0.2
第二次出现a1,时
L(2)=L(2-1)+(u(2-1)-L(2-1))Fx(1-1)=0
u(2)=L(2-1)+(u(2-1)-L(2-1))Fx(1)=0+(0.2-0)0.2=0.04
第三次 出现a3,时
L(3)=L(3-1)+(u(3-1)-L(3-1))Fx(3-1)=0+(0.04-0)0.5=0.02
u(3)=L(3-1)+(u(3-1)-L(3-1))Fx(3)=0+(0.04-0)1.0=0.04
第四次 出现a2,时
L(4)=L(4-1)+(u(4-1)-L(4-1))Fx(2-1)=0.02+(0.04-0.02)0.2=0.024
u(4)=L(4-1)+(u(4-1)-L(4-1))Fx(2)=0.02+(0.04-0.02)0.5=0.03
第五次 出现a3,时
L(5)=L(5-1)+(u(5-1)-L(5-1))Fx(3-1)=0.024+(0.03-0.024)0.5=0.027
u(5)=L(5-1)+(u(5-1)-L(5-1))Fx(3)=0.024+(0.03-0.024)1.0=0.03
第六次 出现a1,时
L(6)=L(6-1)+(u(6-1)-L(6-1))Fx(1-1)=0.027+(0.03-0.027)0=0.027
u(6)=L(6-1)+(u(6-1)-L(6-1))Fx(1)=0.027+(0.03-0.027)0.2=0.0276
所以,生成a1a1a3a2a3a1的实质标签为:
Tx(113231)= ( u(6) + l(6) )/2
=(0.0276+0.027)/2
=0.0273
6、对于表4-9给出的概率模型,对于一个标签为0.63215699的长度为10的序列进行编码。
表4-9
字母 | 概率 |
a1 | 0.2 |
a2 | 0.3 |
a3 | 0.5 |
解:根据题意,对a1,a2,a2进行划分,首先
从概率模型可知:,
映射a1<=>1,a2<=>2,a3<=>3
所以cdf:Fx(1)=0.2,
Fx(2)=0.5,
Fx(3)=1.0
Fx(K)=0,K<=0,Fx(K)=1,K>3
所以从概率模型可以看出
a1的区间段是[0,0.2)
#include<stdio.h> int main() { int m[10]; double A0=0,A1=0.2,A2=0.5,A3=1.0; double l[10]={0.0},u[10]={1.0};//l和u分别表示下界和上界 double tag=0.6321599,t; int n=10; for(int i=1;i<=10;i++) { t=(tag-l[i-1])/(u[i-1]-l[i-1]); if(t>A0&&t<A1) { l[i]=l[i-1]+(u[i-1]-l[i-1])*A0; u[i]=l[i-1]+(u[i-1]-l[i-1])*A1; m[i]=1; } else if(t>A1&&t<A2) { l[i]=l[i-1]+(u[i-1]-l[i-1])*A1; u[i]=l[i-1]+(u[i-1]-l[i-1])*A2; m[i]=2; } else { l[i]=l[i-1]+(u[i-1]-l[i-1])*A2; u[i]=l[i-1]+(u[i-1]-l[i-1])*A3; m[i]=3; } printf("%d\t",m[i]); } return 0; }