一文图解弄懂八大常用算法思想! - 知乎 (zhihu.com) https://zhuanlan.zhihu.com/p/161989297 | |
1枚举 | 解决问题的「可能解/候选解」的筛选条件——「可能解」之间相互的影响,穷举「可能解」的代价——[可能解」的穷举方式 |
2递推 | 从已知条件出发,逐步推算出问题的解 |
(1) 根据已知结果和关系,求解中间结果。 (2)判定是否达到要求,如果没有达到,则继续根据已知结果和关系求解中间结果。如果满足要求,则表示寻找到一个正确的答案。 | |
注意 递推算法需要知道解和问题之间的逻辑关系。 在许多数学问题中,有明确的计算公式可以遵循,可以采用递推算法来实现 | |
3递归 | 递归算法实际上是把问题转化成规模更小的同类子问题,先解决子问题,再通过相同的求解过程逐步解决更高层次的问题,最终获得最终的解(一个套娃过程) |
递归算法是一种直接或者间接调用自身函数或者方法的算法。 | |
① 递归过程一般通过函数或子过程来实现。 ② 递归算法在函数或子过程的内部,直接或者间接地调用自己的算法。 ③ 递归算法实际上是把问题转化为规模缩小了的同类问题的子问题,然后再递归调用函数或过程来表示问题的解。 | |
注意 ① 递归是在过程或函数中调用自身的过程。 ② 在使用递归策略时,必须有一个明确的递归结束条件,这称为递归出口。 ③ 递归算法通常显得很简洁,但是运行效率较低,所以一般不提倡用递归算法设计程序。 ④ 在递归调用过程中,系统用栈来存储每一层的返回点和局部量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序。 | |
4分治 | 一是分,二是治 从最高级层层划分,将子任务划分给不同的子模块,进而可以进行大问题的拆分,对系统问题的粒度进行细化,寻求最底层的最基本的解。 |
① 分解,将要解决的问题划分成若干个规模较小的同类问题。 ② 求解,当子问题划分得足够小时,用较简单的方法解决。 ③ 合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。 | |
5动态规划 | 问题划分为多个子问题,但是子问题之间往往不是互相独立的 |
问题按照一定顺序划分为各个阶段 确定每个阶段的状态 | |
6贪心 | 贪心算法在执行的过程中,每一次都会选择最大的收益,但是总收益却不一定最大(不从整体最优上考虑问题,仅考虑某种意义上的局部最优求解) |
实现过程: (1)从问题的某一初始解出发。 (2)while能向给定总目标前进一步。 (3)求出可行解的一个解元素。 (4)由所有解元素组合成问题的一个可行解 | |
7回溯 (试探算法) | 回溯的过程就是在做出下一步选择之前,先对每一种可能进行试探;只有当可能性存在时才会向前迈进,倘若所有选择都不可能,那么则向后退回原来的位置,重新选择(类似进的过程中对所有可能性进行枚举并判断) |
① 针对所给问题,定义问题的解空间。 ② 确定易于搜索的解空间结构。 ③ 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 | |
常用的应用场景就在对树结构、图结构以及棋盘落子的遍历上 | |
8模拟 |
|
八大常用算法思想
最新推荐文章于 2023-10-13 14:39:20 发布