假设函数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来自哪里? 有人能解释一下我的答案吗?谢谢!
答案 0 :(得分:1)
我不明白第一行10来自哪里?能够 有人向我解释了答案吗?谢谢!
T(N)是最大时间复杂度。 c
是常量或O(1)
时间,它是算法速度的一部分,不受输入大小的影响。 10
来自四舍五入以简化数学运算。它实际为9.965784
,log2
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