2014-09-12 235 views
0

Complexity Analysis Problem如何計算算法的複雜度?

我目前正在介紹算法課程,我需要幫助解決這個問題。由於我對此表示懷疑,因此不太確定。 :)我有兩個問題:

問題1: 從我所瞭解的算法書中,我相信這個問題的運行時複雜度是f(n)= 3n。爲什麼?那麼因爲while循環將繼續運行n次,並且對於循環的每次迭代,您有3次操作(1次減法,1次乘法和1次加法)是我的過程是正確還是錯誤?由於賦值語句,它應該是f(n)= 5n。我知道兩者都是相同的複雜性,但我真的很想明確地確定。

問題2: 至於說明算法是否找到了多項式的值,我已經足夠讓我舉一個例子來找到一個特定多項式的值,例如3n^2 + 2n + 1來證明該算法的工作原理還是有更好的方法來做到這一點。

+1

在計算時間複雜度時,您不必關心常量。 O(n)與O(2n)和O(200n)相同 – arunmoezhi 2014-09-12 21:37:26

+0

哦,好的。複雜度BigOh(n)的代碼也是如此。我的思維過程是正確的,還是其他複雜性? arunmoezhi – TwilightSparkleTheGeek 2014-09-12 21:38:38

+0

你應該問自己這些問題。 while循環運行多少次? 「i」的值是否與循環內部完成的工作無關(除了'i = i-1')? – arunmoezhi 2014-09-12 21:41:22

回答

1

對於第一個問題,複雜度確實是O(n)。

如果你想要更確切地確定你想要的東西,在每個循環中,你的算法將需要一定的操作量(我的複雜課程有點舊,我希望我不會錯過任何; )):

  1. 判斷循環條件:ⅰ> = 0
  2. 計算x和y的乘積
  3. 結果添加到A [1]
  4. 將結果存儲在y中
  5. 計算我 - 1
  6. 。結果存儲在我

你的計劃也將做3個額外的操作:

  1. Y = 0
  2. 我= N
  3. 比較我到0的最後一次,不進入循環

你也可以考慮計算機必須爲y和i等分配內存的事實。

對於第二個問題,如同在數學中一樣,證明它在一種情況下是有效的,並不足以證明它在任何情況下都有效。

爲了證明你的算法,你首先必須編寫你的前提條件(你應該有什麼入口)。 然後,你必須在你的while循環開始時指出你的程序應該處於的狀態,並且在它的結尾處同樣。

例如: Y = 0 i = N時 而(ⅰ> = 0){// Y =總和(A [j]的+ X ^,j將>ⅰ) Y = A [1 ] + x^i //我假設它是x^i而不是x * y y = Sum(a [j] + x^j,j> i-1) i = i-1 // y = Sum(a [j] + x^j,j> i) }

我沒有找到任何必要的程序前提條件,我剛纔提到過它,因爲重要的是要考慮它其他類似的作品。 如圖所示,這個想法是在每個點顯示程序的狀態,所以我們知道它到達最後的狀態。

+0

嗯,但是如果我只是在我的while循環的開始和結束時聲明我的程序的狀態,那麼這不就意味着要選擇一個特定的多項式嗎?我的意思是我不必給出一個特定的多項式來處理?我如何證明它一般適用於所有多項式。 – TwilightSparkleTheGeek 2014-09-12 23:22:58

+1

你必須證明它適用於所有可能的條目尊重你的先決條件,所以在這種情況下,所有多項式。這就像在數學中展示一個規則。如果你證明它適用於一個多項式,它並不證明它適用於所有。所以你必須保持通用性,就像在數學中一樣,這是什麼使得證明算法的練習變得更加困難^^ – Mitvailer 2014-09-12 23:39:20

+0

啊,哦,男孩。所以對我來說有點感到不知所措的Mitvailer?哈哈。因爲現在我有點不知所措。我正在閱讀一些關於證明的數學書籍,因爲這對我來說很新穎。我會盡量保持一般,謝謝。 :)而我的教授並不那麼有幫助,我是CS的本科生。 – TwilightSparkleTheGeek 2014-09-12 23:43:51