第一次作业

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;
}

原文地址:https://www.cnblogs.com/xuyukun/p/4759929.html