5、给定如表4-9所示的概率模型,求出序列a1a1a3a2a3a1 的实值标签。
答:
定义随机变量X(ai)=i,假定我们对113231进行编码。
已知:Fx(k)=0,k≤0,Fx(1)=0.2,Fx(2)=0.5,Fx(3)=1,Fx(k)=1,k>3
且u(0)=1,l(0)=0。公式:u(k)=l(k-1)+(u(k-1)-l(k-1))FX(xk), l(k)=l(k-1)+(u(k-1)-l(k-1))FX(xk-1)。
运用公式得:
该序列的第一个元素为1,得到以下更新:
l(1)=0+(1-0)*0=0
u(1)=0+(1-0)*0.2=0.2
所以该标签 包含在区间[0,0.2)中。
该序列的第二个元素为1,得到以下更新:
l(2)=0+(0.2-0)*0=0
u(2)=0+(0.2-0)*0.2=0.04
所以该标签 包含在区间[0,0.04)中。
该序列的第三个元素为3,得到以下更新:
l(3)=0+(0.04-0)*0.5=0.02
u(3)=0+(0.04-0)*1=0.04
所以该标签 包含在区间[0.02,0.04)中。
该序列的第四个元素为2,得到以下更新:
l(4)=0.02+(0.04-0.02)*0.2=0.024
u(4)=0.02+(0.04-0.02)*0.5=0.03
所以该标签 包含在区间[0.024,0.03)中。
该序列的第五个元素为3,得到以下更新:
l(5)=0.024+(0.03-0.024)*0.5=0.027
u(5)=0.024+(0.03-0.024)*1=0.03
所以该标签 包含在区间[0.027,0.03)中。
该序列的第六个元素为1,得到以下更新:
l(6)=0.027+(0.03-0.027)*0=0.027
u(6)=0.027+(0.03-0.027)*0.2=0.0276
所以该标签 包含在区间[0.027,0.0276)中。
可以生成序列113231的标签如下:
Tx(113231)=(0.027+0.0276)/2=0.0273
即Tx(a1a1a3a2a3a1)=(0.027+0.0276)/2=0.0273
6、对于表4-9所示的概率模型,对于一个标签为0.63215699的长度为10的序列进行解码。
答:已知tag=0.63215699,Fx(k)=0, k≤0, Fx(1)=0.2, Fx(2)=0.5, Fx(3)=1, k>3.
设u(0)=1,l(0)=0。
则l(k) =l(k-1) +(u(k-1) -l(k-1) )Fx(xk-1), u(k) =l(k-1) +(u(k-1) -l(k-1) )Fx(xk)
t*=(tag-l(k-1))/(u(k-1) -l(k-1))。
得:
t*=(0.63215699-0)/(1-0)=0.63215699
Fx(2)≤t*≤Fx(3)
l(1) =l(0) +(u(0) -l(0) )Fx(2)=0+(1-0)*0.5=0.5
u(1) =l(0) +(u(0) -l(0) )Fx(3)=0+(1-0)*1=1
所以,第一个序列为:a3
t*=(0.63215699-0.5)/(1-0.5)=0.264314
Fx(1)≤t*≤Fx(2)
l(2) =l(1) +(u(1) -l(1) )Fx(1)=0.5+(1-0.5)*0.2=0.6
u(2) =l(1) +(u(1) -l(1) )Fx(2)=0.5+(1-0.5)*0.5=0.75
所以,第二个序列为:a2
t*=(0.63215699-0.6)/(0.75-0.6)=0.2143799
Fx(1)≤t*≤Fx(2)
l(3) =l(2) +(u(2) -l(2) )Fx(1)=0.6+(0.75-0.6)*0.2=0.63
u(3) =l(2) +(u(2) -l(2) )Fx(2)=0.6+(0.75-0.6)*0.5=0.675
所以,第三个序列为:a2
t*=(0.63215699-0.63)/(0.675-0.63)=0.04793311
Fx(0)≤t*≤Fx(1)
l(4) =0.63+(0.675-0.63)*0=0.63
u(4) =0.63+(0.675-0.63)*0.2=0.639
所以,第四个序列为:a1
t*=(0.63215699-0.63)/(0.639-0.63)=0.2396656
Fx(1)≤t*≤Fx(2)
l(5) =0.63+(0.639-0.63)*0.2=0.6318
u(5) =0.63+(0.639-0.63)*0.5=0.6345
所以,第五个序列为:a2
t*=(0.63215699-0.6318)/(0.6345-0.6318)=0.1322185
Fx(0)≤t*≤Fx(1)
l(6) =0.6318+(0.6345-0.6318)*0=0.6318
u(6) =0.6318+(0.6345-0.6318)*0.2=0.63234
所以,第六个序列为:a1
t*=(0.63215699-0.6318)/(0.63234-0.6318)=0.6610926
Fx(2)≤t*≤Fx(3)
l(7) =0.6318+(0.63234-0.6318)*0.5=0.63207
u(7) =0.6318+(0.63234-0.6318)*1=0.63234
所以,第七个序列为:a3
t*=(0.63215699-0.63207)/(0.63234-0.63207)=0.3221852
Fx(1)≤t*≤Fx(2)
l(8) =0.63207+(0.63234-0.63207)*0.2=0.632124
u(8) =0.63207+(0.63234-0.63207)*0.5=0.632205
所以,第八个序列为:a2
t*=(0.63215699-0.632124)/(0.632205-0.632124)=0.40728395
Fx(1)≤t*≤Fx(2)
l(9) =0.632124+(0.632205-0.632124)*0.2=0.6321402
u(9) =0.632124+(0.632205-0.632124)*0.5=0.6321645
所以,第九个序列为:a2
t*=(0.63215699-0.6321402)/(0.6321645-0.6321402)=0.6909
Fx(2)≤t*≤Fx(3)
所以,第十个序列为:a3
因此该序列为a3a2a2a1a2a1a3a2a2a3
编码:
#include<stdio.h> #define n 10 void main() { double F[4]={0,0.2,0.5,1.0}; double l0=0.0,u0=1.0; double tag=0.63215699,t; double f1,f2; printf("编码: "); for(int i=0;i<n;i++) { t=(double)(tag-l0)/(u0-l0); if(t>=F[0]&&t<=F[1]) { f1=F[0]; f2=F[1]; printf("a1"); } else if(t>=F[1]&&t<=F[2]) { f1=F[1]; f2=F[2]; printf("a2"); } else { f1=F[2]; f2=F[3]; printf("a3"); } f1=l0+(u0-l0)*f1; f2=l0+(u0-l0)*f2; l0=f1; u0=f2; } printf(" "); }