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