zoukankan      html  css  js  c++  java
  • 第三次作业

    参考书《数据压缩导论(第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;
    }
    

      

    调试结果:

     

  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/susu-boke/p/4815917.html
Copyright © 2011-2022 走看看