算法(algorithm)
算法基础总览
算法不是随意的一串步骤,而是一组能够被计算机执行、能够在有限资源内解决问题的明确指令。 学习算法,既要理解它“是什么”,也要理解它“好不好”、以及“怎样表达”。
算法是什么
在计算机科学中,算法是指一组计算机可运行的有限指令, 能够在有限的空间和时间内,通过计算、数据处理、逻辑推理等方式解决某种问题。
换句话说,算法就是“解决问题的方法”,但这种方法不能模糊,必须足够清楚, 让计算机能够照着一步一步执行出来。
怎样衡量算法优劣
比较算法时,通常不会只看“能不能做出来”,更重要的是看它需要花多少时间、占多少空间。
时间复杂度
描述算法运行时,执行步骤随数据规模增长而变化的快慢。它反映“做这件事要花多久”。
空间复杂度
描述算法在运行过程中,额外占用存储空间随数据规模增长而变化的情况。它反映“要占多大地方”。
同样解决一个问题,不同算法的消耗可能差很多。下面用示意条形图展示“数据变大后,代价也会变化”。
算法的五大特征
一个真正合格的算法,通常要同时满足下面五个条件。少了其中某一项,它就很难称为规范的算法。
有输入
算法可以有若干输入项,也可以没有输入,但输入的形式必须明确。
有输出
算法必须产生至少一个输出结果,否则就无法体现“解决了什么问题”。
确定性
同样的输入,应当得到确定的处理过程和结果,不能模糊不清、含糊不定。
有穷性
算法必须在有限步骤、有限时间、有限空间内结束,不能无限运行下去。
可实现
算法必须能够用计算机语言描述并执行,而不只是停留在抽象想法上。
算法如何描述
设计算法之后,还需要把它清楚地表达出来。常见的描述方式有三种,各自适合不同场景。
自然语言
最容易理解,适合入门和口头说明,但如果步骤多,容易出现歧义,不够严格。
流程图
用图形符号展示执行流程,结构直观,特别适合讲解判断、循环和整体过程。
伪代码
介于自然语言和程序代码之间,既保持清晰结构,又不受具体编程语言限制。
