经典算法总结

一、递归

1、基本思想

  递归算法将一个不好解决的大问题转化为若干小问题,再把这些小问题进一步分解为更小的小问题,直至每个小问题可以直接解决为止。

【Note】:
(1)递归体:使问题向边界条件转化的过程;
(2)边界条件:程序终止的条件,也称为递归出口。

2、应用

  示例:阶乘、斐波纳契数列、汉诺塔问题。

二、分治

1、基本思想

  待解决复杂的问题能够简化为几个若干个小规模相同的问题,然后逐步划分,达到易于解决的程度,最后合并子问题得到原问题的解。

【Note】:
(1)将原问题分解为n个规模较小的子问题,各子问题间独立存在,并且与原问题形式相同;
(2)递归的解决各个子问题;
(3)将各个子问题的解合并得到原问题的解。

2、应用

  示例:归并排序、快速排序、最近点对。

三、动态规划

1、基本思想

  动态规划与分治法相似,都是组合子问题的解来解决原问题的解,与分治法的不同在于:分治法的子问题是相互独立存在的,而动态规划应用于子问题重叠的情况。
  动态规划方法通常用来求解最优化问题,这类问题可以有很多可行解,每个解都有一个值,找到具有最优值的解称为问题的一个最优解,而不是最优解,可能有多个解都达到最优值。

【Note】:
(1)如果可以把局部子问题的解结合起来得到全局最优解,那这个问题就具备最优子结构 ;
(2)如果计算最优解时需要处理很多相同的问题,那么这个问题就具备重复子问题。

2、应用

  示例:0-1背包问题,最长公共子序列,连续最大和等。

四、贪心

1、基本思想

  贪心算法是就问题而言,选择当下最好的选择,而不从整体最优考虑,通过局部最优希望导致全局最优。

【Note】:
(1)贪心选择性质:可以通过局部最优选择来构造全局最优解。换言之,直接做出在当前问题中看来最优的选择,而不必考虑子问题的解;
(2)最优子结构:一个问题的最优解包含其子问题的最优解。

2、应用

  示例:背包问题,最短路径,最小生成树。

五、回溯

1、基本思想

  回溯法是一种搜索算法,从根节点出发,按照深度优先搜索的策略进行搜索,到达某一节点后 ,探索该节点是否包含该问题的解,如果包含则进入下一个节点进行搜索,若是不包含则回溯到父节点选择其他支路进行搜索。

【Note】:
(1)针对所给的原问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数除去无效搜索。

2、应用

  示例:背包问题,旅行商问题,八皇后问题。

转自:https://www.cnblogs.com/bulingpan/p/6416362.html

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/80766147
今日推荐