关闭

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

标签: 数据结构算法
273人阅读 评论(0) 收藏 举报
分类:

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

首先是讲讲查找和排序。

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

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6114次
    • 积分:184
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:12篇
    • 评论:0条
    文章分类
    文章存档