算法漫谈-查找和排序及数据结构

一直以来,觉得算法是一个比较高深的东西,虽然大学研究生都学习过,但在实际项目中,用的比较少,也只有用到的时候才会去研究相应的算法。从来没有深入系统的研究总结过,现在由于项目和其他原因,需要对算法做一个系统学习,为了督促自己,将自己的心得记录下来,以方便与他人探讨。

首先是讲讲查找和排序。

算法是解决实际问题的逻辑思维,并假借数据结构实现。解决实际问题最基本的算法当属查找和排序。其实我个人觉得排序是为了查找。单纯的排序没有意义。只有在海量的数据中找到我们需要的对象,进而才能进行相关操作。排序就是“磨刀不误砍柴工”中的磨刀步骤,因为有序集合可以很容易采用一些策略加速查找。

数据结构是一个逻辑抽象概念,与其存储是不相关的。从大的上来说,数据结构可分为三大类:

  1. “1对1”,就是线性表。某一个元素只有唯一前驱和唯一后继。
  2. “1对多”,就是树。某一个元素有多个后继。
  3. “多对多”,就是图。 某一个元素前驱后继都有多个。
而用于存储这些数据结构的物理方式可分为连续存储和非连续存储。连续存储如数组,非连续存储如链表。通常连续存储就可以随机访问,用下标方式实现,但通常情况下,增删查都不是很方便,需要移动大量元素。相反,链表则增、删等操作都很方便,常数级可完成,但遍历则需要一定时间。
树可以用数组方式来存储,如二叉完全树可用一维数组实现 ,也可用链表实现 。
图不同的表达方式也可分别不同的存储。如邻接矩阵可用二维数组来存储,但当出现稀疏矩阵的情况下,数组会很浪费空间,这时可用邻接表的方式来实现。
评价算法应该在特定应用环境下,每种算法都有一定的适用范围,普适的算法只是解决问题的基础,需要根据应用不同做差异化优化。
算法的这种差异化优化体现在时间和空间花费的平衡上,若对时间敏感,则可空间换时间;若资源有限,则可用时间来换空间。
上述即为今日学习之感悟。
下一篇讲述有关查找的感悟。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值