1-1:数据压缩的一个基本问题是“我们要压缩什么”,对此你是怎样理解的?
答:以最少的数码来表示信源所发出的信号,减少容纳给定集合或数据采样集合发信号空间。物理空间、时间空间、电磁频段都可能成为数据压缩的对象。
1-2:数据压缩的另一个基本问题是“为什么进行压缩”,对此你又是如何理解的?
答:它主要目的是减少在存储时占用的空间。又因为存储占用大量的空间,以及大数据量使得数据传输量非常大,这对通信道及网络都造成很大压力。所以要进行数据压缩。
1-6:数据压缩技术是如何进行分类的?
答:(1)按照压缩方法是否产生失真分类 —— 根据解码后数据与原始数据是否完全一致进行分类,压缩方法可被分为有失真编码和无失真编码两大类。
(2)按照压缩方法的原理分类 —— 根据编码原理进行分类,大致有编码、变换编码、统计编码、分析-合成编码、混合编码和其他一些编码方法。
参考书 1-4
1.4 1、用你的计算机上的压缩工具来压缩不同文件。研究原文件的大小和类型对于压缩文件与原文件大小之比的影响。
答:文件类型不同,压缩前的文件大小与压缩后的文件大小只比也就不同,有的文件压缩后变化不是甚至不会变化,有的文件压缩后文件会变小很多。这也许就是不同的文件类型有的能够有损压缩,而有的却只能无损压缩。相应压缩比则根据文件类型的不同有所不同,比如文档类的文件压缩比很大(一个字或者一个词在同一个文件会反复出现),而影音文件的压缩比则比较小(每一个像素点的色素不同是常有的,不同颜色和颜色深浅、对比度的不同、亮度不同、音调音色不同等的对应二进制代码是不同的)。所以压缩比确实是不能一概而论的。
1.4 2、冗余度它表征源信息率的多于程度,是描述信源客观统计特性的一个物理量。也可以说是从多余的一个量,它不影响数据的完整,也正是因为这一个多余量的存在,才能对其信源进行压缩,压缩后不会影响传递信息。信源=信息+冗余度。
P30
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)H=-(4*1/4*(log2(1/4))=2
(b)H=-1/2*(log2(1/2))-1/4*(log2(1/4))-2*1/8*(log2(1/8))=1.75
(c)H=-0.505*(log2(0.505))-1/4*(log2(1/4))-1/8 *(log2(1/8))-0.12*(log2(0.12))=1.26
5、考虑一下序列:
ATGCTTAACGTGCTTAACCTGAAGCTTCCGCTGAAGAACCTG
CTGAACCCGCTTAAGCTGAACCTTCTGAAGCTTAACCTGCTT
(a) 根据此序列估计各概率值,并计算着一序列的一阶、二阶、三阶和四阶熵。
(b) 根据这些熵,能否推断此序列具有什么样的结构?
答:根据此序列得知P(A)=21/84=0.25 P(T)=23/84=0.27
P(G)=16/84=0.19 P(C)=24/84=0.28
H=(-log2(0.25))*(0.25)+(-log2(0.27))*(0.27)+(-log2(0.19))*(0.19)+(-log2(0.28))*(0.28)=7.64
7.做一个实验,看看一个模型能够多么准确地描述一个信源。
(a)编写一段程序,从包括26个字母的符号集{a,b,……,z}中随机选择字母,组成100个四字母单词,这些单词中有多少是有意义的?
答:
#include <stdio.h>
#include<stdlib.h>
#include <windows.h>
int main()
{
int i,n;
for(i=0;i<100;i++)
{
for(n=0;n<100;n++)
{putchar(rand()%2?65+rand()%26:97+rand()%26);}
Sleep(500);
putchar('\n');
}
return 0;
}
则大部分单词是乱序,且无意义。
P66
2.利用程序huff_enc和huff_dec进行一下操作(在每种情况下,利用由被压缩图像生成的码本)。
(a)对Sena、Sensin和Omaha图像进行编码。
给出以上每一试验得出的文件大小,并解释其差别。
答:根据文件程序调试结果如下图所示:
文件名 | 压缩前 | 压缩后 | 压缩率 |
Sena | 64 | 57 | 89% |
Sensin | 64 | 61 | 95% |
Omaha | 64 | 58 | 90% |
所以压缩率一般是越小越好,但是压得越小,解压时间就越长。
4.一个信源从符号集A={a1,a2, a3, a4, a5}中选择字母,概率为P(a1)=0.15,P(a2)=0.04,P(a3)=0.26,P(a4)=0.05,P(a5)=0.50.
(a)计算这个信源的熵。
(b)求这个信源的霍夫曼码。
(c)求(b)中代码的平均长度及其冗余度。
答:(a)H=-0.15*(log2(0.15))-0.04*(log2(0.04))-0.26 *(log2(0.26))-0.05*(log2(0.05))-0.50*(log2(0.50))=1.83
(b)根据上述的概率得:
字母 | 概率 | 码字 |
a1 | 0.15 | 000 |
a2 | 0.04 | 0010 |
a3 | 0.26 | 01 |
a4 | 0.05 | 0011 |
a5 | 0.50 | 1 |
(c)L=0.15*3+0.04*4+0.26*2+0.05*4+0.5*1=1.83
L-H=0
5. 一个符号集A={a1,a2, a3, a4,},其概率为P(a1)=0.1,P(a2)=0.3,P(a3)=0.25,P(a4)=0.35,使用以下过程找出一种霍夫曼码:
(a)本章概述的第一过程;
(b)最小方差过程。
(a)一、为每个字符创建一个集合
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 |
| a1 | 0.1 |
a2 | 0.3 |
| a2 | 0.3 |
a3 | 0.25 |
| a3 | 0.25 |
a4 | 0.35 |
| a4 | 0.35 |
二、根据集合的概率对集合进行排序(升序)
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 |
| a1 | 0.1 |
a2 | 0.3 |
| a3 | 0.25 |
a3 | 0.25 |
| a2 | 0.3 |
a4 | 0.35 |
| a4 | 0.35 |
三、对最前面集合的字母的码字中插入前缀 ‘1’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 1 | a1 | 0.1 |
a2 | 0.3 |
| a3 | 0.25 |
a3 | 0.25 |
| a2 | 0.3 |
a4 | 0.35 |
| a4 | 0.35 |
四、对第二个集合中字母的码字中插入前缀‘0’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 1 | a1 | 0.1 |
a2 | 0.3 |
| a3 | 0.25 |
a3 | 0.25 | 0 | a2 | 0.3 |
a4 | 0.35 |
| a4 | 0.35 |
五、合并最前面的两个集合
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 1 | a1a3 | 0.35 |
a2 | 0.3 |
| a2 | 0.3 |
a3 | 0.25 | 0 | a4 | 0.35 |
a4 | 0.35 |
|
|
|
六、根据集合的概率对集合进行排序(升序)
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 1 | a2 | 0.3 |
a2 | 0.3 |
| a1a3 | 0.35 |
a3 | 0.25 | 0 | a4 | 0.35 |
a4 | 0.35 |
|
|
七、对最前面集合的字母的码字中插入前缀 ‘1’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 1 | a2 | 0.3 |
a2 | 0.3 | 1 | a1a3 | 0.35 |
a3 | 0.25 | 0 | a4 | 0.35 |
a4 | 0.35 |
|
|
|
八、对第二个集合中字母的码字中插入前缀‘0’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 01 | a2 | 0.3 |
a2 | 0.3 | 1 | a1a3 | 0.35 |
a3 | 0.25 | 00 | a4 | 0.35 |
a4 | 0.35 |
|
|
九、合并最前面的两个集合
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 01 | a1a2 a3 | 0.65 |
a2 | 0.3 | 1 | a4 | 0.35 |
a3 | 0.25 | 00 |
|
|
a4 | 0.35 |
|
|
十、根据集合的概率对集合进行排序(升序)
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 01 | a4 | 0.35 |
a2 | 0.3 | 1 | a1a2 a3 | 0.65 |
a3 | 0.25 | 00 |
|
|
a4 | 0.35 |
|
|
十一、对最前面集合的字母的码字中插入前缀 ‘1’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 01 | a4 | 0.35 |
a2 | 0.3 | 1 | a1a2 a3 | 0.65 |
a3 | 0.25 | 00 |
|
|
a4 | 0.35 | 1 |
|
|
十二、对第二个集合中字母的码字中插入前缀‘0’
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 001 | a4 | 0.35 |
a2 | 0.3 | 01 | a1a2 a3 | 0.65 |
a3 | 0.25 | 000 |
|
|
a4 | 0.35 | 1 |
|
|
十三、合并最前面的两个集合
字母 | 概率 | 码字 | 集合 | 集合的概率 |
a1 | 0.1 | 001 | a1a2a3a4 |
|
a2 | 0.3 | 01 |
|
|
a3 | 0.25 | 000 |
|
|
a4 | 0.35 | 1 |
|