1. 問題描述
對於陣列(如下),求解其最大子陣列.
結果為:
2. 演算法設計
採用遞迴的方法求解
a. 求解陣列左半部分的最大子陣列
b. 求解陣列右半部分的最大子陣列
c. 求解整個陣列的最大子陣列
d. 比較a,b,c求出的結果,選出乙個最大值,即為最終結果.
3. 資料結構設計
a. 中間結果的三元組,(子陣列下標,子陣列上標,子陣列和)
1b. 陣列元素class
tuple
26 };
1 std::vector m_array;4. 演算法實現
演算法實現檔案: calc_max_subarray.h
1 #include 2 #include 3 #include 4 #include 5main.cpp6using
namespace
std;78
namespace
nsp_subarray915
};16
17class
subarray
1823
24virtual ~subarray(){}
2526
void init_data(string
filename)
2735}36
37 inline int get_array_size()
3839 tuple find_max_crossing_subarray(int low, int mid, int
high)
4057}58
59 sum = 0;60
for (int i = mid + 1; i <= high; i++)
6168}69
70return tuple(m_maxleft, m_maxright, m_leftsum +m_rightsum);71}
7273 tuple find_maximum_subarray(int low, int
high)74
79else
if (low
92else
if (tright.sum >= tleft.sum && tright.sum >=tcross.sum)
9396
else
97100
}101
}102
};103 };
1 #include2 #include "6. 檔案內容calc_max_subarray.h"3
4using
namespace
std;
5using
namespace
nsp_subarray;67
intmain()
8
檔案為: a.txt,內容如下.
13 -3 -25 20 -3 -16 -23 18 20 -7 12 -5 -22 15 -4 7
最大子陣列問題
顧名思義,最大子陣列問題是求乙個陣列array中 和最大的非空連續子陣列 這樣的連續子陣列我們叫做最大子陣列,它的應用也有 很多,比如說找出時間序列中兩個時間節點使得這兩個時間節點對應的值的落差最大,如下圖 對於這類問題,通過求原始時間序列的一階差分得到序列array,此時求得array的最大子陣列...
最大子陣列問題
include include include typedef struct num num extern void displayarray const int a,const int n 顯示陣列元素值 extern void buildarray int a,const int n 陣列元素賦...
最大子陣列問題
每週堅持搞三種演算法問題,介紹一下最大子陣列問題 演算法思路 分治策略求解,將問題不斷分為更小的問題,進而求解 問題描述 求陣列中相連著的數 相加值最大,例如 輸出最大為2 3 4 21 22 define crt secure no warnigns include include include...