最大子段和

2021-07-09 07:41:37 字數 1805 閱讀 6694

public class maxsegmentsum ,1<=i<=j<=n

例如:(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)時,最大子段和為20。

*//*最大子段和的簡單演算法

從這個演算法來看,它所需的時間為o(n^3)

*/    

public static int getmaxsegmentsumone(int array)}}

system.out.println("陣列第"+(besti+1)+"個到"+(bestj+1)+"個數最大,最大和為"+sum);

return sum;}/*

(a[i]+a[i+1]+...+a[j])=a[j]+(a[i]+a[i+1]+...+a[j-1])    

上述只需o(n^2)

*/    

public static int getmaxsegmentsumtwo(int array)}}

system.out.println("陣列第"+(besti+1)+"個到"+(bestj+1)+"個數最大,最大和為"+sum);

return sum;}/*

最大子段和的分治演算法

我們可以將a[1:n]分為a[1:n/2]和a[n/2+1:n],分別求出這兩段的最大子段和

(1)a[1:n]的最大子段和與a[1:n/2]的最大子段和

(2)a[1:n]的最大子段和與a[n/2+1:n]的最大子段和

(3)a[1:n]的最大子段和與a[i]+a[i+1]...a[j],且1<=i<=n/2,n/2+1<=j<=n

對應的時間複雜度t(n)

t(n)=2t(n/2)+o(n),故時間複雜度為t(n)=o(nlogn)

*/    

public static int getmaxsegmentsumthree(int array,int left,int right)else  

}int s2=0;

int rights=0;

for(int i=center+1;i<=right;i++)

}sum=s1+s2;

if(sum=0時,b[j]=b[j-1]+a[j],

否則,b[j-1]<0,時,b[j]=max(a[i]+a[i+1]+...+a[j])=a[j]

故動態規劃為:

b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n

*/    

public static int getmaxsegmentsumfour(int array)else

if(b>sum)

}return sum;

}public static void main(string args) ;

int maxsegment=getmaxsegmentsumone(array);

system.out.println("maxsegmentone="+maxsegment);

maxsegment=getmaxsegmentsumtwo(array);

system.out.println("maxsegmenttwo="+maxsegment);

maxsegment=getmaxsegmentsumthree(array,0,array.length-1);

system.out.println("maxsegmentthree="+maxsegment);

maxsegment=getmaxsegmentsumfour(array);

system.out.println("getmaxsegmentsumfour="+maxsegment);}}

最大子段和

設a 是n個整數的序列,稱為該序列的子串行,其中1 i j n.子串行的元素之和稱為a的子段和.例如,a 2,11,4,13,5,2 那麼它的子段和是 長度為1的子段和 2,11,4,13,5,2 長度為2的子段和 9,7,9,8,7 長度為3的子段和 5,20,4,6 長度為4的子段和 18,15...

最大子段和

問題表述 n個數 可能是負數 組成的序列a1,a2,an.求該序列 例如 序列 2,11,4,13,5,2 最大子段和 11 4 13 20。1 窮舉演算法 o n3 o n2 2 分治法 將序列a 1 n 從n 2處截成兩段 a 1 n 2 a n 2 1 n 例項 三 最大子段和 問題表述 n個...

最大子段和

再給頂的n個數的陣列中選出連續的若干個數,使得他們的和是最大的,即最大連續自序列和.列如.序列.1 2 3 1 6 5 9 結果 當取子串行 3,1,6,5,9 結果12 我的思路.1.最大連續子串行的開頭是在1.n之中.的最大連續和 2.求出以i,開頭的最大連續和,此時開頭已經確定了,那麼通過列舉...