第三次作业

 参考书《数据压缩导论(第4版)》  Page 100   5, 6

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

 从概率模型可知:

Fx(k)=0, k≤0, Fx(1)=0.2, Fx(2)=0.5, Fx(3)=1, k>3.

我们可以利用公式确定标签所在的上下限。将u(0)初始化为1,将l(0)初始化为0。

该序列的第1个元素为a1,利用更新公式,可得:

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

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

因此,序列a1a1的标签所在的区间为[0,0.2),该序列的第2个元素为a1,利用更新公式,可得:

l(2) =0+(0.2-0)Fx(0)=0

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

因此,序列a1a1的标签所在的区间为[0,0.04)。该序列的第3个元素为a3,利用更新公式,可得:

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

u(3) =0+(0.04-0)Fx(3)=0.04

因此,序列a1a1a3的标签所在的区间为[0.02,0.04)。该序列的第4个元素为a2,利用更新公式,可得:

l(4) =0.02+(0.04-0.02)Fx(1)=0.024

u(4) =0.02+(0.04-0.02)Fx(2)=0.03

因此,序列a1a1a3a2的标签所在的区间为[0.024,0.03)。该序列的第5个元素为a3,利用更新公式,可得:

l(5) =0.024+(0.03-0.024)Fx(2)=0.027

u(5) =0.024+(0.03-0.024)Fx(3)=0.03

因此,序列a1a1a3a2a3的标签所在的区间为[0.027,0.03)。该序列的第6个元素为a1,利用更新公式,可得:

l(6) =0.027+(0.03-0.027)Fx(0)=0.027

u(6) =0.027+(0.03-0.027)Fx(1)=0.0276

可以生成序列a1a1a3a2a3a1的标签如下:

Tx(a1a1a3a2a3a1)=(0.027+0.0276)/2=0.0273

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

 

#include<iostream>
using namespace std;
int main()
{
    double u[11],l[11],F[4];;
    u[0]=1;l[0]=0;
    F[0]=0;F[1]=0.2;F[2]=0.5;F[3]=1;
    double x=0.63215699;
    for(int i=1;i<11;i++)
    {
        for(int j=1;j<4;j++)
        {
            l[i]=l[i-1]+(u[i-1]-l[i-1])*F[j-1];
            u[i]=l[i-1]+(u[i-1]-l[i-1])*F[j];
            if(x>=l[i]&&x<u[i])
            {
                cout<<j;
                break;
            }
                
        }        
    }
    
    return 0;
} 

运行结果如下图所示:

综上所述:该序列为a3a2a2a1a2a1a3a2a2a3

posted @ 2015-09-16 10:41  余勇  阅读(167)  评论(0编辑  收藏  举报