【问题标题】:What is the Best Complexity of a Greedy Algorithm?贪心算法的最佳复杂度是多少?
【发布时间】:2011-10-10 00:45:10
【问题描述】:

似乎最好的复杂度是线性 O(n)。

其实没关系,我说的是一般的贪心算法。

有时贪婪会得到回报?

在我感兴趣的特定情况下,将计算更改。

假设您需要提供 35 美分的零钱。你有 1、5、10、25 的硬币。简单编码的贪心算法可以快速轻松地解决这个问题。首先抓住 25 美分的最高值进入 35,然后接下来的 10 美分完成总数。这将是最好的情况。当然,在某些情况下,这种贪婪算法会出现问题。我说的是确定此类问题的最佳案例复杂度。

【问题讨论】:

  • 您有什么特定的问题或您心目中的贪婪解决方案吗?
  • 添加了一个解释@Foo Bah
  • 对于您给出的问题,贪心通常不起作用:使用 10、8、5、1 的 13 美分将产生 (8,5) 的最佳解决方案,但贪心解决方案 (10,1 ,1,1)
  • @Foo Bah 那将是一个糟糕的情况,而不是最好的情况。是的,有些情况根本不起作用(没有调整),但我指的是最好的情况。
  • 如果算法不正确,问它的时间复杂度是没有用的......所以这个问题没有任何意义。我可以想出一个 O(1) 贪心算法,所以你去吧。

标签: performance complexity-theory big-o


【解决方案1】:

任何具有n 必须单独采取的项目输出的算法最多具有O(n) 时间复杂度;贪心算法也不例外。一个更自然的贪婪版本,例如背包问题将 NP-complete 的东西转换成O(n^2) 的东西——你尝试所有项目,选择剩余空间最少的项目;然后尝试所有剩余的,再次选择最好的;等等。每一步都是O(n)。但复杂性可以是任何东西——这取决于贪婪有多难。 (例如,像层次凝聚聚类这样的贪婪聚类算法有单独的步骤,这些步骤是 O(n^2) 来评估(至少是天真地)并且需要这些步骤中的 O(n)。)

【讨论】:

    【解决方案2】:

    当您谈论贪婪算法时,通常您谈论的是算法的正确性,而不是时间复杂度,尤其是对于诸如变更等问题。

    使用贪心启发法是因为它们很简单。这意味着简单问题的简单实现和困难问题的合理近似。在后一种情况下,您会发现比保证正确算法更好的时间复杂度。在前一种情况下,你不能指望比最优时间复杂度更好。

    【讨论】:

      【解决方案3】:

      贪婪的方法

      1. 背包问题...使用归并排序对给定元素进行排序..(nlogn)
      2. 找出需要 O(n) 的最大截止日期
      3. 使用线性搜索逐一选择元素....O(n²)

      nlogn + n + n² = n² 在最坏的情况下......

      现在我们可以应用二分搜索代替线性搜索吗.....?

      【讨论】:

        【解决方案4】:

        贪心与否基本上与计算复杂度无关,除了贪心算法在解决相同问题时往往比其他算法更简单,因此它们往往具有较低的复杂度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-15
          • 1970-01-01
          • 2016-07-04
          • 2023-03-07
          • 2012-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多