算法(Algorithm)是程序设计的灵魂,它是用系统的方法描述解决问题的策略机制。一个正确的算法满足以下性质:
- 输入:有零个或多个输入。
- 输出:至少有一个输出。
- 确定性:组成算法的每条指令清晰,无歧义。
- 有限性:一个算法在执行有限步骤后必须结束,即计算步骤是有限的。
描述算法可以有多种方式,如自然语言、流程图、伪代码、程序设计语言。 算法设计就是针对具体的问题,设计出良好的算法,使计算机能够解决该问题。 同一个问题可以采用不同的算法实现,不同的算法可能时间、空间并不相同, 一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
本篇将以讲述设计中经常采用的排序算法、查找算法、迭代算法、递推算法、递归算法、枚举算法、贪心算法、 回溯算法、矩阵算法等,如下所示:
- 排序算法:按照关键字的大小使元素递增或递减排列
- 查找算法:分为线性查找和非线性查找
- 递推算法:分为顺推法和逆推法
- 迭代算法:分为精确迭代和近似迭代
- 递归算法:自己调用自己,采用分治策略,将问题规模减小,各个击破
- 枚举算法:从众多的候选解中找出候选答案,逐个验证
- 贪心算法:不求最优,但求找到满意的解
- 回溯算法:试探法,根据当前的情况决定向前试探扩大问题规模还是回溯返回上一步
- 矩阵算法:利用元素值和下标之间的关系