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

数据结构中首先需要根据数据特征以及数据可能的操作,选择操作简单,方便组织的数据结构。常见的就是线性结构,层次感强的树形结构以及存在多对多的网状结构。
对于数据结构,可以结合需要,实时创新更加适合题目要求,能够非常简单操作、操作简单即可实现题目要求,而没有多余的步骤,行云如水。比如找对于常有头尾操作的线性数据结构,用环形链表就可以省去遍历线性链表指针的多余操作。
以下为经典的两个例子:
1.《programming pearls》 column 10: squeezing space
这里写图片描述
对于存储稀疏矩阵,首先想到的是使用链表指针,但是,指针对于空间的浪费也是不可忽视的,即指针对于题目的要求属于多余的无用信息。再更精简的数据结构设计中,如果不涉及数据的插入删除等操作,需考虑使用一种特殊的二维数组存储,可以更节省空间
这里写图片描述
2. 循环报数删除
2n个数围城一圈,其中n个偶数,n个奇数。从第一个开始数到第m步长,则删除;然后从删除数之后开始数,再数到第m个数删除…..以此类推,不断删除数字,怎么安排座位,使得删除n个数之后,剩余全是偶数。
常见的解法是利用指针圆环的数据结构,但不可避免的寻找数据过程中遍历操作。采用如下的直接定位法,由于将所有的节点分为若干段之后,每次删除的节点,需要移动的结点数相对不多,这样程序的效率大为提高。

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

参考文献:
《Programming Pearls》 Jon Bentley
《ACM/ICPC高级教程》 吴文虎 王建德

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值