经典算法之动态规划、分治、和贪心

1、分治

     分治(即分而治之),把一个复杂的问题分成多个相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

     适用场景:二分搜索、归并排序、快速排序、大整数乘法、第K小元素、最近点对、快速傅里叶变换等。

  

2、动态规划

       动态规划法也是把问题一层一层地分解为规模逐渐减小的同类型的子问题。动态规划通常用来求最优化问题。此类问题可以有很多可行解,我们求出的是一个最优解,可能存在多个最优解。(最优子结构、公共子问题

       与分治法的区别是:分治的子问题是相互独立的,动态规划最好解决有公共子问题的,子问题相关性很大。

       使用场景:矩阵连乘、钢条切割、最长公共子序列、最优二叉搜索树、流水作业调度、0/1背包问题等。

3、贪心

      通过局部最优选择达到全局最优选择。贪心算法不一定总产生最优解,贪心算法是否产生优化解,需严格证明贪心算法产生最优解的条件:(最优子结构、贪心选择性)

     贪心选择性:当一个问题的全局最优解可以通过局部最优解得到,称这个问题具有贪心选择性。

     适用场景:活动选择问题、哈夫曼编码问题、最小生成树问题、单源最短路径问题等。

未完。。

猜你喜欢

转载自blog.csdn.net/sinat_41144773/article/details/89711899