如果一个程序在 n=10 的情况下在 2 秒内执行,那么执行 n=100 的复杂度为 n * log(n) 需要多少时间?我想了想,我认为可能是 4 秒,但我该如何证明呢?
问问题
235 次
3 回答
4
假设所花费的时间与 n*log(n) 完全成正比,而不仅仅是一个上限(参见http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations),您将拥有:
executionTime = (constant) * n * log(n)
代入 n=10 并求解常数。现在你有一个每个 n 处的执行时间的表达式。
于 2012-11-13T21:07:17.607 回答
3
好吧,考虑以下几点:
线性情况下 2 秒内完成 10 次操作,即:O(n),所以n
操作,即 10 次操作:
==> 10 * k = 2s
==> k = 0.2 (seconds per operation)
由于 O(n*log(n)) 的复杂性(即:Big-Oh),您将有这么多操作:
==> n * log(n)
==> 100 * log(100)
==> 100 * 2 = 200
现在,使用 0.2 秒/操作,对于 200 次操作,使用复杂度为 O(n*log(n)) 的算法,我们得到:
==> T = 0.2s/operation * 200 operations = 40 seconds
这是一个相当不错的结果。在线性情况下,(即:O(n))节省并没有那么好,即:
==> T = 0.2s/operation * 100 operations = 20 seconds
如果这是 O(n^2),那将是可怕的:
==> T = 0.2s/operation * (100^2) = 0.2*10,000 = 2000 seconds
希望这可以帮助!
于 2012-11-13T21:09:53.607 回答
2
对于 n=10,最坏情况下的程序需要 10*log(10) = 10 次操作。
那么对于 n=100,它需要 100*log(100) = 200 次操作。
10 operations --> 2 seconds
200 operations --> X seconds
X = 40 second.
于 2012-11-13T21:06:49.247 回答