2

我写了一个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的解释之后。

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

对于解释这个悖论,我真的很感谢,因为我是一个有一些“触摸和去”编程模块值得背景的新手。

感谢提前:)

+0

对于数量越来越大,在“宽大”范围内接近答案所需的迭代次数增加,但非线性增加。 – Wug

+0

@Wug谢谢你的见解。我假设宽松迭代的复杂性是log(宽松),就像jpalecek的回答一样?如果我错了,请纠正我。尽管如此,我仍然不太清楚O(log(n)* F(x))背后的概念。任何人都可以启发我关于'大图片'和F(x)?对不起,我有点慢,但我真的很想明白。在此先感谢 – levicorpus

回答

1

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

+0

嗨jpalecek,谢谢你的回答:)我已经试过计算实际的错误,并且它似乎确实当错误小于1时,每次有效数字的数量翻倍。你有关p小数点的log(p)迭代的观点:这是正确的,因为每次迭代搜索空间减半,复杂性w.r.t p因此是log(p)? – levicorpus

+0

@levicorpus:我不会那么说。我不确定这种情况下的“搜索空间”是什么,如果我们认为它们之间存在“2^p”间隔, 1和2可以用'p'位的精度近似一个数字,我们在这些数据中搜索答案,这实际上意味着算法实际上比每半步搜索空间减半要好得多。 – jpalecek