給定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 ...