读书笔记—数据结构设计中的有用以及无用信息
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高级教程》 吴文虎 王建德
对于数据结构,可以结合需要,实时创新更加适合题目要求,能够非常简单操作、操作简单即可实现题目要求,而没有多余的步骤,行云如水。比如找对于常有头尾操作的线性数据结构,用环形链表就可以省去遍历线性链表指针的多余操作。
以下为经典的两个例子:
1.《programming pearls》 column 10: squeezing space
对于存储稀疏矩阵,首先想到的是使用链表指针,但是,指针对于空间的浪费也是不可忽视的,即指针对于题目的要求属于多余的无用信息。再更精简的数据结构设计中,如果不涉及数据的插入删除等操作,需考虑使用一种特殊的二维数组存储,可以更节省空间
2. 循环报数删除
2n个数围城一圈,其中n个偶数,n个奇数。从第一个开始数到第m步长,则删除;然后从删除数之后开始数,再数到第m个数删除…..以此类推,不断删除数字,怎么安排座位,使得删除n个数之后,剩余全是偶数。
常见的解法是利用指针圆环的数据结构,但不可避免的寻找数据过程中遍历操作。采用如下的直接定位法,由于将所有的节点分为若干段之后,每次删除的节点,需要移动的结点数相对不多,这样程序的效率大为提高。
这类例子的通常类似于遗传的算法,结合几种数据结构,取长补短。 对于这个例子,线性表也可以解决,但是由于顺序存储结构在“找点”问题上需要指针移动,因此线性表中的信息就属于“不可直接使用”的信息。相对而言,分段式数组兼具链式存储结构和顺序存储结构的优点,将不可直接使用的信息转化为可直接使用的信息,从而提高的算法的效率。
参考文献:
《Programming Pearls》 Jon Bentley
《ACM/ICPC高级教程》 吴文虎 王建德
相关文章推荐
- 设计模式之4.2 Spring bean容器以及怎么从xml当中读取配置信息
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 显示数据库中所有表名以及字段信息(非常有用)
- C语言数据结构之学生信息管理系统课程设计
- 基于web信息管理系统的权限设计分析和总结(数据结构)
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 学生信息管理系统(cocos2d引擎)——数据结构课程设计
- 数据结构设计——班级个人信息管理系统
- 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算
- OGG文件的数据结构以及读取其注释信息的代码
- 数据结构课程设计——图书信息管理系统设计
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 《信息安全系统设计基础》实验过程中遇到的问题以及解决方案
- 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)
- 2015数据结构课程设计——职工信息管理系统
- 团队项目——地铁信息查询数据结构设计
- 20155339 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile以及myod
- 读书笔记: 博弈论导论 - 14 - 不完整信息的静态博弈 机制设计
- Cpp Concurrency In Action(读书笔记6)——无锁并发数据结构设计