資料結構學習筆記 求最大子列和(C語言實現)

2021-10-08 01:38:26 字數 2765 閱讀 7311

給定k個整數組成的序列,「連續子列」被定義為,其中 1 ≤ i ≤ j ≤k。

「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

根據浙大資料結構課程中的**編寫,細節有修改,四種演算法。

時間複雜度 t(n) = o(n3)

#include

int arr[

100000]=

;int

maxsubsequencesum1

(int n )

;//一開始寫的時候沒有看課件,自己沒把陣列寫進引數裡,這裡不修改,留作對比

intmain()

int maxsubsum =0;

maxsubsum =

maxsubsequencesum1

( n )

;printf

("%d"

, maxsubsum)

;return0;

}//暴力演算法 : 窮舉

intmaxsubsequencesum1

(int n )

if( subsequencesum > maxsum )}}

return maxsum;

}

時間複雜度 t(n) = o(n2)

#include

int arr[

100000]=

;int

maxsubsequencesum2

(int a,

int n )

;int

main()

int maxsubsum =0;

maxsubsum =

maxsubsequencesum2

( arr, n )

;printf

("%d"

, maxsubsum)

;return0;

}//改進版:演算法2-兩重迴圈

intmaxsubsequencesum2

(int a,

int n )}}

return maxsum;

時間複雜度 t(n) = o(nlogn)

#include

int arr[

100000]=

;int

max(

int a,

int b,

int c)

;int

maxsubsequencesum3

(int list,

int left,

int right )

;int

main()

int maxsubsum =0;

int left =

0, right = n-1;

maxsubsum =

maxsubsequencesum3

( arr, left, right )

;printf

("%d"

, maxsubsum)

;return0;

}int

max(

int a,

int b,

int c)

//分治法:分而治之(遞迴)

intmaxsubsequencesum3

(int list,

int left,

int right )

center =

(left + right)/2

; maxleftsum =

maxsubsequencesum3

( list, left, center )

; maxrightsum =

maxsubsequencesum3

( list, center+

1, right );

maxleftbordersum =

0, leftbordersum =0;

for( i=center; i>=left; i--)

maxrightbordersum =

0, rightbordersum =0;

for( i=center+

1; i<=right; i++)

maxbordersum = maxleftbordersum + maxrightbordersum;

return

max(maxleftsum, maxrightsum, maxbordersum)

;}

時間複雜度 t(n) = o(n)

#include

int arr[

100000]=

;int

maxsubsequencesum4

(int a,

int n )

;int

main()

int maxsubsum =0;

maxsubsum =

maxsubsequencesum4

( arr, n )

;printf

("%d"

, maxsubsum)

;return0;

}int

maxsubsequencesum4

(int a,

int n )

return maxsum;

}

資料結構學習 最大子列和

k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 輸入第1行給出正整數k ...

資料結構 求最大子列和

陳越姥姥已經講得很好了 傳送門,我只做記錄方便回顧。四種演算法 1.暴力,演算法複雜度 o n 3 2.暴力,演算法複雜度 o n 2 3.分治法 遞迴 演算法複雜度 o nlogn 4.及時處理,演算法複雜度 o n includeint a 100000 int whoismax int i,i...

學習筆記 資料結構 演算法 求最大子列和

學習筆記 資料結構 演算法 求最大子列和 一 一般演算法 int maxsum int a,int n if thissum maxsum 時間複雜度為o n 3 二 簡單優化演算法 int maxsum int a,int n 在取子列右端時便計算子列和,少了一層計算子列和的迴圈 時間複雜度為o ...