第三次作业

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	",m[i]);
    }

        return 0;        
}

 

原文地址:https://www.cnblogs.com/yuruogu/p/4825643.html