求解平方根的牛顿法算法的复杂性

时间:2012-11-04 18:00:57

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

我编写了一个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) )。

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

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

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

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

非常感谢帮助解释这个悖论,因为我是一个新手学生,有一些“触摸和去”编程模块值得背景。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

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