利用分治法求解最大子陣列和

2021-08-19 03:21:54 字數 1105 閱讀 1871

乙個陣列的最大子陣列和可能存在於三種情況中:

1. 該陣列的左子陣列中

2.該陣列的右子陣列中

3.可能橫跨左右子陣列

所以,我們可以將問題分解成乙個個的子問題,其中情況1和2可用遞迴求解,而情況3則需要計算

s1=max (1 <= i <= n/2), s2=max (n/2+1 <= j <=n),其中情況3中s1必然包含了

s2中必然包含了

**(記錄了最大陣列和的範圍):

/*

* 利用分治法求最大子陣列問題

*/public class testone

} //求mid+1...high之間的最大陣列和

int rightsum = -10000;

sum = 0;

for(int i = mid+1;i<=high;i++)

}return leftsum + rightsum; }

public static int subarray(int a,int low,int high)

public static void main(string args) ;

system.out.println(subarray(a,0,a.length-1));

system.out.println(leftflag + " " + rightflag);

}}

**(只計算了最大陣列和,個人覺得這個更簡單,更容易理解):

public class main ;

int res = fun(arr,0,arr.length);

system.out.println(res);

} /**

* 求arr中[low,high)的最大連續和

* @param arr

* @param low

* @param high

* @return

*/public static int fun(int arr,int low,int high)

public static int max(int x, int y)

}

利用分治法求最大子陣列

利用分治法求解最大連續子陣列問題 1 將陣列均分兩段,遞迴分治。2 對於每層分治,最大子陣列要麼出現在左段或者右段,要麼出現在包含中點的連續陣列中,從中點出發向左右遍歷求最大陣列。3 每層最大子陣列為左段最大子陣列,右段最大子陣列及包含中點的最大子陣列的最大值。如下 include include ...

最大子陣列(分治法)

尋找a low,high 中的最大連續子陣列a i,j mid low high 2,欲求的最大連續子陣列出現的位置 1 出現在a low,mid 中 即 low i j mid 2 出現在a mid 1,high 中,即 mid 3 跨越了mid位置,出現在a low,high 中,即 low i...

分治法 尋找最大子陣列

include define magic 999999 子陣列結構體 struct sub array struct sub array find max crossing subarray int a,int low,int mid,int high struct sub array find m...