您的位置:首页 > 理论基础 > 数据结构算法

读书笔记—数据结构设计中的有用以及无用信息

2015-02-27 22:02 239 查看
数据结构中首先需要根据数据特征以及数据可能的操作,选择操作简单,方便组织的数据结构。常见的就是线性结构,层次感强的树形结构以及存在多对多的网状结构。

对于数据结构,可以结合需要,实时创新更加适合题目要求,能够非常简单操作、操作简单即可实现题目要求,而没有多余的步骤,行云如水。比如找对于常有头尾操作的线性数据结构,用环形链表就可以省去遍历线性链表指针的多余操作。

以下为经典的两个例子:

1.《programming pearls》 column 10: squeezing space



对于存储稀疏矩阵,首先想到的是使用链表指针,但是,指针对于空间的浪费也是不可忽视的,即指针对于题目的要求属于多余的无用信息。再更精简的数据结构设计中,如果不涉及数据的插入删除等操作,需考虑使用一种特殊的二维数组存储,可以更节省空间



2. 循环报数删除

2n个数围城一圈,其中n个偶数,n个奇数。从第一个开始数到第m步长,则删除;然后从删除数之后开始数,再数到第m个数删除…..以此类推,不断删除数字,怎么安排座位,使得删除n个数之后,剩余全是偶数。

常见的解法是利用指针圆环的数据结构,但不可避免的寻找数据过程中遍历操作。采用如下的直接定位法,由于将所有的节点分为若干段之后,每次删除的节点,需要移动的结点数相对不多,这样程序的效率大为提高。



这类例子的通常类似于遗传的算法,结合几种数据结构,取长补短。 对于这个例子,线性表也可以解决,但是由于顺序存储结构在“找点”问题上需要指针移动,因此线性表中的信息就属于“不可直接使用”的信息。相对而言,分段式数组兼具链式存储结构和顺序存储结构的优点,将不可直接使用的信息转化为可直接使用的信息,从而提高的算法的效率。

参考文献:

《Programming Pearls》 Jon Bentley

《ACM/ICPC高级教程》 吴文虎 王建德
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐