用三種方法實現最大子列和的求解(Python實現)

2021-08-03 01:20:03 字數 1805 閱讀 1139

問題描述:給定n個整數的序列, 求該序列的最大子列和。
作業系統:windows 10  編譯環境:pycharm  程式語言:python3.6
實現思路:首先得有資料,所以先用**實現隨機列表的生成,隨後用三種演算法實現,並在主函式中實現函式的呼叫以及結果的輸出
import random

#生成隨機列表 start和stop分別代表所需要列表元素的大小範圍,length代表列表的長度

def random_int_list(start, stop, length):

start, stop = (int(start), int(stop)) if start <= stop else (int(stop), int(start))

length = int(abs(length)) if length else 0

random_list =

for i in range(length):

return random_list

def main():

n = 10

a = random_int_list(-20, 20, n)

maxsum = maxsubseqsum1(a, n)

maxsum2= maxsubseqsum2(a, n)

maxsum3= maxsubseqsum3(a, n)

#分別用三種演算法實現並輸出結果

print(maxsum)

print(maxsum2)

print(maxsum3)

#用最基礎的方法來實現最大子列和,演算法複雜度o(n*n*n)

def maxsubseqsum1(a, n):

thissum, maxsum = 0, 0

for i in range(n): #i代表子列的左端位置

for j in range(i, n):#j代表子列的左端位置

thissum = 0 #thissum是從a[i]到a[j]的子列和

for k in range(i, j+1):

thissum += a[k]

if thissum > maxsum: #如果剛得到的這個子列和更大

maxsum = thissum #則更新結果

return maxsum

#在上面那個演算法做了一些修改使演算法複雜度降低,演算法複雜度o(n*n)

def maxsubseqsum2(a, n):

thissum, maxsum = 0, 0

for i in range(n):

thissum = 0

for j in range(i, n):

thissum += a[j] #只在前乙個和上增加乙個元素得到新的和

if thissum > maxsum:

maxsum = thissum

return maxsum

def maxsubseqsum3(a, n):

thissum, maxsum = 0, 0

for i in range(n):

thissum += a[i] #向右累加

if thissum > maxsum:

maxsum = thissum #發現更大和則更新當前結果

elif thissum<0: #如果當前子列和為負數

thissum=0 #則不可能使後面的部分和增大,則該拋棄掉

return maxsum

main()

最大子段和 三種方法

今天參加了一場洛谷網的比賽,深受打擊.寒假過了這麼多天,一直沒有認真學習演算法,以至於現在的水平比兩個月前還要低.本來就沒有多少底子,又退步了許多,感慨萬分.在洛谷上看到這麼一道題 最大子段和 如果資料小的話,用暴力列舉很簡單就可以做出來了,時間按複雜度位o n 3 可是一道演算法題怎麼會這麼簡單呢...

最大子列和(C語言 4種方法)

主函式 呼叫不同的函式,更改這句就ok max maxsubseqsum4 a,n int main return maxsum int maxsubseqsum2 int a,int n return maxsum int max int a,int b,int c int divideandco...

求最大子列和的四種方法

includeint maxsubseqsum2 int a,int n return maxsum int main int i,n scanf d n for i 0 i int max3 int a,int b,int c int divideandconquer int list,int l...