第三次作业

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

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

解答:由题可知:

  a1,a2,a3的概率分别为: P(a1)=0.2        P(a2)=0.3           P(a3)=0.5

  所以就有:F(a0)=0       F(a1)=0.2       F(a2)=0.5       F(a3)=1

根据公式   U(k) =L(k-1) +(U(k-1) -L(k-1) )*Fx(ak)

              U(k) =L(k-1) +(U(k-1) -L(k-1) )*Fx(ak-1)

另注:U(0)=1       L(0)=0

有:

第一个出现的是a1

   U(1) =L(0) +(U(0) -L(0) )*Fx(a1)=0.2

    L(1) =L(0) +(U(0) -L(0) )*Fx(a0)=0

第二个出现的是a1

    U(2) =L(1) +(U(1) -L(1) )*Fx(a1)=0.04

    L(2) =L(1) +(U(1) -L(1) )*Fx(a0)=0

第三个出现的是a3

    U(3) =L(2) +(U(2) -L(2) )*Fx(a3)=0.04

    L(3) =L(2) +(U(2) -L(2) )*Fx(a2)=0.02

第四个出现的是a2

    U(4) =L(3) +(U(3) -L(3) )*Fx(a2)=0.03

    L(4) =L(3) +(U(3) -L(3) )*Fx(a1)=0.024

第五个出现的是a3

   U(5) =L(4) +(U(4) -L(4) )*Fx(a3)=0.03

    L(5) =L(4) +(U(4) -L(4) )*Fx(a2)=0.027

第六个出现的是a1

   U(6) =L(5) +(U(5) -L(5) )*Fx(a1)=0.0276

    L(6) =L(5) +(U(5) -L(5) )*Fx(a0)=0.027

则,序列a1a1a3a2a3a1的实值标签如下

     TX(a1a1a3a2a3a1)=(U6+L6)/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和u分别表示下界和上界
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/zhangcui/p/4812535.html