【问题标题】:Complexity of algorithm implementing Newton's method in finding square root实现牛顿法求平方根的算法的复杂性
【发布时间】:2012-10-24 15:37:33
【问题描述】:

我编写了一个 Java 程序来使用牛顿法计算用户定义数字的平方根。算法的主要操作是这样的:

answer = guess - ((guess * guess - inputNumber) / (2 * guess)); 
while (Math.abs(answer * answer - inputNumber) > leniency) {
    guess = answer;
    answer = guess - ((guess * guess - inputNumber) / (2 * guess));
}

我现在正在寻找算法的复杂性(是的,这是家庭作业),并从here 读到牛顿方法的时间复杂度为 O(log(n) * F(x))。

但是,从上面的代码 sn-p 中,我将时间复杂度解释为:

O(1+ ∑(1 to n) (1) ) = O(1+n) = O(n)

不知道我在这里做错了什么,但即使在阅读了 wiki 的解释之后,我似乎也无法理解 big Os 的差异。

另外,我假设“算法的复杂性”是“时间复杂性”的同义词。这样做对吗?

非常感谢您在解释这个悖论方面的帮助,因为我是一名新手,有一些“触摸即走”编程模块的背景知识。

提前致谢:)

【问题讨论】:

  • 对于越来越大的数字,在leniency 内接近答案所需的迭代次数会增加,但呈非线性关系。
  • @Wug 感谢您的见解。我假设宽大迭代的复杂性是 log(leniency),就像 jpalecek 的回答一样?如果我错了,请纠正我。不过,我仍然不太了解 O(log(n) * F(x)) 背后的概念。谁能告诉我“大局”和F(x)?对不起,我有点慢,但我真的很想了解。提前致谢

标签: java complexity-theory time-complexity square-root newtons-method


【解决方案1】:

问题是您在计算中实际上对n 一无所知-您没有说出它应该是什么。当您计算算法下一次迭代的实际误差时(执行它!),您会看到例如。如果a 至少为 1 并且错误小于 1,则基本上每次迭代的有效位置数都会增加一倍。因此,要获得p 小数位,您必须执行log(p) 迭代。

【讨论】:

  • 嗨 jpalecek,谢谢您的回答 :) 我已经尝试计算实际错误,并且似乎当错误小于 1 时,有效数字的数量每次都会翻倍。您关于 p 小数位的 log(p) 迭代的观点:是否可以说因为搜索空间每次迭代减半,因此复杂性 w.r.t p 是 log(p)?
  • @levicorpus:我不会这么说的。我不确定这种情况下的“搜索空间”是什么,如果我们认为在例如之间有2^p 间隔。 1 和 2 可以近似一个具有p 位精度的数字,我们在其中搜索答案,这实际上意味着该算法实际上比每一步都将搜索空间减半要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2019-06-27
  • 1970-01-01
  • 2015-07-28
  • 2014-03-07
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多