• 第三次作业


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

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

    表4-9 习题5、6的概率模型


    字母                                             概率


    a1                                               0.2

    a2                                               0.3

    a3                                               0.5


    解:定义随机变量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,该序列的第一个元素为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

    #include"stdio.h"
    
    
    int main()
    {
    	double F[4]={0,0.2,0.5,1};
    	int a[6]={1,1,3,2,3,1};
    	double l0=0,u0=1;
    	double l_a,u_a;
    	int n=6;
    	for(int i=0; i<n; i++)
    	{
    		switch(a[i])
    		{
    		case 1:l_a=l0+(u0-l0)*F[0];
    			   u_a=l0+(u0-l0)*F[1];break;
            case 2:l_a=l0+(u0-l0)*F[1];
    		   	   u_a=l0+(u0-l0)*F[2];break;
    		case 3:l_a=l0+(u0-l0)*F[2];
    			   u_a=l0+(u0-l0)*F[3];break;
    		default:printf("代码有误!!!
    ");break;
    		}
    		printf("第%d个元素所在区间[%lf,%lf)
    ",i+1,l_a,u_a);
    		l0=l_a;
    		u0=u_a;
    	}
    	printf("该序列的实值标签:%lf		",(l0+u0)/2);
    	return 0;
    }
    

    调试结果:

     

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

    设u(0)=1,l(0)=0

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

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

    若x1=1,则该区间为[0,0.2)

    若x1=2,则该区间为[0.2,0.5)

    若x1=3,则该区间为[0.5,1)

    由于0.63215699在[0.5,1)中,所以x1=3

    l(2)=0.5+(1-0.5)Fx(x2-1)=0.5+0.5Fx(x2-1)

    u(2)=0.5+(1-0.5)Fx(x2)=0.5+0.5Fx(x2) 

    若x2=1,则该区间为[0.5,0.6)

    若x2=2,则该区间为[0.6,0.75)

    若x2=3,则该区间为[0.75,1)

    由于0.63215699在[0.6,0.75)中,所以x2=2 

    l(3)=0.5+(0.75-0.6)Fx(x3-1)=0.6+0.15Fx(x3-1)

    u(3)=0.5+(0.75-0.6)Fx(x3)=0.6+0.15Fx(x3) 

    若x3=1,则该区间为[0.6,0.63)

    若x3=2,则该区间为[0.63,0.675)

    若x3=3,则该区间为[0.675,0.75)

    由于0.63215699在[0.63,0.675)中,所以x3=2

    l(4)=0.63+(0.675-0.625)Fx(x4-1)=0.63+0.045Fx(x4-1)

    u(4)=0.63+(0.675-0.625)Fx(x4)=0.63+0.045Fx(x4)

    若x4=1,则该区间为[0.63,0.639)

    若x4=2,则该区间为[0.639,0.6525)

    若x4=3,则该区间为[0.6525,0.675)

    由于0.63215699在[0.63,0.639)中,所以x4=1

    l(5)=0.63+(0.639-0.63)Fx(x5-1)=0.63+0.009Fx(x5-1)

    u(5)=0.63+(0.639-0.63)Fx(x5)=0.63+0.009Fx(x5)

    若x5=1,则该区间为[0.63,0.6318)

    若x5=2,则该区间为[0.6318,0.6345)

    若x5=3,则该区间为[0.6345,0.639)

    由于0.63215699在[0.6318,0.6345)中,所以x5=2

    l(6)=0.6318+(0.6345-0.6318)Fx(x6-1)=0.6318+0.0027Fx(x6-1)

    u(6)=0.6318+(0.6345-0.6318)Fx(x6)=0.6318+0.0027Fx(x6)

    若x6=1,则该区间为[0.6318,0.63234)

    若x6=2,则该区间为[0.63234,0.63315)

    若x6=3,则该区间为[0.63315,0.63345)

    由于0.63215699在[0.6318,0.63234)中,所以x6=1

    l(7)=0.6318+(0.63234-0.6318)Fx(x7-1)=0.6318+0.00054Fx(x7-1)

    u(7)=0.6318+(0.63234-0.6318)Fx(x7)=0.6318+0.00054Fx(x7)

    若x7=1,则该区间为[0.6318,0.631908)

    若x7=2,则该区间为[0.631908,0.63207)

    若x7=3,则该区间为[0.63207,0.63234)

    由于0.63215699在[0.63207,0.63234)中,所以x7=3

    l(8)=0.63207+(0.63234-0.63207)Fx(x8-1)=0.63207+0.00027Fx(x8-1)

    u(8)=0.63207+(0.63234-0.63207)Fx(x8)=0.63207+0.00027Fx(x8)

    若x8=1,则该区间为[0.63207,0.632124)

    若x8=2,则该区间为[0.632124,0.632205)

    若x8=3,则该区间为[0.632205,0.63234)

    由于0.63215699在[0.632124,0.632205)中,所以x8=2

    l(9)=0.632124+(0.632205-0.632124)Fx(x9-1)=0.632124+0.000081Fx(x9-1)

    u(9)=0.632124+(0.632205-0.632124)Fx(x9)=0.632124+0.000081Fx(x9)

    若x9=1,则该区间为[0.632124,0.6321402)

    若x9=2,则该区间为[0.6321402,0.6321645)

    若x9=3,则该区间为[0.6321645,0.632205)

    由于0.63215699在[0.6321402,0.6321645)中,所以x9=2

    l(10)=0.6321402+(0.6321645-0.6321402)Fx(x10-1)=0.6321402+0.00006243Fx(x10-1)

    u(10)=0.6321402+(0.6321645-0.6321402)Fx(x10)=0.6321402+0.00006243Fx(x10)

    若x10=1,则该区间为[0.6321402,0.63214506)

    若x10=2,则该区间为[0.63214506,0.63215235)

    若x10=3,则该区间为[0.63215235.0.6321645)

    由于0.63215699在[0.63215235,0.6321645)中,所以x10=3

    所以该序列为3221213223即a3a2a2a1a2a1a3a2a2a3

    代码:

    #include"stdio.h"
    #define n 10
    
    int main()
    {
    	double F[4]={0,0.2,0.5,1};
    	double l0=0,u0=1;
    	double t=0.63215699;
    	double l_a,u_a;
    	for(int i=1;i<=n;i++)
    	{
    		if(t>=l0+(u0-l0)*F[0]&&t<l0+(u0-l0)*F[1])
    		{
    			l_a=l0+(u0-l0)*F[0];
    			u_a=l0+(u0-l0)*F[1];
    			printf("a1");
    			x=1;
    		}
    		else if(t>=l0+(u0-l0)*F[1]&&t<l0+(u0-l0)*F[2])
    		{
    			l_a=l0+(u0-l0)*F[1];
    			u_a=l0+(u0-l0)*F[2];
    			printf("a2");
    			x=2;
    		}
    		else if(t>=l0+(u0-l0)*F[2]&&t<l0+(u0-l0)*F[3])
    		{
    			l_a=l0+(u0-l0)*F[2];
    			u_a=l0+(u0-l0)*F[3];
    			printf("a3");
    			x=3;
    		}
    		l0=l_a;
    		u0=u_a;
    	}
    	return 0;
    }
    

      

    调试结果:

     

  • 相关阅读:
    HDU1171(01背包均分问题)
    HDU2159(完全背包)
    HDU1203(01背包变形)
    DAG上的DP
    ADB命令小结
    HDU3065(AC自动机入门题)
    HDU2896(AC自动机入门题)
    性能测试监控分析(13)-sysstat安装升级
    tomcat(9)-linux apache tomcat集群环境搭建
    nginx(4)-负载均衡的5种策略及原理
  • 原文地址:https://www.cnblogs.com/susu-boke/p/4815917.html
Copyright © 2020-2023  润新知