Arrays 为什么子阵蛮力的最大和为O(n^2)?
这是计算机科学中的著名问题 至少有两种解决方案:Arrays 为什么子阵蛮力的最大和为O(n^2)?,arrays,algorithm,computer-science,Arrays,Algorithm,Computer Science,这是计算机科学中的著名问题 至少有两种解决方案: 蛮力,找到所有可能的子数组并找到最大值 通过数组的第一个过程时,使用的变量计算全局最大值 在一段视频中,作者提到了暴力方法是O(n^2),读到这段视频时,一个人认为它是O(n^2),另一个人认为它是O(n^3) 蛮力是O(n^2)还是O(n^3)?更重要的是,你能举例说明你对蛮力方法进行了什么分析,从而知道它是O(?)?这可以用O(N)完成,如下所示!!! 我错过什么了吗 int[] arr = {}; //elements; i
O(n^2)
,读到这段视频时,一个人认为它是O(n^2)
,另一个人认为它是O(n^3)
蛮力是O(n^2)还是O(n^3)?更重要的是,你能举例说明你对蛮力方法进行了什么分析,从而知道它是O(?)
?这可以用O(N)完成,如下所示!!!
我错过什么了吗
int[] arr = {}; //elements;
int max = 0, temp = 0;
for (int i = 0; i < arr.length; i++) {
temp = Math.max(arr[i], arr[i] + temp);
max = Math.max(temp, max);
}
System.out.println(max); //result
int[]arr={}//元素;
int max=0,temp=0;
对于(int i=0;i
好吧,这取决于原力有多强大
如果我们生成所有的
(i,j):i这里有三个解决最大子阵和问题的方法solve1()
在O(N)时间内运行,solve2()
在O(N^2)时间内运行,solve3()
在O(N^3)时间内运行。请注意,solve1()
被称为卡丹算法
O(N^2)和O(N^3)函数之间的区别在于,在O(N^2)函数中,每当end
索引增加时,都会隐式计算总和,而在O(N^3)函数中,总和是通过start
和end
之间的第三个显式循环计算的
我还为所有三种方法添加了代码,以处理所有输入值均为负值的情况
公共类最大子数组和{
/**
*求解O(N)时间内的最大子阵列和。
*/
公共静态int solve1(int[]输入){
整数和=输入[0];
int bestSum=总和;
for(int i=1;i
输出为:
Input: -2, -3, 4, -1, -2, -1, -5, -3
solve1 result = 4
solve2 result = 4
solve3 result = 4
Input: -2, -3, -4, -1, -2, -1, -5, 3
solve1 result = 3
solve2 result = 3
solve3 result = 3
Input: -2, -3, -4, -1, -2, -1, -5, -3
solve1 result = -1
solve2 result = -1
solve3 result = -1
Input: -2, -3, 4, -1, -2, 1, 5, -3
solve1 result = 7
solve2 result = 7
solve3 result = 7
这就是问题中提到的Kadane算法。非常感谢您描述这两种暴力解决方案!请你解释一下你是如何知道哪个是O(n^2)哪个是O(n^3)的好吗?@mbigras注意嵌套循环的数量作为一阶近似值。啊,我明白了,嵌套循环大约决定了复杂性。当教程的作者声称他的暴力方法是O(n^2)
时,他是不是弄错了?它可以是任意的,因为它没有解释数组和是如何计算的。如果完成完整计算,则为n^3
,如果使用上一个总和,则为n^2
。
....
for(int i = 0; i < n; i++) {
int sum = 0;
for (int j = i; j < n; j++) {
sum += a[j];
if (sum > max)
max = sum;
}
}
Input: -2, -3, 4, -1, -2, -1, -5, -3
solve1 result = 4
solve2 result = 4
solve3 result = 4
Input: -2, -3, -4, -1, -2, -1, -5, 3
solve1 result = 3
solve2 result = 3
solve3 result = 3
Input: -2, -3, -4, -1, -2, -1, -5, -3
solve1 result = -1
solve2 result = -1
solve3 result = -1
Input: -2, -3, 4, -1, -2, 1, 5, -3
solve1 result = 7
solve2 result = 7
solve3 result = 7