【问题标题】:Time complexity for Babylonian Method巴比伦方法的时间复杂度
【发布时间】:2012-09-06 22:36:43
【问题描述】:

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

【问题讨论】:

  • 我觉得这个来源可能是你想要的,它谈到了Newton's Method,这是巴比伦方法等算法的基础。
  • @kurtzbot 从历史上看,说巴比伦的方法是基于牛顿的方法是相当可笑的。
  • 哈哈,抱歉,不是故意引起混淆的。我记得学过这个,不得不做一些谷歌搜索来刷新我的记忆。如果我错了,请纠正我。
  • 除非你的意思是因为名字很有趣,而不是数学上。在这种情况下,我同意:P
  • @kurtzbot 我认为他的意思是这很有趣,因为据推测,巴比伦的方法比牛顿的方法早...数千?...年。

标签: performance algorithm big-o time-complexity


【解决方案1】:

查看the wikipedia section for the Babylonian method,我们可以看到步骤 k 的相对误差 ek 满足方程 ek-f(k ),其中 f(k) 递归定义如下:

f(1) = 2 和 f(k+1) = 2 * f(k) + 1 对于 n > 1

通过归纳,f(k) = 3 * 2k-1 - 1

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

第 k 步的误差 Ek 满足方程 Ek = ek * n

因此算法将终止一次 ek * n

这将发生在 2f(k) > n/m 相当于 f(k) > log2(n/m)

当 2k-1 > (log2(n/m) - 1)/3 当 k > log 时,该等式成立2((log2(n/m) - 1)/3)+ 1

因此,算法将以 O(log(log(n/m)+1)) 步结束。

使用this logarithmic summation formula 可以证明 log(log(x)+c)) = O(log(log(x))。

因此巴比伦方法需要 O(log(log(n/m)) 步

【讨论】:

    【解决方案2】:

    我猜步骤是 O(log2(log to base E0 (m/n)) 其中 E0 是第零次迭代的误差,即当我们选择种子值时 m 是 ans 中允许的错误,n 是算法的输入。 错误递归函数的完整解释可以参考这里:http://www.math.harvard.edu/library/sternberg/slides/lec1.pdf

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 2020-05-12
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多