五大常用算法分别由分治法,动态规划,回溯法,分直界限法,贪心算法
1.分治法
基本思想:
分治法就是将问题分为一个一个相同和相识的独立问题,子问题(常用递归)分别解决后,最终再进行合并
主要性质:
子问题相互独立
子问题可合并出原问题的解
常用实例:
二分查找法
快速排序法
合并排序法
2.动态规划
基本是想:
将问题分为一个一个阶段的子问题,未解决的子问题需要在已解决的子问题的基础上求得,动态规划一定会有一个边界
主要性质:
每个子问题都死全局最优结构
无后效性,某个状态只要确定后便不受接下来决策的影响
由重叠的子问题
标注:
动态规划问题,一定要先找到递推方程,然后根据递推方程求解,逐渐推出最终结果
3.回溯法:
基本思想:
回溯法又称试探法,是一种选优搜索法,按选优条件向前搜索,以达到目标。回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案
常用实例:
深度优先搜索(栈或递归//递归是隐式的栈)
BF字符串匹配算法
KMP算法
4.分支界限法
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
常用实例:
广度优先搜索(队列)
5.贪心算法
基本思想:
将问题分为一个一个阶段的子问题,下一个问题的解决必须要在上一个问题解决的基础之上,从初始状态逐渐逼近最终状态
主要特性:
局部最优解能导致全局最优解
子问题无后效性