第一次作业

第一次作业:

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

我对数据压缩的理解是在这个大数据的时代,数据量实在是太大,信息在传输的过程中过于缓慢,因此我们需要对数据进行压缩。

数据压缩我们要压缩的是信号空间,主要对象包括①物理空间②时间空间③电磁频段

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

我个人理解的是进行压缩,可以减少存储空间,提高其传输、存储和处理效率。

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

数据压缩的分类繁多,没有确定的。一般步骤如下

原始数据→建模表达→模型参数→二次量化→熵编码→压缩码流

按一般方法数据压缩分为可逆压缩和不可逆压缩

1.4

2-1  用你的计算机上的压缩工具来压缩不同文件。研究原文件的大小和类型对于压缩文件与原文件大小之比的影响。

    答:我在我的电脑上亲自体验了一下压缩文件,得出的结果是不同的文件受影响不一样,有一些文件压缩后大小没有变化,一些文件压缩后确实变小了。

2-2  从一本通俗杂志中摘录几段文字,并删除所有不会影响理解的文字,实现压缩。例如,在“This is the dog that belongs to my friend”中,删除is、the、that和to之后,仍然能传递相同的意思。用被删除的单词数与原文本的总单词数之比来衡量文本中的冗余度。用一本技术期刊中的文字来重复这一试验。对于摘自不同来源的文字,我们能否就其冗余度做出定量论述?

    答:不能就其冗余度做出定量论述。对于摘自不同来源的文字,重复度不一样。有一些单词会重复出现多次。

 

 第二次作业:

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

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

解:H= P(a1)㏒2P(a1)+P(a2)㏒2P(a2)+P(a3)㏒2P(a3)+P(a4)㏒2P(a4)

        = -4*1/4㏒2 (1/4)

         = 2  bits

       

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

  解:H= P(a1)㏒2P(a1)+P(a2)㏒2P(a2)+P(a3)㏒2P(a3)+P(a4)㏒2P(a4)

    = -1/2㏒2 (1/2)-1/4㏒2 (1/4)-1/8㏒2 (1/8)-1/8㏒2 (1/8)

           = 1.7 bits

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

解: H= P(a1)㏒2P(a1)+P(a2)㏒2P(a2)+P(a3)㏒2P(a3)+P(a4)㏒2P(a4)

            = -0.505㏒2 0.505-1/4㏒2 (1/4)-1/4㏒2 (1/4)-0.12㏒2 0.12

                       ≈ 1.3 bits 

       

   5、考虑以下序列:

                 ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG

                 CTGAACCCGCTTAAGCTTAAGCTGAACCTTCTGAACCTGCTT

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

 

解:由题意可知此序列共有字母84个,其中A出现21次,T出现23次,G出现16次,C出现24次,

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

    H=-1/4*log2(1/4)-23/84*log2(23/84)-4/21*log2(4/21)-2/7*log2(2/7)

      =1.98 bits

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

解:由题意可知,共有四个字符集,由求出一阶熵,二阶熵,三阶熵的值,我们可以知道等概率时,熵最大。

        

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

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

/*******************
程序名:wang
作者:王红英
日期:2015年9月2日
*********************/

#include<stdio.h>
#include<stdlib.h>

int main()
{
int m,n;
for(m=0;m<100;m++)
{
for(n=0;n<4;n++)
{
putchar(rand()%1?65+rand()%26:60+rand()%26);
}
putchar('\t');
}
return 0;

}

posted @ 2015-08-27 23:10  *王红英*  阅读(199)  评论(0编辑  收藏  举报