阅读更多

2顶
0踩

行业应用

转载新闻 趣味算法图解,文科生都看懂了

2018-04-17 11:19 by 副主编 jihong10102006 评论(4) 有43211人浏览
编者按

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

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

快速排序

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

  • 随机选择“分区点”。
  • 按照“分区点”的高度划条线。
  • 高出“分局点”的元素需要向右移动。
  • 低于“分区点”的元素需要向左移动。
  • 移动元素。
  • 重复上述的步骤分别对位于“分区点”两边的元素进行排序
。 下载地址:https://idea-instructions.com/quick-sort/

Bogo 排序

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

  • 查看元素是否有序。
  • 元素无序,那么就打乱顺序。
  • 再次检查元素是否有序。
  • 如果有序,排序成功,否则继续重复上述步骤。
下载地址:https://idea-instructions.com/bogo-sort/

二分查找

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

  • 限定元素区间。
  • 待查找元素在区间的某个位置吗?
  • 不在。
  • 那么看看待查找元素是不是在当前位置的左边或者右边。
下载地址:https://idea-instructions.com/binary-search/

归并排序

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

  • 把元素分成两部分,对每一个部分采用递归的归并排序。
  • 比较已经排好序的元素。
  • 合并已经排好序的元素。
  • 排序完毕。
下载地址:https://idea-instructions.com/merge-sort/

平衡二叉树

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


以图中的平衡二叉树为例:
  • 左子节点比父节点小,而父节点比右子节点小。如果根节点左右子树的高度差超过 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,破坏了树的平衡,这个时候需要通过旋转恢复树的平衡。
下载地址:https://idea-instructions.com/avl-tree/

图遍历

图遍历算法会遍历图中所有可达的顶点,可以通过辅助数据结构来实现各种遍历,比如使用无序集合实现随机遍历,使用堆栈实现深度优先遍历,使用队列实现广度优先遍历。

  • 随机查找:选定一个顶点,把它放入一个无序集合中。从集合中取出一个顶点,访问该顶点,把该顶点的相邻顶点放入集合中,并把该顶点移出集合。重复这一过程,直到集合中的元素全部被遍历完毕。
  • 深度优先遍历:选定一个顶点压入栈中,把该顶点其中的一个相邻顶点也压入栈中。访问栈顶的顶点,如果该顶点没有其他相邻的顶点,就出栈。如果有其他相邻顶点,就把其中的一个相邻顶点压入栈中。重复这一过程,直到栈中的元素全部被遍历完毕。
  • 广度优先遍历:选定一个顶点,把该顶点的相邻顶点放进队列尾部。访问队列头部的顶点,把该顶点移出队列,如果该顶点有相邻顶点,就把相邻顶点放进队列尾部。重复这一过程,直到队列中的元素全部遍历完毕。
下载地址:https://idea-instructions.com/graph-scan/

一笔画

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

  • 顶点度数表示该顶点有几条边。
  • 如果图中有且仅有两个顶点的度数为奇数,其他为偶数,或者不存在奇数度数的顶点,则存在欧拉路径。
  • 选定一个顶点开始画路径。
  • 如果存在两个以上的桥,那么可以走桥。如果只剩下一个桥,就不能走桥,除非只剩下桥可以走。
  • 如果还有没有走过的边,重复步骤 4。
  • 成功画出欧拉路径。
下载地址:https://idea-instructions.com/euler-path/
原文链接:https://idea-instructions.com/
  • 大小: 85 KB
  • 大小: 68.4 KB
  • 大小: 90 KB
  • 大小: 73.9 KB
  • 大小: 113.6 KB
  • 大小: 89.9 KB
  • 大小: 121.8 KB
  • 大小: 110.2 KB
来自: InfoQ
2
0
评论 共 4 条 请登录后发表评论
4 楼 mmmzzc 2018-07-02 16:51
果然文如标题啊~
文科生能看懂,我这个写了几年代码的码农,文学素养不够,真心看不懂~
3 楼 Miaonly 2018-04-20 09:50
图很形象,容易懂
2 楼 somefuture 2018-04-19 13:12
画的太有意思了
1 楼 jy03100000 2018-04-17 20:09
我个写bug的都看不懂

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Python机器学习,你怎么可以不EM算法

    EM算法: 最大期望算法是一类通过迭代进行极大似然估计的优化算法,通常作为牛顿迭代法的替代,用于对包含隐变量或缺失数据的概率模型进行参数估计。 在进行了解之前,我们先通过一个抛硬币的经典例子来解释EM算法的由来: 现在我们有两枚硬币 A 和 B,这两枚硬币和普通的硬币不一样,他们投掷出正面的概率和投掷出反面的概率不一定相同。 我们将 A 和 B 投掷出正面的概率分别记为θA和θB。独立地做 5 次...

  • 趣味图解编程算法文科生都看

    快速排序 快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。 随机选择“分区点”。 按照“分区点”的高度划条线。 高出“分局点”的元素需要向右移动。 低于“分区点”的元素需要向左移动。 移动元素。 重复上述的步骤分别对位于“分区点”两边的元素进行排序 Bogo 排序 Bogo 排序也被称为“愚蠢的排序”,是一种非常简单但低效的排序算法,就是不断打乱元素的...

  • 你一定能看算法基础书《算法图解

    你一定能看算法基础书 代码示例基于Python 400多个示意图,生动介绍算法执行过程 展示不同算法在性能方面的优缺点 教会你用常见算法解决每天面临的实际编程问题 本书易于理解,没有大跨度的思维跳跃,每次引入新概念时,都立即进行诠释,或者指出将在什么地方进行诠释。核心概念都通过练习和反复诠释进行强化,以便你检验假设,跟上步伐。书中使用示例来帮助理解。我的目标是让你轻松地理解这些概念,...

  • 算法图解

    注:此文主要用于《算法图解》一书各章节知识点概述。 第一章: 二分查找算法O(logn) 算法程序: 简单查找算法O(n) 大O运行时间: O(logn) < O(n) < O(nlogn) < O(n2) < O(n!) 先排序,再查找 第二章: 数组:适用于读取很多 读取O(1) 插入O(n) 删除O(n) 链表:适用于插入很多 读取O(n) 插入O(1)...

  • 算法图解的思维导图

    算法图解思维导图算法图解思维导图 算法图解思维导图 算法图解是一本算法入门的书了,最近花了2天,过了一遍,用思维导图的方式记录下来了; 算法就是针对某一问题场景的流程。是完成任务的一组指令。所以重点在于问题场景。。。 这本书讲了:常用算法的复杂度;递归与循环(递归的基线条件和循环条件,思想来自于归纳);图,广度优先搜索,迪克斯特拉算法;近似算法,贪婪算法;10种具体问题域的算法。 详细参见思维导图...

  • 算法图解第八章笔记与习题(贪婪算法

    算法图解第八章笔记与习题(贪婪算法) 文章目录算法图解第八章笔记与习题(贪婪算法)8.1 贪婪算法8.2 集合覆盖问题8.3 NP完全问题8.3.1 旅行商问题:8.3.2 如何识别NP完全问题8.4 小结练习习题8.1:习题8.2:习题8.3-5题干:习题8.3:习题8.4:习题8.5:习题8.6:习题8.7:习题8.8: 算法图解pdf百度云链接,提取码:jttg 8.1 贪婪算法 贪婪算法...

  • 算法图解第十章笔记与习题(KNN算法

    算法图解第十章笔记与习题(KNN算法) 文章目录算法图解第十章笔记与习题(KNN算法)10.1 KNN算法10.2特征提取10.3 回归10.4 小结练习习题10.1:习题10.2:习题9.3: 算法图解pdf百度云链接,提取码:jttg 10.1 KNN算法 KNN(k-nearest neighbours)算法,意为:根据K个最近邻居的属性来认定该节点的属性。 KNN算法可以用于分类问题,也...

  • 算法算法图解

    最近看了一本算法入门书——算法图解。封面的插画很好玩儿。最吸引我的还是封面里的一句话:向小说一样有趣的算法入门书。上个封面,大家感受一下: ? ? ? ? 小说对我来说吸引力是很大的,属于开个头儿就停不下来那种,不看完就难受,熬夜通宵的情况也不是没有(年轻不事,熬夜坏身体)。算法是啥,跟数据结构一样抽象难啊。难道算法真的也能像小说一样吸引人吗?当时我翻开目录:恩,很全,看的话会学到很

  • 算法图解 总结 及pdf文档下载

    ### 更新:没有想到会有小阔爱看...虽然人数不多但也很欣慰,特更新附上pdf文档《算法图解》: 链接:https://pan.baidu.com/s/1c7xsngUuA5kB1DnqmTGvAw 提取码:vww1 (话说 如果对小阔爱有用的话 可以帮我点一下旁边的小手手吗?) ### ##定义:算法指的是解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统...

  • 算法图解》PDF高清完整版

    下载地址:https://u20150046.ctfile.com/dir/20150046-34258809-1d93c4/ 算法图解 示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决...

  • 算法图解--python

    最近拿算法图解重新温习了一下算法,这本书真的非常适合入门,把比较简单算法细节和思路讲的非常清楚。 果然入门计算机语言就该学python。 大学里面一上来就C++太苦逼了。 ? ? ? ? 然后是第一次强烈的感受到Python解题的魅力。之前学python的时候,觉得不用定义就直接使用很变扭,还有就是可以灵活的使用各种数据结构,也是有点不适应。因为一开始学的就是C++,之前算法和数据结构都是用C...

  • 算法图解第十一章笔记(接下来如何做)

    算法图解第十一章笔记(接下来如何做) 文章目录算法图解第十一章笔记(接下来如何做)11.1 树11.2反向索引11.3 傅里叶变换11.4 并行算法11.5 MapReduce11.6 布隆过滤器和HyperLogLog11.7 SHA算法11.8 局部敏感的散列算法11.9 Diffie-Hellman 密钥交换11.10 线性规划 算法图解pdf百度云链接,提取码:jttg 11.1 树 对...

  • 算法图解第九章笔记与习题(动态规划)

    算法图解第九章笔记与习题(动态规划) 文章目录算法图解第九章笔记与习题(动态规划)9.1 动态规划9.2 背包问题FAQ9.3 最长公共子串9.3.1 最长公共子序列9.3.2 动态规划的应用9.4 小结练习习题9.1:习题9.2:习题9.3: 算法图解pdf百度云链接,提取码:jttg 9.1 动态规划 十分详细的动态规划漫画图解。 动态规划对每个单元格计算其最大价值的公式为: 9.2 背...

  • 算法图解》示例代码的实现

    这几天看了《算法图解》,把里面的示例代码都实现了一边,在 github 上找到了一位朋友的仓库,fork 了他的。 里面有我们添加的 Python,Java,C++的实现,欢迎大家 fork!!! 附上网址:https://github.com/lynxux/AlgorithmDiagram

  • 算法图解part8:贪婪算法

    算法图解part8:贪婪算法

  • 算法图解第七章笔记与习题(狄克斯特拉算法

    算法图解第七章笔记与习题(狄克斯特拉算法) 文章目录算法图解第七章笔记与习题(狄克斯特拉算法)7.1 狄克斯特拉(Dijkstra)算法7.2 术语介绍7.3 负权边7.4 实现7.6 小结练习习题7.1: 算法图解pdf百度云链接,提取码:jttg 7.1 狄克斯特拉(Dijkstra)算法 广度优先算法可以找出在最短路径,而狄克斯特拉算法可以找出最快路径。 狄克斯特拉算法包含4个步骤: ??...

  • 算法图解 -- 书评

    算法图解 Grokking Algorithms 作者Aditya Bhargava,美国人。 ? 这本书的定位正如封面副标题所言–像小说一样有趣的算法入门书,作为一本入门级的算法书,这本书无疑是成功的,书中穿插着大量的图解(作者自述自己为一个视觉性学习者),内容简单,将一些经典的算法结合图解以生动有趣的方式向读者讲解,使非程序员的读者也能轻松理解(除了动态规划部分本身就是一个难点)。同时,以小说...

  • 算法图解】 之 [贪婪算法(贪心算法)] 详解

    入门算法学习,看的第一本是深入浅出的《算法图解》一书,本博客是对《算法图解》一书的学习笔记,将书中的分享的算法示例用Python3语言实现。 如果你也想要阅读这本书,百度云盘链接:https://pan.baidu.com/s/1s967vfgEBd1vSrfwVI9Y3g 提取码:【be9k】 或者也可以留言你的邮箱,我将PDF共享给你~ 贪婪算法 贪婪算法(又称贪心算法)是指,在对问题求...

  • 基础算法图解

    一、算法简介 二、选择排序 三、递归 四、快速排序 五、散列表 六、广度优先搜索 七、狄克斯特拉算法 八、贪婪算法 九、近似算法 十、动态规划 十一、K最近邻算法 十二、其他...

  • 算法图解:像小说一样有趣的算法入门书

    内容简介 本书示例丰富,图文并茂,以简明易的方式阐释了算法,旨在帮助程序员在日常项目中更好地利用算法为软件开发助力。前三章介绍算法基础,包括二分查找、大O 表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如何时采用贪婪算法或动态规划;散列表的应用;图算法;K 最近邻算法。 你一定能看算法基础书 代码示例基于 Python ...

Global site tag (gtag.js) - Google Analytics 重庆时时彩怎么作弊的