假设您将程序作为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。
答案 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. 这是谷歌驱动器版本......