求最大子陣列
#include
using namespace std;
struct result_structure;
result_structure mid_array_sum(int*a,int low,int mid,int high)
}sum = 0;
result.high_index = mid + 1;
for (int i = mid + 1; i <= high; i++)
}result.sum = temp_left_sum + temp_right_sum;
return result;
}result_structure recursive_merge(int*a,int low,int high)
int mid = (low + high)/2;
result_left = recursive_merge(a,low,mid); //遞迴左半部分
result_right = recursive_merge(a,mid+1,high); //遞迴右半部分
result_mid = mid_array_sum(a,low,mid,high); //計算此層的和(並不是最大中間子串行,問題已經化解為三部分找最大部分)
if(result_left.sum > result_right.sum && result_left.sum > result_mid.sum)else
if(result_right.sum > result_left.sum && result_right.sum > result_mid.sum)else
return result;
}int main() ;
result_structure result = recursive_merge(a,0,3);
cout << "sum = "
<< result.sum
<"low_index = "
<< result.low_index << endl
<< "high_index = "
<< result.high_index << endl;
return
0;}
#include
#include
using
namespace
std;
struct result_struct;
result_struct find_max_array_best(int* a,int low,int high)else
if(current_sum > result.max_sum)
}return result;
}int main() ;
result_struct result = find_max_array_best(a,0,3);
cout
<< "sum = "
<< result.max_sum <"low_index = "
<< result.low_index << endl
<< "high_index = "
<< result.high_index << endl;
return
0;}
當前存在的就是這三種方法: 演算法導論之尋找最大子陣列
bool findmaxmumsubarray float a,int low,int high,float fmaxmumsum,int ifrom,int ito if low high 分段 int imid low high 2 最大子陣列要麼在left mid,或 mid 1 right,...
演算法導論 最大子陣列
之前都在準備考試,寒假還是繼續學習。除了家裡打掃衛生,似乎也確實沒什麼事。多看書,多寫 總能提高的。堅持。這次學到了函式返回值可以是乙個結構體,當我們要返回多個值的時候,就可以返回結構體。還有就是對分治法有了更深的認識。include typedef struct op op findmaxcros...
演算法導論2 最大子陣列
最大子陣列問題 假設陣列a low.high 求存在於陣列a中的連續子陣列之和 或陣列中連續元素之和 最大的子陣列,例如a 4 的最大子陣列為a 0 2 和最大為3 2 1 2。如果採用暴力求解的演算法則問題也可以很簡單的求解出來,不過這種方法的時間複雜度為 n 所以寫一下更好的方法。使用分治策略的...