Performance 贪婪算法的最佳复杂度是什么?

Performance 贪婪算法的最佳复杂度是什么?,performance,complexity-theory,big-o,Performance,Complexity Theory,Big O,看起来最好的复杂度应该是线性O(n) 事实上,这并不重要,我说的是贪婪算法 有时贪婪是值得的 在我感兴趣的特定情况下,我会计算变化 说你需要找35美分。你有1,5,10,25的硬币。贪心算法编码简单,可以快速、方便地解决这个问题。首先抓取25美分,这是35年来的最高值,然后再抓取10美分来完成总数。这是最好的情况。当然也有一些不好的情况,这种贪婪算法也会有问题。我说的是确定这类问题的最佳情况复杂性。贪婪与否本质上与计算复杂性无关,只是贪婪算法在解决同一问题时往往比其他算法更简单,因此,它们往往具

看起来最好的复杂度应该是线性O(n)

事实上,这并不重要,我说的是贪婪算法

有时贪婪是值得的

在我感兴趣的特定情况下,我会计算变化


说你需要找35美分。你有1,5,10,25的硬币。贪心算法编码简单,可以快速、方便地解决这个问题。首先抓取25美分,这是35年来的最高值,然后再抓取10美分来完成总数。这是最好的情况。当然也有一些不好的情况,这种贪婪算法也会有问题。我说的是确定这类问题的最佳情况复杂性。

贪婪与否本质上与计算复杂性无关,只是贪婪算法在解决同一问题时往往比其他算法更简单,因此,它们往往具有较低的复杂性。

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


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

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

贪婪方法

  • 背包问题…使用合并排序对给定元素进行排序…(nlogn)
  • 查找需要O(n)的最大截止日期
  • 使用线性搜索逐个选择元素…O(n²)
  • nlogn+n+n²=最坏情况下的n²


    现在我们可以应用二进制搜索而不是线性搜索了吗?

    你有没有一个具体的问题或你心目中的贪婪解决方案?在@Foo bah为你给出的问题添加了一个解释,贪婪通常不起作用:13美分使用10,8,5,1可以得到(8,5)的最优解,但贪婪的解是(10,1,1)@福巴:那将是一个糟糕的案例,而不是最好的案例。是的,有些情况根本不起作用(没有调整),但我指的是最好的情况。如果算法不正确,询问其时间复杂度是毫无用处的。。。所以这个问题没有任何意义。我可以想出一个O(1)贪婪算法,你就这样做了。