1.穷举法
穷举法是一种简单、直接地解决问题地方法,是指在问题的解空间范围内逐一测试,找出问题的解的方法。例如:暴力破解法、百鸡百钱问题。
- 基本什么问题都能解决。
- 效率低下,适合求解小规模问题。
- 耗费的时间较高。
2.回溯法
回溯法本质上是一种穷举法,它在问题的解空间中系统地搜索问题的解,通常通过约束条件的判定,排除错误答案等方式提高搜索效率。例如:深度优先遍历、走迷宫问题。
- 其有通用解法之称,当一个问题没有显而易见的解法时,可以尝试使用回溯法。
3.递归
递归是间接或直接地调用自身的算法。例如:斐波那契数列求项、汉诺塔问题。
- 必须要设置终止递归的条件。
- 经常会对某些问题重复调用,导致算法效率不高。
4.分治
分治法将一个复杂的问题分成若干个与原问题同类型的简单子问题进行解决。然后对子问题的结果进行合并,得到原问题的解。例如:二分查找。
- 如果子问题还比较大,可反复使用分治算法,直到最后的子问题可以直接求解。
5.贪心法
贪心法将待求解的问题分解成若干个子问题进行分布求解,且每一步总是做出当前的最好选择,得到局部最优解,再整合为原问题的解。例如:最小生成树。
- 广泛应用于最优化问题中。
6.动态规划
动态规划将待求解的问题划分成若干个阶段,利用各阶段之间存在的联系,按照自底向上的顺序推导出原问题的解。例如:最短路径,关键路径。
- 是求解决策过程最优化的数学方法。
7.迭代
迭代时重复反馈过程的活动,其目的在于逼近所需目标或结果,每一次对过程的重复称为一次迭代。例如:斐波那契求项。
- 每一次迭代得到的结果会作为下一次迭代的初始值。