2017-03-01 49 views
-1

如何獲取ThreeSum.java中函數count和printall的時間複雜度?如何找到3Sum.java的漸近複雜度

public static void printAll(int[] a) { 
    int n = a.length; 
    for (int i = 0; i < n; i++) { 
     for (int j = i+1; j < n; j++) { 
      for (int k = j+1; k < n; k++) { 
       if (a[i] + a[j] + a[k] == 0) { 
        System.out.println(a[i] + " " + a[j] + " " + a[k]); 
       } 
      } 
     } 
    } 
} 


public static int count(int[] a) { 
    int n = a.length; 
    int count = 0; 
    for (int i = 0; i < n; i++) { 
     for (int j = i+1; j < n; j++) { 
      for (int k = j+1; k < n; k++) { 
       if (a[i] + a[j] + a[k] == 0) { 
        count++; 
       } 
      } 
     } 
    } 
+0

僅在此處張貼您的代碼。 –

+0

好的謝謝:)完成 – unnieyah

+0

你不必把這個評論放在你自己的問題上,如果他們發現它是重複的,其他人會這樣做。 –

回答

0

雖然時間複雜性問題有時非常艱難,但這是一個簡單的蛋糕。你可以簡單地檢查出來如下,

for (int i = 0; i < n; i++) // it runs for n times 
     for (int j = i+1; j < n; j++) // it runs for n-i-1 time 
      for (int k = j+1; k < n; k++) // it runs for n-j-1 times 

現在,因爲他們是嵌套的循環,這意味着每一個內循環運行儘可能多的次數外環。

total = n * (n-i-1) * (n-j-1) 
     = n^3 ... // ignoring all other lower power terms 

所以這段代碼的時間複雜度將是O(n^3)

+0

謝謝你:D ... – unnieyah

+0

如果它可以幫助你友善地接受答案,以便其他人也可以從中獲得幫助。 –

+0

完成。所以if語句根本不會影響時間複雜性? – unnieyah