【发布时间】: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