2016-10-15 181 views
1

我只是需要一些澄清或幫助解決這個大問題。我不知道我是否正確地解釋了這一點,但我注意到for循環有一個錯誤的條件,所以這意味着它不會循環。我的教授說可以確定循環的運行時間。所以我在想的是這樣的:大循環錯誤條件

1 + (n - 1 - n) * (n) = 1 + 1 * n = 1 + n = O(n) 

說明:1是用於循環以外的操作。 (n - 1 - n)是外部循環的迭代,n是內部循環的迭代。

注意:我還在學Big O,所以如果我的任何邏輯錯誤,請糾正我。

int total = 0; 
for (int i = n; i < n - 1; i++) { 
    for (int j = 0; j < n; j++) { 
     total = total + 1 
    } 
} 
+1

什麼是m和n?是m> n? –

+0

@ cricket_007我的歉意,m是打字錯誤,應該是n。我現在要解決這個問題。 – Jasmine

+0

好吧,外環不運行。它沒有運行時間 –

回答

2

大O分析中不應該有任何負數。對於負面運行時間沒有意義。此外,(n - 1 - n)不只是爲了O(1)。你的外層循環甚至不會進入一次迭代。因此,循環中任何語句的時間複雜性都無關緊要。

總之,運行時間爲1 + 1 = O(1)

+0

哦,我在計算中看到了我的錯誤,非常感謝您的理解!我最初的想法是O(1),因爲你和我只是考慮循環之外的操作。但是我想當我的教授說運行時間來自循環時,它讓我困惑。謝謝你的幫助! – Jasmine

0

大O符號來描述函數的漸近行爲。基本上,它告訴你函數增長有多快或者 下降

例如,當分析某些算法時,可能會發現完成大小爲n的問題所需的時間(或步驟數)由

T(N)= 4 N^2 - 2 N + 2

如果我們忽略常數(這很有意義,因爲那些依賴於程序上運行特定的硬件)和生長較慢術語,我們可以說「T(n)」以n^2的順序增長並且寫成:T(n)= O(n^2)

對於形式定義,假設f(x)和g(x)是定義在實數的某個子集上的兩個函數。我們寫

F(X)= O(G(X))

(或F(X)= O(G(X))對於x - >無限遠更精確)當且僅當存在常數N和C以使得

| f(x)| < = C | g(x)|對於所有的x>Ñ

直觀上,這意味着,F不生長比克更快

如果是一些實數,我們寫

F(X)= O(克(X))爲X->一個

,當且僅當存在D> 0和C常數,使得

| f(x)| < = C | g(x)|對於| x-a |的所有x < d

因此,對於您的情況,這將是O(n^2)as | f(x)| > C | g(x)|從http://web.mit.edu/16.070/www/lecture/big_o.pdf

int total = 0; 
for (int i = n; i < n - 1; i++) { // --> n loop 
    for (int j = 0; j < n; j++) { // --> n loop 
     total = total + 1; // -- 1 time 
    } 
} 

參考}

大O符號給出了一個假設,當值非常大外環將運行n次,內循環運行N次

採取N個 - > 100 總數n^2 10000運行時間

+1

對不起,我很困惑你是如何到達O(n^2)我的問題。你能再解釋一下嗎? – Jasmine

+1

這樣可以解決實際問題,並且在討論big-O時很可能已經教過了。該帖子詢問了所顯示的代碼,而不是 –

+0

更新的答案的詳細說明 – SarthAk