鉴于时间复杂度,如何计算n的运行时间?

时间:2015-05-28 02:33:19

标签: algorithm time runtime big-o time-complexity

我得到了一个算法并估计时间复杂度T(n)为3 * n! + 2。

我知道算法在n = 10时运行所需的时间是1秒,我希望计算n = 20的运行时间。

我对如何处理这个问题感到有些困惑。我假设因为n = 10,我只是把它插入T(n),它给出3 *(10!)+ 2,这显然不是1(秒)。

任何人都可以提供一些如何正确处理此问题的提示吗?谢谢!

1 个答案:

答案 0 :(得分:0)

正如@MarkRansom在评论中写道,你必须解决这个等式

Runtime(m) / T(m) = Runtime(n) / T(n)

代表Runtime(m)。在这种特殊情况下,结果是那么大(参见@shapiro.yaacov的评论),如果这个值是否准确无关紧要。

假设您的复杂度为T(n) = 2n²,并且您为n = 1000测量了1秒,这导致我们

Runtime(2000) = T(2000) ⋅ 1s / T(1000) = 4s

但这并不意味着您的算法在4秒内运行。如果您的输入比特定类型的内存大,那可能会更糟。例如。也许n = 1000的输入适合缓存。如果n = 2000的输入没有,那么它必须存储在RAM中,因此你的运行时间会更差50倍(只是输入一个数字,我不知道RAM比L3慢多少)高速缓存)。 如果你有一个巨大的输入不适合RAM并且必须存储在硬盘上,那就更糟了。