第三次作业

5、给定如表4-9所示的概率模型,求出序列a1a1a3a2a3a1 的实值标签。

            

 答:

 由题意可得:求序列a1a1a3a2a3a的实值标签就是求序列113231的实值标签。

 设上界 u(0) =1,  下界 l(0)=0,符号集A={a1,a2,a3},且P(a1)=0.2,P(a2)=0.3,P(a3)=0.5

由于P(x=i)=P(ai),所以P(x=1)=P(a1)=0.2,

                               P(x=2)= P(a2)=0.3,

                                P(x=3)=P(a3)=0.5.

  Fx(0)=0,  Fx(1)=P(a0)+ P(a1)=0.2,  Fx(2)=P(a1)+ P(a2)=0.5, Fx(3)=P(a1)+ P(a2)+P(a3)=1

又由于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

       u(1)=l(0)+(u(0)-l(0))*Fx(1)=0+(1-0)*0.2=0.2

       l(1)=l(0)+(u(0)-l(0))*Fx(0)=0+(1-0)*0=0

所以该标签的区间[0,0.2)

该序列的第二个元素为1

      u(2)=l(1)+(u(1)-l(1))*Fx(1)=0+(0.2-0)*0.2=0.04

       l(2)=l(1)+(u(1)-l(1))*Fx(0)=0+(0.2-0)*0=0

所以序列1 1标签的区间[0,0.04)

该序列的第三个元素为3

      u(3)=l(2)+(u(2)-l(2))*Fx(3)=0+(0.04-0)*1 =0.04

       l(3)=l(2)+(u(2)-l(2))*Fx(2)=0+(0.04-0)*0.5=0.02

所以该序列标签的区间[0.02,0.04)

该序列的第四个元素为2

      u(4)=l(3)+(u(3)-l(3))*Fx(2)=0.02+(0.04-0.02)*0.5 =0.03

       l(4)=l(3)+(u(3)-l(3))*Fx(1)=0.02+(0.04-0.02)*0.2=0.024

所以序列2 3标签的区间[0.024,0.03)

该序列的第五个元素为3

      u(5)=l(4)+(u(4)-l(4))*Fx(3)=0.024+(0.03-0.024)*1=0.03

       l(5)=l(4)+(u(4)-l(4))*Fx(2)=0.024+(0.03-0.024)*0.5=0.027

所以该序列标签的区间[0.027,0.03)

该序列的第六个元素为1

      u(6)=l(5)+(u(5)-l(5))*Fx(1)=0.027+(0.03-0.027)*0.2=0.0276

       l(6)=l(5)+(u(5)-l(5))*Fx(0)=0.027+(0.03-0.027)*0=0.027

所以该序列标签的区间[0.027,0.0276)

综上可得序列a1a1a3a2a3a1 的实值标签为:

                                                       Tx(113231)= ( u(6) + l(6)   )/2

                                                                       =(0.0276+0.027)/2

                                                                       =0.0546/2

                                                                       =0.0273

6.对于表4-9给出的概率模型,对于一个标签为0.63215699的长度为10的序列进行解码。

解:根据题意可以得到的程序如下:

#include<stdio.h>

int main()
{
int m[20];
double F0=0,F1=0.2,F2=0.5,F3=1.0;
double tag=0.63215699,t1;
double l[20],u[20]; 
l[0]=0;
u[0]=1.0;
for(int j=1;j<=10;j++)
{
t1=(tag-l[j-1])/(u[j-1]-l[j-1]);
if(t1>F0&&t1<F1)
{
l[j]=l[j-1]+(u[j-1]-l[j-1])*F0;
u[j]=l[j-1]+(u[j-1]-l[j-1])*F1;
m[j]=1;
}
else if(t1>F1&&t1<F2)
{
l[j]=l[j-1]+(u[j-1]-l[j-1])*F1;
u[j]=l[j-1]+(u[j-1]-l[j-1])*F2;
m[j]=2;
}
else
{
l[j]=l[j-1]+(u[j-1]-l[j-1])*F2;
u[j]=l[j-1]+(u[j-1]-l[j-1])*F3;
m[j]=3;
}
printf("%d ",m[j]);
}

return 0;


调试得到的结果是3221213223。

原文地址:https://www.cnblogs.com/linghushaohai/p/4845910.html