基于Big O的算法运行时间比较

时间:2014-07-20 20:58:47

标签: algorithm data-structures big-o

在数据结构和算法课程中,我遇到了这个疑问。我已经查找了几个在线和离线资源,但仍有疑问。我被要求弄清楚算法的运行时间,我正确地做到了 - O(n ^ 3)。但令我困惑的是这个问题 - 如果n从90到900,000,算法的工作速度会慢多少?我的怀疑是:

  1. 算法的运行时间为O(n ^ 3),因此显然需要更多时间才能获得更大的输入。 但是,如何根据最差情况时间复杂度比较不同输入的算法性能
  2. 我们可以插入'n'的值并将big-O除以得到一个比例吗?
  3. 无论我哪里弄错,请纠正我!谢谢!

2 个答案:

答案 0 :(得分:1)

显然,你的想法是正确的!

当算法用于大小(n)时,如果大小增加,则速度将与n ^ 3成反比。

你的假设是正确的。你把n = 900,000的值放n = 90后得分,得到结果。这个因素将是减速因素!

下面,slowing factor = (900,000)^3 / (90)^3 = 10^12 !

因此,慢因子= 10 ^ 12.你的程序会减慢10 ^ 12!这样一个剧烈的变化!换句话说,你的效率会下降10 ^( - 12)倍! !

根据建议的评论进行编辑: -

  

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

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

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

另外,你的运行时间与最坏情况分析没有直接关系,但是,不知何故它是相关的,可以这样重新构建!

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

我希望它有所帮助。如果有任何信息被删除,请随意发表评论!

答案 1 :(得分:1)

您的理解是正确的。

  1. 如果您所拥有的唯一绩效指标是最差时间复杂度,那么您可以比较所有这些。如果您有更多信息,可以做出更好的估计。

  2. 是的,只需用n的值代替并将900,000 3 除以90 3 即可得到该比率。