第三次作业

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("编码:\n");
    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("\n");
}

posted @ 2015-09-16 10:41  粟匀  阅读(135)  评论(0编辑  收藏  举报