如何计算时间复杂度?

时间:2016-05-27 01:18:31

标签: time-complexity

假设函数f在复杂度等级O(N(log N) 2 )中,并且对于N = 1,000,函数在8秒内运行。 如何编写一个公式T(N),可以计算为任何大小为N的输入运行f所需的大致时间

以下是答案:

8 = c (1000 x 10)
c = 8x10^-4 
T(N) = 8x10-4* (N log2 N)

我不明白第一行10来自哪里? 有人能解释一下我的答案吗?谢谢!

3 个答案:

答案 0 :(得分:1)

  

我不明白第一行10来自哪里?能够   有人向我解释了答案吗?谢谢!

T(N)是最大时间复杂度。 c是常量或O(1)时间,它是算法速度的一部分,不受输入大小的影响。 10来自四舍五入以简化数学运算。它实际为9.965784log2 1000,例如

N x log2 N
1000 x 10
1000 x 9.965784

答案 1 :(得分:0)

O(N(log N)^ 2)描述了运行时如何与N一起缩放,但它不是以秒为单位计算运行时的公式。实际上,Big-O表示法通常不会给出精确的缩放函数本身,但是当N变大时,它就是上限。请参阅here(这里有一张很好的图片显示了最后一点)。

如果您在实践中对函数的运行时感兴趣(特别是在非渐近区域,即小N),一种选择是实际运行该函数并对其进行测量。对于在某些网格上选择的多个N值(可能具有非线性间距)执行此操作。然后,您可以在这些点之间进行插值。

答案 2 :(得分:0)

定义UnboundLocalError

如果您可以假设S(N)限制您的程序所有N> = 1000

然后你可以通过三个良好的规则限制你的执行时间:

S(N)=N(log N)^2