簡體   English   中英

時間復雜度:While循環和嵌套的for循環[java]

[英]Time Complexity: While loop with nested for Loop[java]

因此,我才剛剛開始學習時間復雜性,對此我有些“了解”,但是我對如何處理此代碼段有些困惑。 我讀過其他文章,但是除非有人拒絕我要說的話,否則我很難掌握所有內容。 有點像打耳光。

public int example(int[] array) {

    int result = 15;
    int i = array.length;

    while(i > 1)
    {
      for(int x = 0; x < array.length;x++)
      {
        result+= 1;
        result+=2*array[x];
      }
      i = i/2; 
    }
return result;
}

好吧,我只算算術運算。 根據我的信念,如果我錯了(可能是錯),請糾正我,

x ++發生n次。

result + = 1次發生n次。

結果+ = 3 * array [x]發生2n次

共計4n

並且我= i / 2發生登錄時間

那么正確的方程式是4nlogn ??

您使用4n*log(n)處在正確的軌道上。 但是,請注意,由於O時間復雜度較大,因此將刪除常量,因此將為O(n*log(n))

由於O定義大而刪除了常數:如果f(z) <= c*g(z)對於所有z >某個數,則f(x)O(g(x)) 這里的關鍵是c ,它可以是任何常數。 即使您的f(x)100x您仍然可以擁有c=200g(x)仍然會更大。

附帶說明一下,由於我們可以分解出常量,因此在計算大的O時間復雜度時不必計數每個操作。 您只需要查看循環。 一次發生n次,另一次發生log(n)次。 因此它是O(n*log(n)) 該代碼可以在每個循環內執行1000次操作,也可以執行2次。因為常量是從我們的O方程中分解出來的,所以該數目無關緊要。 只有循環的數量和性質。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM