[英]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.