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