[英]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=200
而g(x)
仍然會更大。
附帶說明一下,由於我們可以分解出常量,因此在計算大的O時間復雜度時不必計數每個操作。 您只需要查看循環。 一次發生n
次,另一次發生log(n)
次。 因此它是O(n*log(n))
。 該代碼可以在每個循環內執行1000次操作,也可以執行2次。因為常量是從我們的O方程中分解出來的,所以該數目無關緊要。 只有循環的數量和性質。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.