假设我们有一个难题需要解决,那怎么解决呢?解决的步骤怎样呢?如果有一样东西能把这个解决这个难题的步骤描述出来,那就叫做这个问题的算法。 你看,如果我们学习算法的话其实学习的是解决问题的步骤,无论我们从事哪个行业学一下算法都是很有帮助的。 算法解决问题的步骤 01 算法概念的理解算法可以很复杂也可以很简单 百度百科上对算法的定义:
为什么算法是解题方案的准确、完整的描述,而且还要清晰的指令呢?因为绝大多数算法最终需要转换成计算机程序给计算机执行的,而计算机是比较死板的。更直白地讲,算法呢大多数时候是充当了人和计算机之间的一种“翻译”的角色。 那么我们用什么方法或者是工具来准确、完整、清晰的描述解题方案呢?也就是说,我们用什么方法来描述算法呢? 给人看的算法呢,经常采用三种方式来描述它:
流程图的符号描述 一段求三个数中最大数的伪代码 02 一个典型算法的例子其实我们碰到的很多问题,在不同的时间、不同的地点可能已经有另外的一些人碰到过很多很多次了。所以呢,就有很多很经典的算法,我们如果认真的研究一下这些算法,你会觉得比打游戏打怪升级还更有意思。比如下面这张图里几种常见的排序算法,所谓排序算法就是给计算机一组杂乱无章的数,让它帮我们从小到大或者从大到小排列起来。 排序算法最常见的应用就是,期末考试的时候我们老师把每个同学的成绩都输入给计算机,计算机能帮我们把这些成绩排个序。想象一下,如果是全国统考的高考,全国那么多考生的成绩排序,如果是人工排的话那得多大的工作量?光中午管盒饭也不老少啊! 常见的几种经典排序算法 我们以上图中的第一种冒泡排序为例来说明一下算法,及其描述。 如果我们用自然语言来描述冒泡排序是这样的:
你如果看上面这段名字可能有点懵逼,如果带入一个问题场景来理解冒泡排序可能会容易的多。 比如说,我们有一组10个同学到操场集合站成一列,这个时候体育老师来了说:“大家按照身高从低到高排好!” 那怎么排列呢?那这个时候呢就可以这样来看:
如果这样的冒泡算法用流程图来表示,是怎样的呢? 一个100个数的数组的冒泡排序 流程图呢,其实是计算机专业的或者相近专业的人才看的东东。普通人要想看明白它呢,也很简单。首先,找到“开始”,然后顺着箭头一路向下,如果碰到一个菱形就是一个分支,这个棱形里面呢是一个条件,所谓条件就是满足条件结果为真、不满足为假,然后从棱形出来就要根据这个条件的取值选择走哪条,如果是走回头路的话就变成了一个循环,所以那你就带着一个值慢慢跟着箭头走,很容易搞明白。 03 怎样评价算法的好坏?俗话说“条条大路通罗马”,但是呢并不是每条路都那么好走的。有些路比较好找,但是需要走的时间长;有些路可以很快到达,但是很难走;有些路理论上能到达目的地,但是实际上几乎相当于死路走不通。这样的话呢,不同的衡量标准下呢这不同的路就有了好坏之分。 那么解题的算法也是一样,同一个问题可能有很多个算法,就像我们在02里看到的排序算法。那么,这么多算法,我们有没有什么标准可以评价他们的好坏呢?答案是肯定的。 主要从几个方面来衡量一个算法的优劣:
好了,关于算法的理解入门,石头就说这么多了。 |
|