1-1 数据压缩的一个基本问题是“我们要压缩什么”,对此你是怎样理解的?
数据压缩,就是以最少的数码表示信源所发的信号,减少容纳给定消息集合或数据采样集合的信号空间。
所谓信号空间即被压缩对象,是指:
1.物理空间,如存储器、磁盘、磁带、光盘、USB闪存盘(U盘)等数据存储介质;
2.时间区间,如传输给定消息集合所需要的时间;
3.电磁频段,如为传输给定消息集合所要求的频谱、带宽等。
也就是指某信号集合所占的空域、时域和频域空间。信号空间的这几种形式是相互关联的:存储空间的减少也意味着传输效率的提高与占用带宽的节省。这就是说,只要采用某种方法来减少某一信号空间,就能压缩数据。
所以我觉得,我们要压缩的就是那些占用空间大的各类数据。
1-2 数据压缩的另一个基本问题是“为什么进行压缩”,对此你又是怎样理解的?
信息时代带来了“信息爆炸”。数据压缩的作用及其社会效益、经济效益将越来越明显。反之,如果不进行数据压缩,则无论传输或存储都很难实用化。而数据压缩的好处就在于:
①较快的传输各种信源(降低信道占有费用)——时间域的压缩;
②在现有通信干线上开通更多的并行业务(如电视、传真、电话、可视图文等)——频率域的压缩;
③降低发射功率(这对于依靠电池供电的移动通信终端,如手机、PDA、WSN等尤为重要)——能量域的压缩;
④紧缩数据存储容量(降低存储费用)——空间域的压缩。
数据进行压缩后,就可以减小存储空间,加快传输/下载的速度,大大提高了数据的使用效率。
1-6 数据压缩技术是如何分类的?
分为可逆压缩和不可逆压缩。
可逆压缩也叫做无失真、无差错编码或无噪声编码,而不同专业的文献作者还采用了另外一些术语,如冗余度压缩、熵编码、数据紧缩、信息保持编码,等等。
不可逆压缩就是有失真编码,信息论中称熵压缩。
参考书《数据压缩导论(第4版)》Page 8
1.4
1. 用你的计算机上的压缩工具来压缩不同文件。研究原文件的大小和类型对于压缩文件与原文件大小之比的影响。
一个3.35M的文件夹,压缩后变成了3.20M,压缩文件与原文件大小之比为0.955
一个166KB的word文档,压缩后变成了133KB,压缩文件与原文件大小之比为0.801
一个13.8MB的avi文件,压缩后变成了1.12MB,压缩文件与原文件大小之比为0.081
然后我发现avi的压缩率最高,文件夹的较低
2.从一本通俗杂志中摘录几段文字,并删除所有不会影响理解的文字,实现压缩。例如,在“This is the dog that belongs to my friends”中,删除is、the、that、和to之后,任然能传递相同的意思。用被删除的单词数与原文本的总单词数之比来衡量文本中的冗余度。用一本技术期刊中的文字来重复这一实验。对于摘自不同来源的文字,我们能否就其冗余度做出定量论述?
不能,因为不同文件的内容不一样,它们的文本中的冗余度也不一样,所以对于摘自不同来源的文字,我们不能就其冗余度做出定量论述。
参考书《数据压缩导论(第4版)》Page 30
3.给定符号集A={a1,a2,a3,a4},求以下条件下的一阶熵。
(a)p(a1)=p(a2)=p(a3)=p(a4)=1/4
一阶熵为0.5+0.5+0.5+0.5=2(bit)
(b) p(a1)=1/2,p(a2)=1/4,p(a3)=p(a4)=1/8
一阶熵为:0.5+0.5+0.375+0.375=1.75(bit)
(c)p(a1)=0.505,p(a2)=1/4,p(a3)=1/8,p(a4)=0.12
一阶熵约为:0.5+0.5+0.375+0.367≈1.742(bit)
5.考虑以下序列:
ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG
CTGAACCCGCTTAAGCTGAACCTTCTGAAGCTTAACCTGCTT
(a)根据此序列估计各概率值,并计算这一序列的一阶熵。
共有84个字母,其中21个A,24个C,16个G,23个T
p(A)=1/4, p(C)=2/7, p(G)=4/21, p(T)=23/84
一阶熵为:0.5+0.52+0.46+0.51≈1.99(bit)
7.做一个实验,看看一个模型能够多么准确地描述一个信息。
(a)编写一段程序,从包括26个字母的符号集{a,b,…,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?
#include <stdio.h> #include<stdlib.h> #include <windows.h> int main() { int m,n; for(m=0;m<100;m++) { for(n=0;n<4;n++) { putchar(rand()%2?65+rand()%26:97+rand()%26); } Sleep(200); putchar(' '); } return 0; }