【问题标题】:Big-O complexity for n + n-1 + n-2 + n-3 + (...) + 1n + n-1 + n-2 + n-3 + (...) + 1 的大 O 复杂度
【发布时间】:2017-05-30 02:38:38
【问题描述】:

我想知道.. 以 n 个元素开头的算法的复杂性是什么(我通过做任何事情来运行)。我取下一个元素,我再做一次。我取下另一个元素,然后再做一次,直到我只剩下一个元素。 是O(n log n)吗?我无法想象它......

【问题讨论】:

  • 听起来像 !ntriangle(n)
  • 这个和是 n(n+1)/2 所以它是 O(n^2)
  • @Henry 虽然我同意总和这里有 n 项,因此它是 O(n),而不是 O(n^2)。
  • @LorenPechtel 不,“我一直在做任何事情”意味着您仅在第一个任期内就做了 O(n) 工作。总的来说,这给出了 O(n^2)。
  • 我将其理解为以某种方式处理该术语,而不是处理某事的次数。

标签: time-complexity big-o


【解决方案1】:

据说著名的数学家Gauss 在他上小学的时候就已经找到了这个问题的公式。正如@Henry 在 cmets 中提到的那样:

来源:Wikipedia (DE)Wikipedia (EN)

由于每个条目都已完成工作,即每个“项目”都需要 O(1)。因此,问题在于 O(n^2)。

可视化(也称为Wikipedia)可以看作是一个半填充的正方形:

【讨论】:

  • 很好的答案和可视化链接,真的很有帮助:)
  • n 平方只是为您提供最终答案的公式。这如何使其成为算法的时间复杂度。例如,如果将输入乘以 2(也就是将其缩放到两倍大小),最终结果是 n 平方的两倍。因此,随着您增加输入,最终结果会根据您增加输入的因素进行缩放。这不是线性的吗?
  • 注意,以上链接来自 de.wikipedia.org。在 PC 上的 Chrome 中,您可以单击翻译按钮(在 Chrome 的 URL 右侧)以阅读英文页面。 我能找到的最近的英文维基百科条目:en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AFen.wikipedia.org/wiki/Triangular_number
  • @Gamepad.Coder 对此表示感谢,我添加了您的第二个参考,因为我也没有找到德语 wiki 站点的翻译版本。
  • @adityah 常量与复杂度评估无关,即可以忽略按常量因子缩放,en.wikipedia.org/wiki/Big_O_notation
【解决方案2】:

为了解决O(n+n-1+n-2....n次)的复杂度,我们需要用see this link的数学公式求和

=> n+n+n...n times - (1+2+3...n times)
=> n^2- (n^2+n)/2

复杂性将是

(n^2-n)/2

【讨论】:

  • 严格来说,不应该去掉常数,只留下显性项吗?因此,(n^2-n)/2 最终的复杂度为n^2O(n^2)。换句话说,说复杂度将是(n^2-n)/2 是不正确的。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2011-01-29
  • 1970-01-01
  • 2021-04-24
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多