您的位置:首页 > 其它

第三次作业 黄学才

2015-09-30 11:23 176 查看
一、参考书《数据压缩导论(第4版)》 Page 100

5, 6

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



解:由上图可知,

p(a1)=0.2 ,p(a2)=0.3 ,p(a3)=0.5

FX(0)=0,FX(1)=0.2 ,FX(2)=0.5 ,FX(3)=1.0, U(0)=1 ,L(0)=0

因为X(ai)=i, 所以 X(a1)=1,X(a2)=2,X(a3)=3

由公式,L(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn-1)

u(n)=L(n-1)+(U(n-1)-L(n-1))Fx(xn)

第一次a1出现:

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

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

第二次出现a1出现:

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

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

第三次出现a3出现:

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

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

第四次a2出现:

L(4)=L(3)+(U(3)-L(3))Fx(1)=0.024

U(4)=L(3)+(U(3)-L(3))Fx(2)=0.03

第五次a3出现:

L(5)=L(4)+(U(4)-L(4))Fx(2)=0.027

U(5)=L(4)+(U(4)-L(4))Fx(3)=0.03

第六次a1出现:

L(6)=L(5)+(U(5)-L(5))Fx(0)=0.027

U(6)=L(5)+(U(5)-L(5))Fx(1)=0.0276

所以,序列a1a1a3a2a3a1的实值标签为:

T(113231)=(L(6)+ U(6))/2=0.0273;

#include<stdio.h>
#define N 100
int main()
{
double T,tag;
double F[4]={0.0,0.2,0.5,1.0};
double l
={0.0},u
={1.0};
int n,j,M
;
printf("输入标签的值:\n");
scanf("%lf",&tag);
printf("输入序列的长度:\n");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
T=(tag-l[i-1])/(u[i-1]-l[i-1]);
if(T>=F[0]&&T<=F[1])
{
M[i]=1;
j=1;
}
else if(T>F[1]&&T<=F[2])
{
M[i]=2;
j=2;
}
else if(T>F[2]&&T<=F[3])
{
M[i]=3;
j=3;
}
u[i]=l[i-1]+(u[i-1]-l[i-1])*F[j];
l[i]=l[i-1]+(u[i-1]-l[i-1])*F[j-1];
}
for(i=1;i<=n;i++)
{
printf("%d",M[i]);
}
printf("\n");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: