巴比伦方法的时间复杂性

时间:2012-09-06 22:36:43

标签: performance algorithm big-o time-complexity

巴比伦方法的时间复杂度是多少?是log(n)其中n是我们想要找到平方根的数字吗?如果是这样,为什么会这样呢?

2 个答案:

答案 0 :(得分:13)

观察the wikipedia section for the Babylonian method我们可以看到步骤k的相对误差e k 满足等式e k < 2 -f(k),其中f(k)递归定义如下:

f(1)= 2且f(k + 1)= 2 * f(k)+ 1,n> 1。 1

通过诱导,f(k)= 3 * 2 k-1 - 1

设n为我们算法的输入,当我们确定总误差小于常数m时停止

步骤k的误差​​,E k ,满足等式E k = e k * n

因此,算法将在e k * n <1时终止。米

当2 f(k)&gt;时会发生这种情况。 n / m,相当于f(k)>日志<子> 2 (N / M)

当2 k-1 &gt;时,该等式为真。 (log 2 (n / m)-1)/ 3当k> 1时为真。 log 2 ((log 2 (n / m) - 1)/ 3)+ 1

因此算法将以O(log(log(n / m)+1))步骤终止。

使用this logarithmic summation formula可以显示日志(log(x)+ c))= O(log(log(x))。

因此巴比伦方法采用O(log(log(n / m))步骤

答案 1 :(得分:0)

我猜步骤是O(log2(记录到基数E0(m / n)) 其中E0是第0次迭代时的误差,即当我们选择种子值时 m是ans中允许的错误,n是算法的输入。 您可以参考此处获取有关错误递归函数的完整说明:http://www.math.harvard.edu/library/sternberg/slides/lec1.pdf