我编写了一个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的差异。
另外,我假设“算法的复杂性”与“时间复杂度”同义。这样做是对的吗?
非常感谢帮助解释这个悖论,因为我是一个新手学生,有一些“触摸和去”编程模块值得背景。
提前致谢:)
答案 0 :(得分:1)
问题是你在计算中实际上对n
一无所知 - 你没有说它应该是什么。当你计算算法的下一次迭代的实际误差时(做它!),你会看到例如。如果a
至少为1且误差小于1,则每次迭代的有效位数基本上加倍。因此,要获得p
小数位,您必须执行log(p)
次迭代。