阅读更多

2顶
0踩

行业应用

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

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

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的都看不懂

发表评论

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

相关推荐

  • [收藏] 趣味算法图解,文科生都看懂了

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

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

    快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。 随机选择“分区点”。 按照“分区点”的高度划条线。 高出“分局点”的元素需要向右移动。 低于“分区点”的元素...

  • 趣味算法图解,文科生都看懂了(转)

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

  • 书单 | 本本经典,学算法就从这里选了!

    最受读者喜爱的算法书Top10TOP3TOP1TOP2算法(第4版)作者:[美]塞奇威克(Robert Sedgewick),韦恩(Kevin Wayne)译者:谢路云算法经典大部头,一本让学渣看懂且学会、不打瞌睡的好书- 算法大家 Sedgewick、Wayne...

  • 这一年,这些书:2021年读书笔记

    无极就是事物的最原始状态,同时也是事物的最崇高状态:无极生太极,太极生两仪,两仪生四象,四象生八卦,八卦演万物,万物回无极。 现在的社会,对强者越来越狠,容忍度越来越低,各种道德审判让他们每天如履薄冰...

  • 优质的计算机专业书籍有哪些?

    5.300多幅算法手绘图解,文科生都能学的懂算法通关书。 操作系统 操作系统导论 主题突出,紧紧围绕操作系统的三大主题元素——虚拟化、并发和持久性。 以对话的方式引入背景,提出问题,进而阐释原理,启发动手实践...

  • 双十二大家都在买哪些书?这份书单请码住

    双十二来啦,这一天也在提醒着我们这一年就要结束了。虽然距离上次买买买才过去不久,...不踩坑、闭着眼睛买,本本都优秀。另外,12.12 图书促销已开启。京东除部分限价图书外,其余图灵图书全场满 100-50,手慢无~

  • 插入篇 |程序员进阶之推荐书目

    所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。不要太在意书写得深浅,重要的是能不能坚持看完。 《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。...

  • 计算机程序设计基础解题与实验(c语言版) 蔡启先 实验5的答案,计算机程序设计基础...

    《21世纪高等学校计算机基础实用规划教材·计算机程序设计基础教程:C语言》以实际问题的求解过程为向导,突出从问题到算法,再到程序的一种思维过程,强调计算机求解问题的思路引导与程序设计思维方式的训练,重点...

  • python人工智能入门书籍推荐-有哪些关于人工智能的书籍可供推荐?

    从零修炼成一名合格的人工智能工程师注定需要很长的路要走。而书籍正是修炼路上的武林秘籍,金庸小说中,武林人士常常会为...本文就分别介绍这四个段位中所需要的“武林秘籍”,为了方便大家,每本书后都附上了电子...

  • 为什么数学不好,和语文有关系?

    ▲点击查看苏步青教授在担任复旦大学校长时曾经说过:“如果允许复旦大学单独招生考试,我的意见是第一堂课就考语文,考后就批卷子。不合格的,以下的功课就不要考了。语文你都不行,别的是学不通的...

  • 8月书讯 | 10 本新书上市,本本精选

    本月 10本新书,本本都是精选。

  • 各领域入门书籍推荐

    你看不懂《时间简史》?!那么就看这本书吧。如果科普都能写成这样,我根本不会读小说。我记得论坛有人做过精校文字版,推荐此版本电子书。 6 、《追寻记忆的痕迹》。 书中作者追溯了维也纳的儿时经历引起他对...

  • node-v10.9.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 塞北村镇旅游网站设计与实现

    城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消费的提高。塞北村镇旅游网站的设计就是帮助村镇发展旅游产业,达到宣传效果,带动一方经济发展。而在线消费与查询正在以高效,方便,时尚等的特点成为广大互联网用户的首选。塞北村镇旅游网站设计与开发以方便、快捷、费用低的优点正慢慢地进入人们的生活。人们从传统的旅游方式转变为在线预览,减轻了劳动者的工作量。使得旅游从业人员有更多时间来获取、了解、掌握信息。 塞北村镇旅游网站根据当地旅游风景和特色的实际情况,设计出一套适合当地旅游信息网站,通过网络,实现该网站的推广从而达到宣传的效果。 本系统在设计方面采用JSP和Java语言以及html脚本语言,同时采用B/S模式,进行各个界面和每个功能的设计与实现,后台管理与设计选用了SQL Server 2005数据库,前台设计与后台管理相结合,共同完成各功能模块的功能。

  • 其他类别Jsp考试系统-jspks.rar

    JSP考试系统_jspks.rar是一个为计算机专业学生和教师设计的JSP源码资料包,它提供了一个全面的、易于使用的在线考试平台。这个系统是基于Java Server Pages (JSP)技术构建的,这是一种用于创建动态网页的服务器端技术。通过这个系统,用户可以创建、管理和参加在线考试。这个系统的主要功能包括:用户注册和登录,试题管理(包括添加、修改和删除试题),试卷管理(包括创建、编辑和删除试卷),考试管理(包括开始、暂停和结束考试),成绩管理(包括查看和统计成绩)等。此外,系统还提供了丰富的试题类型,如选择题、填空题、判断题和简答题等,以满足不同的考试需求。JSP考试系统的界面设计简洁明了,操作方便,无论是教师还是学生都可以轻松上手。对于教师来说,他们可以通过这个系统轻松地管理试题和试卷,节省了大量的时间和精力。对于学生来说,他们可以随时随地参加在线考试,方便快捷。总的来说,JSP考试系统_jspks.rar是一个非常实用的JSP源码资料包,它不仅可以帮助学生更好地学习和掌握JSP技术,也可以帮助教师更有效地管理在线考试。无论是对于学生还是教师,这个系统都是一个不可或缺的工具。重

  • TypeScript-2.4.1.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • Data-Structure-词向量

    词向量

  • node-v10.2.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics