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

    
    

    1-1:数据压缩的一个基本问题是“我们要压缩什么”,对此你是怎样理解的?

    以最少的数码来表示信源所发出的的信号,减少容纳给定信息集合或数据采样集合的信号空间。

    即压缩对象是指1.物理空间,2.时间区间,3.电磁频段

    1-2:数据压缩的另一个基本问题是“为什么进行压缩”,对此你又是如何理解的?

    压缩成可以缩小的文件内存,这样可以方便传递。提高其传输、存储和处理效率。

    1-6:数据压缩技术是如何进行分类的?

    数据压缩,就是用最少的数码来表示信号,分为可逆压缩和不可逆压缩。

    1:可逆压缩也叫无失真、无差错编码、无噪声编码--冗余度压缩编码。

    2:不可逆压缩就是有失真编码,信息论中称为熵压缩

    对它们的认识是:数据有冗余度就可以压缩;压缩只可能在一定限度内可逆;超过一定的限度,压缩就会失真;允许的失真越大、压缩的限度就可以越大。

    参考书  1-4

    1

    一个497KB的pdb格式压缩后为72KB

    一个5500KB的文件压缩后为4847KB

    文件类型不同,压缩前的文件大小与压缩后的文件大小只比也就不同,有的文件压缩后变化不是甚至不会变化,有的文件压缩后文件会变小很多。

    2冗余度它表征源信息率的多于程度,是描述信源客观统计特性的一个物理量。也可以说是从多余的一个量,它不影响数据的完整,也正是因为这一个多余量的存在,才能对其信源进行压缩,压缩后不会影响传递信息。信源=信息+冗余度。在这里不能对摘自不同来源的文字的冗余度做定量论述,因为对于不同的信息来说,重复度是不一样的。

    三、参考书《数据压缩导论(第4版)》P30

    3、给定符号集A={a1,a2,a3,a4},求以下条件下的一阶熵:

    (a)P(a1)=P(a2)=P(a3)=P(a4)=1/4

    解:由于P(a1)=P(a2)=P(a3)=P(a4)=1/4,所以

    H=-1/4*4*log21/4

          =- log21/4

          = log24=2(bits)

     

    (b)P(a1)=1/2 , P(a2)=1/4 , P(a3)=P(a4)=1/8 

    H= -(1/2*log21/2+1/4*log21/4+1/8*log21/8+1/8*log21/8)

          =1/2+1/2+3/8+3/8=7/4

     

    (c)P(a1)=0.505 ,  P(a2)=1/4 , P(a3)=1/8 , P(a4)=0.12 

    H=-(0.505*log20.505+1/4*log21/4+1/8*log21/8+0.12*log20.12)

    =-0.505*log20.505-1/4*log21/4-1/8*log21/8-0.12*log20.12

    =-0.505*log20.505+1/2+3/8-0.12*log20.12

    4、考虑以下序列:

    ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG

    CTGAACCCGCTTAAGCTTAAGCTGAACCTTCTGAACCTGCTT

    (a)根据此序列估计个概率值,并计算这一序列的一阶、二阶、

    三阶和四阶熵。

     解:(a)总的有84个字母,A出现的次数为21次,C出现的次数为24,G出现的次数为16次,T出现的次数为23次,那么

    P(A)=21/84=1/4,P(C)=24/84=2/7,P(G)=16/84=4/21,

    P(T)=23/84

    一阶熵H为:H=-(21/84)*log2(21/84)-(23/84)*log2(23/84)-(24/84)*log2(24/84)-(16/84)*log2(16/84)=1.983(bit)

    (b)根据这些熵,能否推断这个序列具有什么样的结构?

    由越多字母组成的序列它的熵值会比较大,相应的它的信息量就低;反之由越少字母组成的序列它的熵值会比较小,相应的它的信息量也高。

    7、做一个实验,看看一个模型能够多么准确地描述一个信源。

     (a)编写一段程序,从包括26个字母的符号集{a,b,...,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?

     #include<iomanip>
    #include<ctime>

    #include<iostream>

    using namespace std;

    int main()

    {
    int p,i,j;
    char m[100][100];
    srand(time(NULL));
    cout<<setfill('0');
    for(i=0;i<100;i++)
    {
    for(j=0;j<4;j++)
    {
    p=rand()%26;
    n[i][j]=p+'a';
    }
    n[i][4]='';
    cout
    <<" "<<n[i]<<" ";
    }
    return 0;
    }

     

  • 相关阅读:
    Angular @Input讲解及用法
    跨浏览器窗口通讯 ,7种方式
    map和forEach的区别
    纯CSS圆环与圆
    如何理解时间复杂度和空间复杂度
    毁灭
    P1631 序列合并
    plotly dash
    Tkinter
    mysql 和 sqlalchemy 的一个测试环境
  • 原文地址:https://www.cnblogs.com/zhaoyue1/p/4766109.html
Copyright © 2011-2022 走看看