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

2021-10-06 11:51:42 字數 1241 閱讀 1472

最大連續子串行和問題:

給定k個整數的序列,其任意連續子串行可表示為,其中 1 <= i <= j <= k。最大連續子串行是所有連續子序中元素和最大的乙個。

這個問題的求解思路有很多,可以暴力求解時間複雜度o(n3),也可以使用動態規劃求解時間複雜度o(n),下面的**是採用的分治遞迴求解的時間複雜度o(nlogn)。

def

getcrosssummax

(mylist,lownum,highnum)

: mid=

int(

(lownum+highnum)/2

) i=mid

j=mid+

1 lowsum=mylist[i]

highsum=mylist[j]

tempsum=

0while i>=lownum:

tempsum+=mylist[i]

if tempsum>lowsum:

lowsum=tempsum

i-=1 tempsum=

0while j<=highnum:

tempsum+=mylist[j]

if tempsum>highsum:

highsum=tempsum

j+=1return highsum+lowsum

deffindmaxlist

(mylist,lownum,highnum):if

(lownum==highnum)

:return mylist[lownum]

mid=

int(

(lownum+highnum)/2

) low=findmaxlist(mylist,lownum,mid)

high=findmaxlist(mylist,mid+

1,highnum)

cross=getcrosssummax(mylist,lownum,highnum)

return

max(low,high,cross)

if __name__==

"__main__"

: testlist=[-

2,1,

-3,4

,-1,

2,1,

-5,4

]print

(findmaxlist(testlist,0,

len(testlist)-1

))

最大子串行和 連續

最大子串行和 連續 include using namespace std int maxsum int a,int n return sum int main 測試全是負數的用例 cout 4 cout 8 pause return 0 比如陣列 1,2,3,10,4,7,2,5 最大子串行和為1...

最大子串行和 連續or不連續

coding utf 8 created on sun oct 14 21 10 28 2018 author dell 功能 最大子串行問題 def test func num list 求陣列中最大子串行的和,子串行可以不連續 也可以寫成if判斷語句只累加整數即可 n len num list ...

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

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