【问题标题】:Big O based comparison of an algorithm's running time基于大 O 的算法运行时间比较
【发布时间】:2014-07-20 20:58:46
【问题描述】:

这是我在数据结构和算法课上遇到这个疑问的时候。我查了几个资源,线上线下都有,但还是有疑问。我被要求弄清楚算法的运行时间,我正确地做到了 - O(n^3) 。但是让我感到困惑的是这个问题 - 如果 n 从 90 到 900,000,算法的运行速度会慢多少? 我的疑问是:

  1. 该算法的运行时间为 O(n^3) ,因此显然较大的输入需要更多的时间。 但是如何仅根据最坏情况的时间复杂度比较算法在不同输入下的性能
  2. 我们可以只插入“n”的值,然后除以大 O 来得到一个比率吗?

如有错误,请纠正我!谢谢!

【问题讨论】:

  • 我认为答案(可能还有问题)将 Big-Oh 与 Big-Theta 混淆(或忽略差异);虽然程序员在谈论算法的最坏情况运行时间时通常指的是 Big-Theta,但使用 Big-Oh,这有点微妙,您可能需要注意。此外,无论如何,试图从朗道符号中获取特定值有点愚蠢。它隐藏了低阶项,因此您从中得出的任何特定值都会附加错误,有时很重要。不过,对于一个大概的数字,你可以按照你的建议去做。
  • @G.Bach-THANKS,我已经修改了答案并包含了你的名字并暗示了你的美丽评论。请在我的答案下方评论答案。另外,如果发现任何严重错误,请指出!
  • 您的理解是错误的,因为您忽略了任何这些复杂性声明的初始句子:“存在 n_0,因此对于所有 n > n_0,以下成立”。如果您的 n_0 很大,并且实际上很容易有数十万个元素,那么您的方法就会失败。

标签: algorithm data-structures big-o


【解决方案1】:

很明显,你的想法是对的!

由于算法适用于大小(n),在最坏的情况下,如果大小增加,速度将与 n^3 成反比。

您的假设是正确的。您只需将 n=900,000 的值除以 n=90 即可得到结果。这个因素将是减速因素!

这里,slowing factor = (900,000)^3 / (90)^3 = 10^12 !

因此,slow factor=10^12 。您的程序将减慢 10^12 倍!!!如此巨大的变化!或者换句话说,您的效率将下降 10^(-12) 倍! !

根据建议的 cmets 进行编辑:-

但是我如何比较不同输入的算法性能 仅基于最坏情况的时间复杂度?

正如这篇文章的评论员之一 G.Bach 所暗示的,你的问题背后的基本思想本身就是矛盾的!你应该谈论Big-Theta Notation,而不是Big-O想一个通用的解决方案! Big-O 是上界,而 Big-Theta 是紧界。当人们只担心可能发生的最坏情况时,big-O 就足够了;即它说“它不会比这更糟”。当然,界限越紧越好,但严格的界限并不总是很容易计算。

因此,在最坏情况分析中,您的问题将按照我们俩的回答方式回答。现在,人们使用 O 而不是 Ω 的一个狭隘原因是放弃关于最坏或平均情况的免责声明。但是,要进行更严格的分析,您还必须检查Obig-Omega 以及提出问题。这个问题可以适当地找到不同大小的 n 的解决方案。我留给你弄清楚。但是,如果你有任何疑问,请随时发表评论。

此外,您的运行时间与最坏情况分析没有直接关系,但是,它以某种方式相关并且可以通过这种方式重新构建!

P.S.---> 我从Big-oh vs big-theta 中获得了一些想法/陈述。所以,也感谢作者!

希望对您有所帮助。如果有任何信息略读,请随时发表评论!

【讨论】:

  • 不一定。 90 和 900,000 都不等于无穷大。
  • @OliCharlesworth-为什么SIR,他已经提到它依赖于n并且是受(n^3)影响的算法?
  • 我认为问题在于这两个问题的答案是相反的:(1)你是对的,O(n^3) 没有告诉你实际运行时间。 (2)你是对的,把n^3当作实际运行时间。我认为 OP 正在寻找如何协调这两个陈述。
【解决方案2】:

你的理解是正确的。

  1. 如果您拥有的唯一性能衡量标准是最坏情况下的时间复杂度,那么您就只能比较这些了。如果您有更多信息,您可以做出更好的估计。

  2. 是的,只需将 n 的值代入,然后将 900,0003 除以 903 即可得到比率。

【讨论】:

  • 感谢您的回答。但即使我向您展示了算法——例如 C 中的插入排序,它对更好的估计有何帮助?通过考虑所有步骤和单个时间复杂度 - 比如 O(n^2) 实际上是 O(n^2 + n + 3) ..?
  • @Noob 对于 n 的特定值,我想这会起作用。但是,随着 n 的增加,最终第一项将压倒所有其他项。我在考虑最佳情况和平均情况的时间复杂度。如果你有这些,你可以给出预期性能的估计范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-03-04
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多