我得到了一个算法并估计时间复杂度T(n)为3 * n! + 2。
我知道算法在n = 10时运行所需的时间是1秒,我希望计算n = 20的运行时间。
我对如何处理这个问题感到有些困惑。我假设因为n = 10,我只是把它插入T(n),它给出3 *(10!)+ 2,这显然不是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并且必须存储在硬盘上,那就更糟了。