第一次作业续

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

答:

  1. 视频文件的大小一般是和质量有关的,常见的有帧率码率等数据就是描述视频质量的一般来说,rmvb格式的相对较小,但是质量有一定损失

      2.  并不是全部文件压缩率都大的,以图片来说BMP格式的图片用Winrar压缩可以达到非常大的压缩率。如果你是压缩MP3,rm,jpg等本身就已经是高度压缩的文件类型的话那就不会压缩多少的,
jpg格式的图片因为其本身就已经是一种压缩率很大的图片格式,所以就算用Winrar来压缩也不会缩小多。更甚至有的本来就压缩的很固实的rar格式文件,如果再用Winrar来压缩还可能出现体积增大的情况。

 

    从一本通俗杂志中摘录几段文字,并删除所有不会影响理解的文字,实现压缩。例如,在“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

 

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

 

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

 

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

 

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

 

      =- log21/4

 

      = log24=2(bit)

 

 

 

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

 

        =-1/2*log21/2-1/4*log21/4-1/8*log21/8-1/8*log21/8)

 

       =1/2+1/2+3/8+3/8

       =1.75

 

 (c)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)根据此序列估计个概率值,并计算这一序列的一阶、二阶、

 

三阶和四阶熵。

 

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

 

 解:(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=-(1/4*log21/4+2/7*log22/7+4/21*log24/21+23/84*log223/84)

 

 =-1/4*log21/4-2/7*log22/7-4/21*log24/21-23/84*log223/84

 

 =2(bit)

 

(b)、
 答:由这些熵可以推断此序列具有的结构是:

 (1)序列的阶数越大,熵值就会越大,相应的平均自信息信息就低;

 (2)序列的阶数越小,熵值就会越小,相应的平均自信息信息就高。

所以要想多了解序列的信息,就需要把序列少分一点,求它的低阶熵

 

  7、做一个实验,看看一个模型能够多么准确地描述一个信源。
  (a)、编写一段程序,从包括26个字母的符号集{a,b,...,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?

答:源程序为:

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int p,i,j;
char m[100][100];
for(i=0;i<100;i++)
{
for(j=0;j<4;j++)
{
p=rand()%26;
m[i][j]=p+'a';
}
m[i][4]='\0';
printf("%d: %s \t",i+1,m[i]);
}
return 0;
}

 

 

 

 

 

 

 

 

 

 
posted @ 2015-09-02 11:05  聂桂林  阅读(193)  评论(0编辑  收藏  举报