最大子串行分治實現以及改進

2021-08-06 07:13:20 字數 1007 閱讀 9059

最大子串行,一開始我是用比較方便的向量的:

#include #include #include #includeusing namespace std;

vectorf_m_c_s(vector&a,int low,int mid,int high)}

int right_sum=int_min;

sum=0;

int max_right;

for(int j=mid;j!=high;++j)}

return vector;}

vectorf_m_s(vectora,int low,int high);}

else

else if(right_sum>=left_sum && right_sum>=cross_sum)

else }}

但是格式十分麻煩,看了網上的答案之後,發現可以定義乙個類,專門用來儲存三個數字。

實現:

typedef struct ma;

這樣把上面的分治方法再寫一次:

ma f_m_c_s_ma(int a, unsigned low, unsigned mid, unsigned high)}

int right_sum=int_min;

sum=0;

for(int j=mid;j!=high;++j)}

result.sum=left_sum+right_sum;

return result;}

ma f_m_s_ma(int a,unsigned low,unsigned high);

return result;}

else

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

else }}

理論上是沒有錯的

最大子串行和(分治求法)

這已經是一道家喻戶曉的題了,給出乙個陣列,裡面是一串數字,求出子串行中和最大的,輸出這個和。思路 這道題有很多經典解法,其中最典型應該是動態規劃,而我們今天要討論的是用二分法怎麼求解這道題。include using namespace std int aleng int f int a,int b...

最大子串行和以及最大矩陣和

做題的時候遇到了乙個最大矩陣和,搜了一下是從最大子串行和演變而來的,所以先做一下最大子串行和。這個有乙個需要注意的事情是,如果矩陣裡面所有的元素都是負值,可以返回0,也可以返回最大負數,看具體題目要求 對陣列來說,乙個最大的子串行可以通過遍歷從每乙個位置開始的序列中得到,所以我們遍歷如a1,a2,a...

分治演算法 連續最大子串行和問題

最大連續子串行和問題 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個。這個問題的求解思路有很多,可以暴力求解時間複雜度o n3 也可以使用動態規劃求解時間複雜度o n 下面的 是採用的分治遞迴求解的時間複雜度o nlogn def ...