最大子陣列問題

2022-05-23 12:30:19 字數 1689 閱讀 1320

1. 問題描述

對於陣列(如下),求解其最大子陣列.

結果為:

2. 演算法設計

採用遞迴的方法求解

a. 求解陣列左半部分的最大子陣列

b. 求解陣列右半部分的最大子陣列

c. 求解整個陣列的最大子陣列

d. 比較a,b,c求出的結果,選出乙個最大值,即為最終結果.

3. 資料結構設計

a. 中間結果的三元組,(子陣列下標,子陣列上標,子陣列和)

1

class

tuple

26 };

b. 陣列元素

1  std::vector m_array;
4. 演算法實現

演算法實現檔案: calc_max_subarray.h

1 #include 2 #include 3 #include 4 #include 5

6using

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 };

main.cpp

1 #include2 #include "

calc_max_subarray.h"3

4using

namespace

std;

5using

namespace

nsp_subarray;67

intmain()

8

6. 檔案內容

檔案為: 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...