1. 递推算法
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
- 顺推法:是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。
- 逆推法:是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
2. 枚举/穷举算法
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
(1)可预先确定候选答案的数量;
(2)候选答案的范围在求解之前必须有一个确定的集合。
3. 递归算法
一种直接或者间接地调用自身的算法。递归算法的具体实现过程一般通过函数或子过程来完成,在函数或子过程的内部,编写代码直接或者间接地调用自己,即可完成递归操作。
- 求阶乘、进制转换
4. 分治算法
(1)分解:将要求解的问题划分成若干规模较小的同类问题;
(2)求解:当子问题划分得足够小时,用较简单的方法解决;
(3)合并:按求解问题的要求,将子问题的解逐层合并,即可构成最终的解。
5. 贪婪算法
从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。当达到算法中的某一步不能再继续前进时,就停止算法,给出近似解。
由贪婪算法的特点和思路可看出,该算法存在以下问题:
- 不能保证最后的解是最优的;
- 不能用来求最大或最小解问题;
只能求满足某些约束条件的可行解的范围
6. 试探算法
为了求得问题的解,先选择某一种可能情况进行试探,在试探过程中,一旦发现原来的选择的假设情况是错误的,就退回一步重新选择,继续向前试探,如此反复进行,直至得到解或证明无解。
7. 模拟算法
在程序设计语言中,可使用随机函数来模拟自然界中发生的不可预测情况
网友评论