【发布时间】:2014-07-20 20:58:46
【问题描述】:
这是我在数据结构和算法课上遇到这个疑问的时候。我查了几个资源,线上线下都有,但还是有疑问。我被要求弄清楚算法的运行时间,我正确地做到了 - O(n^3) 。但是让我感到困惑的是这个问题 - 如果 n 从 90 到 900,000,算法的运行速度会慢多少? 我的疑问是:
- 该算法的运行时间为 O(n^3) ,因此显然较大的输入需要更多的时间。 但是如何仅根据最坏情况的时间复杂度比较算法在不同输入下的性能?
- 我们可以只插入“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