如何才能记住各种算法?

这个问题问得很好,我那时候也是有着困惑。没入门的话,先看看几大经典的排序算法(直接插入,希尔排序,简单选择,堆排序,冒泡排序,快速排序,归并排序,基数排序),可以把代码背诵下来,然后复现。但最好理解代码背后的数学逻辑,当你使用这些基础算法的时候,脑海里有个图浮现出来,然后你在这上面完善它整个算法流程。

我那时候学习的方法是用扑克牌来学习经典算法,后面熟了之后就可以在代码上快速复现它。不积跬步,无以至千里;不积小流,无以成江海。现在有个网站是可以用动画学习算法和数据结构——VisuAlgo。VisuAlgo是由Steven Halim博士在2011年发布的一款可视化学习算法的工具,用于帮助其学生更好地理解数据结构和算法,可以让学生按自己的步骤来学习。

下图是VisuAlgo的主页,不得不说我上去体验后感觉很有趣,很适合对基础算法的学习和了解,是一个找到后令人惊喜的网站。VisuAlgo里面包含了许多先进的算法,这些算法在Steven Halim博士的书籍里都有讨论。就某种意义而言,这些先进的算法可视化/动画基本只能在VisuAlgo中找到。例如在图遍历可视化中,里面不仅标准的深度优先搜索(DFS)和广度优先搜索(BFS)算法,还包含了它们的变异。

之前没有这个网站时我是用笔和扑克牌来理解算法的,现在工具方便了,但是道理还在那。知识的体系结构类似一棵树,如果你想要学得快记得牢固,就必须把主干和粗线条先学习扎实,因为后来的高级知识类似树叶,需要有主干的支持才能挂靠牢固。如果你对学习人工智能和深度学习感兴趣,可以订阅我的头条号,我会在这里发布所有与算法、机器学习以及深度学习有关的有趣文章。

你是怎么理解算法的,在生活中你的最常用的算法是怎么运作的?

概念算法(Algorithm)是基于特定的计算模型, 旨在解决某一信息处理问题而设计的一个指令序列。不正式地说,算法是任何定义明确的计算过程,该过程取某个值或值的集合作为输入,并产生某个值或值的集合作为输出,算法就是这样的把输入转换成输出的计算步骤的一个序列。[1]必备特征算法必须具有以下特征:输入:待计算问题的任一实例,都需要以某种方式交给对应的算法,对所求解问题特定实例的这种描述统称为输入;输出:经计算和处理之后得到的信息,即针对输入问题实例的答案,称作输出;确定性:算法应可描述为由若干语义明确的基本操作组成的指令序列;可行性:每一基本操作在对应的计算模型中均可兑现;有穷性:任意算法都应在执行有限次基本操作之后终止并给出输出。

实际例子算法不是计算机领域中才有的概念,不仅仅局限于编程语言,它可以用任何方式来描述,比如对于问题:过直线l上给定的点P,作该直线的垂线。古埃及人解决该问题的一个算法为:输入:直线l及其上一点P输出:经过P且垂直于l的直线1. 取12段等长绳索,依次首尾联结成环,联结处称作“结”,按顺时针方向编号为0到112. 奴隶A看管0号结,将其固定于点P处3. 奴隶B牵动4号结,将绳索沿直线l方向尽可能地拉直4. 奴隶C牵动9号结,将绳索尽可能地拉直5. 经过0号和9号结,绘制一条直线计算机中的算法则是描述计算机上的计算过程,比如插入排序算法的伪代码描述:输入:n个数的一个序列


文章TAG:算法  排序  经典  十大  常用  
下一篇