文科生也能看懂的算法图解

IDEA 是由 SándorP. Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,做者但愿它们可以有更广的用途,所以在网上发布了这个项目,但愿可以帮助到教师、学生和有好奇心的人们。算法将会不断更新,能够访问页面了解更多信息:idea-instructions.com/。面试

这些图片使用 Inkscape 绘制,可使用任意一款向量图编辑软件来编辑它们。每一个算法下面都有相应的图片下载地址。算法

快速排序

快速排序是一种“分而治之”的排序算法,经过随机选择“分区点”来避免出现最坏的状况。数组

文科生也能看懂的算法图解

  • 随机选择“分区点”。
  • 按照“分区点”的高度划条线。
  • 高出“分局点”的元素须要向右移动。
  • 低于“分区点”的元素须要向左移动。
  • 移动元素。
  • 重复上述的步骤分别对位于“分区点”两边的元素进行排序。

下载地址:idea-instructions.com/quick-sort/微信

Bogo 排序

Bogo 排序也被称为“愚蠢的排序”,是一种很是简单但低效的排序算法,就是不断打乱元素的顺序,直到达到有序为止。数据结构

文科生也能看懂的算法图解

  • 查看元素是否有序。
  • 元素无序,那么就打乱顺序。
  • 再次检查元素是否有序。
  • 若是有序,排序成功,不然继续重复上述步骤。

下载地址:idea-instructions.com/bogo-sort/架构

二分查找

二分查找是一种快速从一个有序数组中找到某个元素位置的查找算法。这有点相似于猜数字游戏,经过不断问“目标数字是大于仍是小于某个数”这样的问题,最终猜出目标数字。ide

文科生也能看懂的算法图解

  • 限定元素区间。
  • 待查找元素在区间的某个位置吗?
  • 不在。
  • 那么看看待查找元素是否是在当前位置的左边或者右边。

下载地址:idea-instructions.com/binary-sear…学习

归并排序

归并排序也是一种“分而治之”的递归排序算法。ui

文科生也能看懂的算法图解

  • 把元素分红两部分,对每个部分采用递归的归并排序。
  • 比较已经排好序的元素。
  • 合并已经排好序的元素。
  • 排序完毕。

下载地址:idea-instructions.com/merge-sort/idea

平衡二叉树

平衡二叉树是自平衡的二叉树变种,能够保证快速的查找、插入和删除操做。

文科生也能看懂的算法图解

文科生也能看懂的算法图解

以图中的平衡二叉树为例:

  • 左子节点比父节点小,而父节点比右子节点小。若是根节点左右子树的高度差超过 1,就变得不平衡。
  • 想知道树中是否包含了元素 11?11 比 10 大,那么就查找 10 的右子节点 12。11 比 12 小,因此就查找 12 的左子节点,12 的左子节点恰好是要查找的 11。一样的,树中是否包含了元素 8?8 比 10 小,那么就查找 10 的左子节点 6。8 比 6 大,那么就查找 6 的右子节点。6 的右子节点不存在,说明树中不存在元素 8。
  • 如何找到树中最小的元素?从根节点开始,一直顺着左子节点,找到最后一个叶子节点就是树中最小的元素。
  • 如何找到 10 的下一个元素?若是根节点恰好是 10,那么就从 10 的右子树中找到最小的那个元素。若是根节点不是 10,那么先找到 10,若是 10 没有右子节点,那么就一直往父节点找,直到找到比 10 大的元素为止。
  • 在树种加入 17 或删除 10,破坏了树的平衡,这个时候须要经过旋转恢复树的平衡。

下载地址:idea-instructions.com/avl-tree/

图遍历

图遍历算法会遍历图中全部可达的顶点,能够经过辅助数据结构来实现各类遍历,好比使用无序集合实现随机遍历,使用堆栈实现深度优先遍历,使用队列实现广度优先遍历。

文科生也能看懂的算法图解

  • 随机查找:选定一个顶点,把它放入一个无序集合中。从集合中取出一个顶点,访问该顶点,把该顶点的相邻顶点放入集合中,并把该顶点移出集合。重复这一过程,直到集合中的元素所有被遍历完毕。
  • 深度优先遍历:选定一个顶点压入栈中,把该顶点其中的一个相邻顶点也压入栈中。访问栈顶的顶点,若是该顶点没有其余相邻的顶点,就出栈。若是有其余相邻顶点,就把其中的一个相邻顶点压入栈中。重复这一过程,直到栈中的元素所有被遍历完毕。
  • 广度优先遍历:选定一个顶点,把该顶点的相邻顶点放进队列尾部。访问队列头部的顶点,把该顶点移出队列,若是该顶点有相邻顶点,就把相邻顶点放进队列尾部。重复这一过程,直到队列中的元素所有遍历完毕。

下载地址:idea-instructions.com/graph-scan/

一笔画

一笔画是一种 Fleury 算法,旨在优雅地找出图中的欧拉(Eulerian)路径。欧拉路径是图中的一条路径,恰好通过每条边,而且每条边只被访问一次。

文科生也能看懂的算法图解

  • 顶点度数表示该顶点有几条边。
  • 若是图中有且仅有两个顶点的度数为奇数,其余为偶数,或者不存在奇数度数的顶点,则存在欧拉路径。
  • 选定一个顶点开始画路径。
  • 若是存在两个以上的桥,那么能够走桥。若是只剩下一个桥,就不能走桥,除非只剩下桥能够走。
  • 若是还有没有走过的边,重复步骤 4。
  • 成功画出欧拉路径。

下载地址:idea-instructions.com/euler-path/

此外,我还有一份Android学习PDF+架构视频+面试文档+源码笔记分享若是你有须要的话,能够关注微信公众号【Android开发之家】免费领取

相关文章
相关标签/搜索