問題描述:給定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...