算法
算法是对问题求解步骤的描述,通过有限序列的指令来实现。
通俗来说,算法就是计算机解决问题的方法和技巧。
通常,算法都具备以下五种特性:
有穷性
有限步
之后结束,不会出现无线循环。
确定性
算法的每条指令都有明确的意义,不会产生二义性。
可行性
算法在当前环境条件下可以通过有限次运算实现。
比如受限于计算机的计算能力,有些算法虽然理论上可行,但实际上无法完成。
输入
能被计算机处理的各种类型的数据,如数字、音频、图像等。
输出
一至多个程序输出结果。
算法设计的要求
算法不是唯一的,也就是说同一个问题可以有多种解决问题的算法。
设计一个好的算法,需要满足 5 点要求:
正确性
算法至少具备输入输出和加工处理无歧义,能正确反应问题的需求,能够得到问题的正确答案。
大体分为 4 个层次:
- 算法程序没有语法错误
- 算法程序对于合法输入能够产生满足要求的输出
- 算法程序对于非法输入能够产生满足规格的说明
- 算法程序对于故意刁难的测试输入都有满足要求的输出结果。
可读性
算法设计的另一目的是为了便于阅读、理解和交流。
健壮性
当输入数据不合法时,算法也能做出相关的处理,而不是产生异常、崩溃或莫名其妙的结果。
时间效率高和存储量低
好算法应该具备时间效率高和存量低的特点。
算法复杂度
算法的复杂度研究的是算法随着输入规模的扩大增长量的一个抽象,而不是精确定位算法需要执行多少次。
所以判断一个算法的效率时,函数中的常熟和其他次要项可以忽略,应该关注主项(最高项)的阶数。
时间复杂度
- 用来衡量算法随着问题规模增大,算法执行时间
增长的快慢
的一个函数。 - 时间复杂度是问题规模的函数: 记作 T(n),时间复杂度主要分析 T(n)的
数量级
。 - T(n) = O(f(n))。
f(n)是算法中基本运算的频度,一般考虑最坏情况下的时间复杂度。
空间复杂度
- 衡量算法随问题规模增大,算法所需
空间
的增长的快慢。 - 是问题规模的函数: S(n) = O(g(n))。