zoukankan      html  css  js  c++  java
  • 关于动态规划与分治的问题

        在面试中,我们经常会被问到动态规划跟分治有什么区别这个问题。它们的基本思想都是把一个大问题划分成子问题,通过子问题的解来得到整体的解。那么它们的区别在哪里呢?总不会没区别吧,不然名字怎么不一样。

        区别在于,分治是把问题划分成了互不相交的子问题,再将它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的更小的子问题,而且,动态规划通常会将求到的子问题的解保存起来,从而保证每个子问题只求解一次。在这种情况下,分治算法就会做许多不必要的工作,它会反复求解那些公共的子问题。举个例子,汉诺塔问题是一个典型的动态规划问题,例如我们要求解的问题是f(n),我们会通过f(n-1)的解得到f(n)的解,而f(n)和f(n-1)包含了公共的更小的子问题,例如f(1),f(2),f(3).....例如归并排序是一个典型的分治问题,假如现在要对一个A[1,n]的集合进行排序,那么就需要把这个集合先划分成两个子集A[1,n/2],A[n/2+1,n],然后分别对这两个子集排序,最后合并两个有序的子集,所以我们可以看到,我们在子集里面对一个元素排序之后,还要在合并这些子问题的过程中对这些元素再排一次序,这就是分治会反复求解子问题的例子。

    (以上纯属个人观点,如果有不对的地方欢迎批评指正)。

  • 相关阅读:
    SV——override
    SV——声明和例化
    SV——automatic
    SV——类型转换$cast
    C++——局部变量、全局变量、静态变量与动态对象的性质(转载)
    C++——动态分配内存
    异步复位,同步释放(转)
    异步复位中的recovery time和removal time(转)
    UVM——virtual sequencer和virtual sequence
    软件工程 实践者的研究方法 第38章答案
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/4716022.html
Copyright © 2011-2022 走看看