zoukankan      html  css  js  c++  java
  • 面试问题之数据结构与算法:动态规划、分治法、贪心法的应用场景

    动态规划算法、分治法与贪心法都应用于:大问题可以分解为子问题求解的题目

    一、分治法:

      分治法容易理解,主要思想是:将大问题分解成子问题,求解出不同子问题的解,由各个子问题的解得到最终解。所有的子问题可能相关,也可能不相关,如果子问题相关,则求解子问题的解时,会重复计算,进行不必要的计算,这时应该考虑下面的动态规划算法。如果不相关用分治法最好,不会进行多余的计算。由不同的子问题求最终问题的解,这是自底向上的方法。

    二、贪心法

      贪心法的主要思想是:在对问题求解时,总是做出在当前看来是最好的选择,也就是说,不从整体最优上加以考虑,他所做的是在某种意义上的局部最优解。贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。一般是一维问题。

    三、动态规划

      与贪心法类似:大问题的解包含其子问题的解,每一步由子问题向最终问题靠近时,保留子问题的解,以供使用。一般是二维问题。动态规划算法通常用于求解具有某种最有性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。不同于分治法的是,子问题有相关性,一般需要保存子问题的解以供下面的求解使用。

  • 相关阅读:
    hdu1403(后缀数组模板)
    输入外挂模板
    hdu2896(ac自动机)
    hdu2222(ac自动机模板)
    codevs1169, 51nod1084(多线程dp)
    codevs3027(dp)
    codevs1068(dp)
    大数乘法模板
    Java锁--框架
    Java并发包--ConcurrentLinkedQueue
  • 原文地址:https://www.cnblogs.com/yichengming/p/11469031.html
Copyright © 2011-2022 走看看