通过Rabin-Miller实现找到大的O符号

时间:2017-02-14 10:38:32

标签: algorithm big-o

我有一个问题,试图决定我实施的Rabin-Miller算法的大O符号。

生成

 512 bits prime, I get a runtime of   22 seconds,
1024 takes                           237 seconds,
2048 takes                          2942 seconds.

如何确定这些值的大O表示法?在我看来,每当bitsize增加2时,运行时间增加大约 10次。这是否意味着它是O(10n)

1 个答案:

答案 0 :(得分:1)

你有太少的点来估算实验中的函数(以及O(function))。

   x | f(x)
-----------
 512 |   22
1024 |  237
2048 | 2942

如果我们在Least Squares方法的帮助下测试O(n)O(10n)实际上是O(n))为f(x) = Ax + B猜测,我们会得到一个好消息适合

A =     2.0
B = -1330.5
R =     0.964   (Correlation)

但是,许多替代功能都有更好的支持

f(x) = Ax**4 + B  with correlation R = 0.99990 <- actual best fit
f(x) = Ax**3 + B         -/-       R = 0.99937 <- expected
f(x) = Ax**2 + B         -/-       R = 0.99232

您希望更多积分找出正确的功能:当三个值只有Ax**4 + B(对应于O(x**4))时, 领导者到目前为止,但我们无法拒绝Ax**3 + B O(x**4)

最后,我们可以猜测(我们不能只用三点结束)实现次优:{{1}而不是预期的O(x**3)

如果我们的猜测O(x**4)是正确的,那么我们可能会认为加倍xx -> 2 * x我们会增加时间16-fold2**4 == 16