现在的位置: 首页 > 综合 > 正文

常用数据压缩技术

2018年03月18日 ⁄ 综合 ⁄ 共 761字 ⁄ 字号 评论关闭

       时常努力地考虑压缩程序是很有利的。有时这种思考会带来新的启示,使程序变得更加简单。减少空间通常带来运行时间上合理的副作用:程序越小,加载的时候也越快,也越容易填充到高速缓存中;需要操作的数据越少,操作时所花的时间通常也就越少。《编程珠玑》

常用的减少程序所需数据的存储空间的技术有以下几种:

1 稀疏数据结构

稀疏数组是指其中大多数项都具有同一值(通常为0)的矩阵。对于稀疏矩阵,最常用的表示法是使用一个数组表示所有的列,使用链表表示给定列中的活动元素。以下是2个用到稀疏数据结构来减少空间的例子。

1)图边的表示

图边的表示有2种方法:邻接矩阵和邻接链表(稀疏矩阵)

邻接矩阵:用一个二维矩阵表示图中每条边的邻接边(1表示相邻边,0表示不是相邻边)


但是如果图会产生大量的0,可以用以下邻接链表(解决上述稀疏矩阵的问题)


2)倒排索引结构

第二个例子来自全文检索中用到的倒排索引结构的表示。



上述矩阵实具有高度的稀疏性,即大部分元素时0,而只有极少部分元素为1,所以采用链表数组解决稀疏矩阵的问题(上述数据和下述图中的数据不对应,有些改动):



2 数据压缩

通过信息理论可以知道,通过压缩的方式编目对象可以减少空间。如上述的稀疏数据结构也是一种压缩空间的方法。

常用的压缩数据的算法哈弗曼编码

3 分配策略

有时你使用多少空间并不和你如何使用这些空间同等重要。动态分配显示,在需要什么东西之前,我们不必请求哪些东西;可变长度记录的策略告诉我们当我们确实需要请求某样东西时,我们应该根据需要量的多少来申请。在Java中相应的数据结构是数组和链表。当你确定需要多少数据时,可以数组这种数据结构,但是当你还没确定需要多少数据时,最好采用链表这种动态增加数据的数据结构,以免空间的浪费。

4 垃圾回收

以下内容摘自《编程珠玑》第10章:




参考文献:

《编程珠玑》

抱歉!评论已关闭.