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

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

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

                

        解:

            又题意得:求序列a1a1a3a2a3a1 的实值标签相当于求序列113231的标签

            则:设定随机变量X(ai)=i,那么P(ai)=P(X=i)

                  P(a1)=P(X=1)=0.2,P(a2)=P(X=2)=0.3,P(a3)=P(X=3)=0.5

            由此可得:FX(1)=P(X=1)=0.2, FX(2)=P(X=1)+P(X=2)=0.2+0.3=0.5, FX(3)=P(X=1)+P(X=2)+P(X=3)=0.2+0.3+0.5=1

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

            可根据公式:

                                l(k)=l(k-1)+(u(k-1)-l(k-1))*Fx(Xk-1)

                                u(k)=l(k-1)+(u(k-1)-l(k-1))*Fx(Xk)

                   可得:

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

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

                                           

                          11            l(2)=l(1)+(u(1)-l(1))*Fx(0)=0+(0.2-0)*0=0

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

                                         

                          113           l(3)=l(2)+(u(2)-l(2))*Fx(2)=0+(0.04-0)*0.5=0.02

                                          u(3)=l(2)+(u(2)-l(2))*Fx(3)=0+(0.04-0)*1 =0.04

                                             

                          1132          l(4)=l(3)+(u(3)-l(3))*Fx(1)=0.02+(0.04-0.02)*0.2=0.024

                                           u(4)=l(3)+(u(3)-l(3))*Fx(2)=0.02+(0.04-0.02)*0.5 =0.03

                                             

                          11323         l(5)=l(4)+(u(4)-l(4))*Fx(2)=0.024+(0.03-0.024)*0.5=0.027

                                            u(5)=l(4)+(u(4)-l(4))*Fx(3)=0.024+(0.03-0.024)*1=0.03

                                             

                          113231        l(6)=l(5)+(u(5)-l(5))*Fx(0)=0.027+(0.03-0.027)*0=0.027

                                             u(6)=l(5)+(u(5)-l(5))*Fx(1)=0.027+(0.03-0.027)*0.2=0.0276

                          因此,该序列的实值标签为:

                                                                Tx(113231)= ( u(6) + l(6)   )/2

                                                                                =(0.0276+0.027)/2

                                                                                =0.0273

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

     解:此题可编程实现,代码如下

    #include<stdio.h>

    int main()
    {
      int a[10];
      double t,F[100];
      F[0]=0,F[1]=0.2,F[2]=0.5,F[3]=1;
      double l[100]={0.0},u[100]={1.0};
      double tag=0.63215699;
      int n=10,k;
      for(k=1;k<=10;k++)
      {
        t=(tag-l[k-1])/(u[k-1]-l[k-1]);
        if(t>F[0]&&t<F[1])
        {
          l[k]=l[k-1]+(u[k-1]-l[k-1])*F[0];
          u[k]=l[k-1]+(u[k-1]-l[k-1])*F[1];
          a[k]=1;
        }
        else
          if(t>F[1]&&t<F[2])
          {
            l[k]=l[k-1]+(u[k-1]-l[k-1])*F[1];
            u[k]=l[k-1]+(u[k-1]-l[k-1])*F[2];
            a[k]=2;
          }
          else
            {
              l[k]=l[k-1]+(u[k-1]-l[k-1])*F[2];
              u[k]=l[k-1]+(u[k-1]-l[k-1])*F[3];
              a[k]=3;
            }
        printf("%d ",a[k]);

      }
      return 0;
    }

    调试结果如下:

         

    此题还可以通过计算得到:

          刚开始时l(0)=0,u(0)=1

          则

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

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

    通过计算,当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=2时,该区间为[0.6,0.75),而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=2时,该区间为[0.63,0.675),而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),而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=2时,该区间为[0.6318,0.6345),而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),而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=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=2时,该区间为[0.632124,0.632205),而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=2时,该区间为[0.6321402,0.6321645),而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=3时,该区间为[0.63215235.0.6321645),而0.63215699在区间[0.63215235.0.6321645)中,所以x10=3

                  所以该序列解码得:

                                            3221213223

        

  • 相关阅读:
    Easy Code 自定义的模板
    LINUX批量修改文件名
    解决FTP登录太慢
    linux 命令
    Linux rename命令
    MySQL字段重复出现多少次
    kafka安装
    Redis 5.0简单安装
    Tomcat常用配置
    jenkins安装和简单配置
  • 原文地址:https://www.cnblogs.com/fenghaojiao/p/4812522.html
Copyright © 2011-2022 走看看