一、教材习题1-1,1-2,1-6,
习题1-1 数据压缩的一个基本问题是“我们要压缩什么”,对此你是怎样理解的?
答:数据压缩,就是以最少的数码表示信源所发的信号,减少容纳给定消息集合或数据采样集合的信号空间。
我们要压缩的对象就是信号空间,即物理空间,时间区间,电磁频段,也就是指某信号集合所占的空域、时域和频域空间。
习题1-2 数据压缩的另一个基本问题是“为什么进行压缩”,对此你又是怎样理解的?
答:减少信息存储空间,提高其传输、存储和处理效率。
习题1-6 数据压缩技术是如何分类的?
答:数据压缩的分类方法繁多,尚未统一。可以将其分为可逆压缩和不可逆压缩。可逆压缩也叫作无失真、无差错编码或无噪声编码。不可逆压缩就是有失真编码,信息论中称熵压缩。
二、 参考书《数据压缩导论(第4版)》Page 8 1.4
1.4 项目与习题
1.用你的计算机上的压缩工具来压缩不同文件。研究原文件的大小和类型对于压缩文件与原文件大小之比的影响。
答:我用了我的计算机来分别压缩了图片,视频,音乐和文档,结果是文档的压缩文件与原文件大小相差最大,其次是音乐,然后是视频,最后是图片。
2.从一本通俗杂志中摘录几段文字,并删除所有不会影响理解的文字,实现压缩。例如,在“This is the dog that belongs to my friend"中,删除is、the、that和to之后,仍然能传递相同的意思。用被删除的单词数与原文本的总单词数之比来衡量文本中的冗余度。用一本技术期刊中的文字来重复这一试验。对于摘自不同来源的文字,我们能否就其冗余度做出定量论述?
答:我们不能对于摘自不同来源的文字就其冗余度做出定量的论述,因为不同的文件在压缩时的比例不同,压缩虽然能够解决冗余问题,但是不同的文件有不同的冗余度,除了冗余之外,还有部分信息是重复出现的,这样的话有可能会导致缺失,所以不能就其冗余度做出定量论述。
三、 参考书《数据压缩导论(第4版)》Page 30
3, 5, 7(a)
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/4 , P(a4)=0.12
解:(a)一阶熵为: H=-4*(1/4)*log2(1/4)
=-log2(1/4)
=2(bit)
(b)一阶熵为: H=-(1/2)*log2(1/2)+[-(1/4)*log2(1/4)]+[-2*(1/8)*log2(1/8)]
=1/2+1/2+3/4
=1.75(bit)
(c)一阶熵为: H=-0.505*log20.505+[-2*(1/4)*log2(1/4)]+(-0.12*log20.12)
=0.5+1-0.12*log20.12
=1.74(bit)
5、考虑以下序列:
ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG
CTGAACCCGCTTAAGCTTAAGCTGAACCTTCTGAACCTGCTT
(a)根据此序列估计各概率值,并计算这一序列的一阶、二阶、三阶和四阶熵。
(b)根据这些熵,能否推断此序列具有什么样的结构?
解:(a)由题意得: 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)
=0.5+0.52+0.46+0.52
=2(bit)
(b)我们只算了一阶熵,无法判断此序列的结构。
7、做一个实验,看看一个模型能够多么准确地描述一个信源。
(a)编写一段程序,从包括26个字母的符号集{a,b,...,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?
答:
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
char a[100][100];
int R;
srand((int)time(NULL));
for(int i=1;i<=100;i++)
{
for(int j=1;j<=5;j++)
{
R=rand()%26;
a[i][j]=R+'b';
}
}
for( i=1;i<=100;i++)
{
for(int j=1;j<=4;j++)
{
printf("%c",a[i][j]);
}
printf("\t\t");
}
return 0;
}