【问题标题】:Optimal substructure and Greedy choice最优子结构和贪心选择
【发布时间】:2014-12-13 22:04:30
【问题描述】:

我正在阅读贪婪问题的两个属性,我试图了解以下两者之间的区别:-

  • 最优子结构属性:最优全局解包含其所有子问题的最优解。
  • 贪婪选择属性:通过贪婪选择局部最优选择可以获得全局最优解。

这两个不是等价的吗?两者看起来是一回事;你能给我一个满足最优子结构但不满足贪婪选择的例子吗?以及满足贪心选择但不满足最优子结构的例子?

【问题讨论】:

    标签: algorithm optimization


    【解决方案1】:

    对于可能不熟悉顶点覆盖或动态规划的未来读者来说,这些定义的措辞确实使它听起来很相似。

    我认为改写贪心选择的一个有用方法是,最优解总是包含贪心算法选择的第一选择,尽管它不一定是说最佳解决方案**->这就是它们不同的原因,因为尽管某些东西可能是最佳的并显示了贪婪的选择属性,但您还没有证明在每一步都制定了当前的最佳解决方案。在加权图上思考Prim's MST:您可以从任何顶点开始,但这意味着算法可以在每一步为这两个解决方案选择不同的边,但它们总是从任何给定的顶点中选择权重最低的边,因此它们有贪心选择属性。但是你还没有证明每一步的整个解决方案都是绝对最优的,只是选择了最贪婪的选项。

    这就是它们不同的原因,虽然贪婪选择可以导致最优子结构,但并不能证明它具有最优子结构。证明最优子结构的常见论据是交换论据保持领先论据,它们建立在算法显示贪婪选择属性的知识之上。

    【讨论】:

      【解决方案2】:

      它们不等价:

      假设我们想在树中找到最小的顶点覆盖,其中每个节点都有一个成本(覆盖的成本是这个覆盖中所有节点成本的总和)。这里可以使用动态规划:f(v, taken) 是覆盖以v 为根的子树的最小成本,v 在封面中,f(v, not taken) 是在不占用@987654325 的情况下覆盖此子树的最小成本@。最优子结构属性是正确的,因为我们可以最优地解决子问题(即为每个子树找到一个最优解),然后将它们组合起来找到全局最优解。然而,贪心选择属性在这里并不成立:选择成本最小的顶点直到所有边都被覆盖并不总是产生最佳结果。

      如果无法定义子问题是什么,贪心选择属性可能成立,但最优子结构属性不成立。例如,霍夫曼码构造算法总是合并两个最小的子树(并产生一个最优解),所以它是一个贪心算法,但不清楚子问题是什么,所以说第一个没有多大意义财产。

      【讨论】:

      • 我会这样定义一个子问题:子问题是一个新的问题实例,其中两个频率最低的子树已合并到一个子树中。因此它严格小于原始问题。
      • 我几乎到处都看到贪心算法需要最优子结构属性和贪心选择属性来保证最优解。我认为这不是真的,只需要贪婪的选择属性。这是正确的吗?
      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2018-04-24
      • 1970-01-01
      相关资源
      最近更新 更多