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