在数据结构和算法课程中,我遇到了这个疑问。我已经查找了几个在线和离线资源,但仍有疑问。我被要求弄清楚算法的运行时间,我正确地做到了 - O(n ^ 3)。但令我困惑的是这个问题 - 如果n从90到900,000,算法的工作速度会慢多少?我的怀疑是:
无论我哪里弄错,请纠正我!谢谢!
答案 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)
您的理解是正确的。
如果您所拥有的唯一绩效指标是最差时间复杂度,那么您可以比较所有这些。如果您有更多信息,可以做出更好的估计。
是的,只需用n的值代替并将900,000 3 除以90 3 即可得到该比率。