八大常用算法思想

一文图解弄懂八大常用算法思想! - 知乎 (zhihu.com)

https://zhuanlan.zhihu.com/p/161989297

1枚举

解决问题的「可能解/候选解」的筛选条件——「可能解」之间相互的影响,穷举「可能解」的代价——[可能解」的穷举方式

2递推

从已知条件出发,逐步推算出问题的解

(1) 根据已知结果和关系,求解中间结果。

(2)判定是否达到要求,如果没有达到,则继续根据已知结果和关系求解中间结果。如果满足要求,则表示寻找到一个正确的答案。

注意

递推算法需要知道解和问题之间的逻辑关系。

在许多数学问题中,有明确的计算公式可以遵循,可以采用递推算法来实现

3递归

递归算法实际上是把问题转化成规模更小的同类子问题,先解决子问题,再通过相同的求解过程逐步解决更高层次的问题,最终获得最终的解(一个套娃过程)

递归算法是一种直接或者间接调用自身函数或者方法的算法。

① 递归过程一般通过函数或子过程来实现。

② 递归算法在函数或子过程的内部,直接或者间接地调用自己的算法。

③ 递归算法实际上是把问题转化为规模缩小了的同类问题的子问题,然后再递归调用函数或过程来表示问题的解。

注意

① 递归是在过程或函数中调用自身的过程。

② 在使用递归策略时,必须有一个明确的递归结束条件,这称为递归出口。

③ 递归算法通常显得很简洁,但是运行效率较低,所以一般不提倡用递归算法设计程序。

④ 在递归调用过程中,系统用栈来存储每一层的返回点和局部量。如果递归次数过多,则容易造成栈溢出,所以一般不提倡用递归算法设计程序

4分治

一是分,二是治

从最高级层层划分,将子任务划分给不同的子模块,进而可以进行大问题的拆分,对系统问题的粒度进行细化,寻求最底层的最基本的解。

① 分解,将要解决的问题划分成若干个规模较小的同类问题。

② 求解,当子问题划分得足够小时,用较简单的方法解决。

③ 合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

浅谈什么是分治算法 (qq.com)

5动态规划

问题划分为多个子问题,但是子问题之间往往不是互相独立的

问题按照一定顺序划分为各个阶段

确定每个阶段的状态

有了四步解题法模板,再也不害怕动态规划!_吴师兄学算法 (cxyxiaowu.com)

(再进阶版)有了四步解题法模板,再也不害怕动态规划!_吴师兄学算法 (cxyxiaowu.com)

6贪心

贪心算法在执行的过程中,每一次都会选择最大的收益,但是总收益却不一定最大(不从整体最优上考虑问题,仅考虑某种意义上的局部最优求解)

实现过程:

(1)从问题的某一初始解出发。

(2)while能向给定总目标前进一步。

(3)求出可行解的一个解元素。

(4)由所有解元素组合成问题的一个可行解

7回溯

(试探算法)

回溯的过程就是在做出下一步选择之前,先对每一种可能进行试探;只有当可能性存在时才会向前迈进,倘若所有选择都不可能,那么则向后退回原来的位置,重新选择(类似进的过程中对所有可能性进行枚举并判断)

① 针对所给问题,定义问题的解空间。

② 确定易于搜索的解空间结构。

③ 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

常用的应用场景就在对树结构、图结构以及棋盘落子的遍历上

8模拟

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值