簡體   English   中英

如何確定看起來像這樣的東西的大O:(x -1)+(x-2)+(x-3)…(x-x)

[英]How to determine big O of something that looks like this: (x -1) + (x - 2) + (x - 3) … (x - x)

我正在嘗試重新計算我的大頭緒。 如果我有將所有項目移到'i'2個空格右側的函數,則我的公式看起來像:

(n -1) + (n - 2) + (n - 3) ... (n - n)

在第一次迭代中,我必須移動(x-1)個項目,在第二個(x-2)項目中移動,依此類推...方法:

int[] s = {1,2,3,4, , }

public static char[] moveStringDownTwoSpaces(char[] s){
    for(int j = 0; j < s.length; j++){

    for(int i = s.length-3; i > j; i--){
        s[i+2] = s[i];
    }
    return s;
    }
}

我知道這是O(n ^ 2),但我不太了解轉換此函數的數學原理:

(n -1) + (n - 2) + (n - 3) ... (n - n)

進入這個

O(n^2)

在我看來,如果n = 5(字符串的長度為5),我將...

(5-1) + (5-2) + (5-3) + (5-4) + (5-5) = 5(5 - ???)

這是

(n-1) + (n-2) + (n-3) + (n-4) + (n-5) = n(n - ???)

這樣我得到5 * 5 = 25,即n ^ 2。 但是什么是??? 我不知道要在公式中為變量添加什么。 我什至不知道我是否正以這種正確的方式前進。 我又忘了怎么做數學:(

(n -1) + (n - 2) + (n - 3) ... (n - n)

只需將以下內容重寫為:

1 + 2 + 3 + ....+ (n-1)

等於: (n(n+1)/2 - n)

現在您可以看到它是O(n^2)

正如@hvd所指出的,您可能希望將return語句放在循環之外。

Big-O表示法不是確切的上限。 這是一個漸近的上限。 在許多情況下,算法可能看起來像O(n ^ 2),但攤銷分析可能會顯示線性順序復雜度。

暫無
暫無

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

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