美文网首页
1 - 理解数据结构和算法设计

1 - 理解数据结构和算法设计

作者: xiaojianxu | 来源:发表于2017-04-18 11:43 被阅读17次
本文纯粹是出自学习目的,根据个人理解,将文章进行了部分编排与修改。如侵权,请联系删除。
------@2017/04/19------

原文出处

程序 = 数据结构 + 算法

先有数据,再有算法。所以在设计时,都是以数据结构为出发点进行设计的。

另一方面,如果有了具体的算法,也可根据具体情况对数据结构进行改进。

Set: 将一对散乱的东西存放在一个容器里
(原文此处有图,省略...)

然而数据本身是没有顺序的,如何保持顺序关系?

方法 1:array,将数据连续有序的排成一排
(原文此处有图,省略...)
方法 2:linkedlist,将各个数据之间用指针连接

数据存好以后,就来到了问题的核心部分:如何处理这些数据?算法

怎么计算这些数据就是算法部分所关注的内容。同一对数据(相同的 input),根据不同需求,要求得到不同的处理结果(output),那么我们就会使用不同的算法。

个人理解,算法就是处理计算数据的具体方法。课本中学到的各种排序算法,贪心,动态规划算法,都是别人的研究结果,可供直接使用。

最简单的离自己,要排序一堆数据,常用的就是 merge sort, quick sort 等。具体情况具体分析,各种算法各有优劣。其他的大致都在这个框架里,就像现在的流行语:** 这,都是套路 **。

但是,如果能把每个算法深入学习理解,还是可以从中学到很多思考以及解决问题的方法。

举个具体算法的例子:如何判断某些数据是否存在?

好比你要在一堆人里面,找出某一个人,那么我们一般会使用排查的方法,一个一个的挨着找。
对数据也是一样的道理,就是挨个排查搜索,遍历。

问题是,我们如何加速查找呢?

生活中的例子

继续用上面找人的例子,如果你知道要找的目标的身高,那么让所有人按照:从左到右,从矮到高顺序依次排列。
你可以先寻问,站在最中间的人的身高。如果他比你要找的人高,那么你的目标一定在此人的左边,此人右边的所有人都可排除掉了。

反之亦然,每次的搜索规模就能减小一般,大大的节约了搜索时间。

计算机中的数据例子

对于数据,是同样的道理。如果数据已排序,那么每次可以从有效区间的中间点,开始查找。如果正好等于要找的元素,直接返回。若小于要查找的元素,则有效区间可以缩小为该中间点的左边,反之中间点的右边。

这种方法是一种确定性贪心。
(原文此处有图,省略...)

这种算法,可以由两种不同的底层数据结构来支持:array 和 binary search tree.

如何快速判断 5 是否在其中?
二叉搜索树
(原文此处有图,省略...)

另外一个有趣的算法问题就是,如何遍历整个 Tree?

方法 1:DFS
方法 2:BFS

知识整合

算法题:input - 一个有向图; output - 从头部到叶子的最小路径;

(原文此处有图,省略...)

每个点,记录一个值 distance 代表,从根节点到达该点的最短距离,从可达到它的所有路径中,选择最短的路径长度。

以图中 2 点为例,分别可以从 3 和 5 达到它,distance(2) = min(distance(3)), distance(5)) + 2.

这就是我们常说的动态规划 (DP):由上一层的答案推导出下一层的答案,即 k + 1层答案是由 k 层答案得到的。

动态规划一共做了三件事:

  1. 解(将?)空间转换

以上题为例,每个点,除了它原本的数据值,还多存了一个额外的值 distance。此时,每个点的语义就和原来的语义有所不同。

  1. BFS

  2. 贪心:确定性贪心

相关文章

  • 数据结构和算法 1-1绪论

    数据结构和算法 1-1绪论 本系列笔记均记载自 fishc.com 相关课程 程序设计 = 数据结构 + 算法 数...

  • 1 - 理解数据结构和算法设计

    原文出处 程序 = 数据结构 + 算法 先有数据,再有算法。所以在设计时,都是以数据结构为出发点进行设计的。 另一...

  • 数据结构和算法绪论 学习笔记(一)

    程序设计 = 数据结构 + 算法 1、什么是数据结构? 2、算法初认识 3、算法初体验 一、什么是数据结构? 数据...

  • 编程思想

    ### M式编程规范 步骤:1.理清需求 2.设计数据结构和算法 3.对算法进行M化。 & 设计数据结构包括类的设...

  • 技能树

    技能树 程序设计 + 软件开发 程序设计 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计...

  • Android面试需要的那些技能[欢迎补充]

    一、了解常用的设计模式,数据结构和算法;二、精通Java基础,理解Java的runtime机制,熟悉Java反射,...

  • reids string

    redis中支持的数据结构都是经过设计优化的数据结构和算法。 1. redis string数据结构 见sds.h...

  • 1:什么叫数据结构 什么叫算法

    1:什么叫数据结构 2:什么叫算法 3:如何快速的提高对数据结构以及算法的理解

  • day003_python列表和元组

    1. 程序设计 经典说法:程序设计 = 数据结构 + 算法 实际工程:基本逻辑 + 数据结构 + 设计思路 2. ...

  • 数据结构笔记(一)

    第1章 数据结构绪论 第2章 算法 第3章 线性表 第1章 数据结构绪论 程序设计 = 数据结构 + 算法 逻辑结...

网友评论

      本文标题:1 - 理解数据结构和算法设计

      本文链接:https://www.haomeiwen.com/subject/ecyfzttx.html