我写了一个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读了Newton方法的时间复杂度为O (log(n)* F(x))。
然而,从上面的代码片段,我已经解释的时间复杂度为:
O(1+ ∑(1 to n) (1)) = O(1+n) = O(n)
不知道什么我越来越错在这里,但我似乎无法理解大的差距Os甚至在阅读wiki的解释之后。
此外,我假设“算法的复杂性”与“时间复杂度”是同义的。这样做是对的吗?
对于解释这个悖论,我真的很感谢,因为我是一个有一些“触摸和去”编程模块值得背景的新手。
感谢提前:)
对于数量越来越大,在“宽大”范围内接近答案所需的迭代次数增加,但非线性增加。 – Wug
@Wug谢谢你的见解。我假设宽松迭代的复杂性是log(宽松),就像jpalecek的回答一样?如果我错了,请纠正我。尽管如此,我仍然不太清楚O(log(n)* F(x))背后的概念。任何人都可以启发我关于'大图片'和F(x)?对不起,我有点慢,但我真的很想明白。在此先感谢 – levicorpus