分治法 尋找最大子陣列

2021-07-05 02:44:53 字數 1167 閱讀 9093

#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_maximum_subarray(int a, int low, int high);

int main(void)

; /* 最大連續子陣列 */

struct sub_array max = find_maximum_subarray(array, 0, 15);

printf("最大子陣列為:\n");

for (int i = max.low; i <= max.high; i++)

/* 最大連續子陣列的和 */

int sum = 0;

int max = -(1 << 31);

int cur = 0;

while (cur < 16)

else if (sum < 0)

}printf("%d\n", max);

return 0;

}struct sub_array find_max_crossing_subarray(int a, int low, int mid, int high) }

sum = 0;

for (j = mid + 1; j < high; j++) }

res.low = max_left;

res.high = max_right;

res.sum = left_sum + right_sum;

return res;

}/* 最大連續子陣列要麼是陣列的左半部分a[0 ~ mid - 1],要麼是陣列的右半部分a[mid ~ n],要麼是左半一部分加右半一部分a[0 ~ n] */

struct sub_array find_maximum_subarray(int a, int low, int high)

else

else if (right.sum >= left.sum && right.sum >= cross.sum)

else

}}

最大子陣列(分治法)

尋找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...

演算法導論 分治法 最大子陣列

題目描述 給定義陣列a,長度為n,找出陣列a中的最大子陣列,例如陣列a 則最大子陣列為。使用分治策略的求解方法 假定我們要尋找子陣列a low.high 的最大子陣列,使用分治法意味著我們要將子陣列劃分為兩個規模盡可能相等的子陣列。也就是說,找到子陣列的 位置,比如mid,然後求解兩個子陣列a lo...

利用分治法求最大子陣列

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