使用样本计算运行时间

时间:2013-02-11 18:22:08

标签: algorithm big-o complexity-theory

假设您将程序作为N的函数计时并生成下表:

        N   seconds
-------------------
     4096      0.00
    16384      0.01
    65536      0.06    
   262144      0.51   
  1048576      4.41   
  4194304     38.10  
 16777216    329.13  
 67108864   2842.87

估计作为N的函数的运行时间的增长顺序。假设运行时间遵守幂律T(N)~a N ^ b。

5 个答案:

答案 0 :(得分:5)

你的N是4的连续幂。以连续4倍为基数的对数,你会发现它们会收敛到一个常数,即所谓的'b'。当你用表格的最后一个条目中的N,T(N)和b代替幂律(T(N)= a * N ^ b)时,你会得到'a'。在你的情况下,log4的时间比率收敛到1.555,所以这是'b'。

我猜你正在参加Coursera的“算法,第一部分”课程(和我一样)。然后,这个帖子必须可供你使用:

https://class.coursera.org/algs4partI-002/forum/thread?thread_id=149

或者,您可以参考从第16页开始的“算法分析”幻灯片。

答案 1 :(得分:2)

您需要使用对数图(logN),然后获取线的斜率。这将表示指数b。

答案 2 :(得分:0)

您可以计算整个样本集的每两个样本之间的斜率。然后,您可以递归地执行此操作(斜坡)。这应该给你b

答案 3 :(得分:0)

使用最小二乘拟合幂律:

http://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html

这将为您提供最接近a和b的拟合,然后您可以使用它来推断新点的运行时间。

答案 4 :(得分:0)

对我来说,这样更清楚:

N           seconds     log(N, 2)   log(seconds, 2)  Y(n)-Y(n+1)/
                            or X     or Y            X(n)-X(n+1)
----------------------------------------------------------------------------
4096              0         12      #NUM!
16384          0.01         14      -6.64385619         1.29248125
65536          0.06         16      -4.058893689        1.543731421
262144         0.51         18      -0.9714308478       1.556104752
1048576        4.41         20      2.140778656         1.555470218
4194304        38.1         22      5.251719093         1.555397315
16777216     329.13         24      8.362513723         1.555309345 
67108864    2842.87         26      11.47313241

答案:b大约是1.55

Estimate the order of growth of the running time as a function of N. 这是谷歌驱动器版本......