用Python 學習資料結構與演算法 六 最大子串行

2021-07-17 03:41:50 字數 2262 閱讀 2036

實現最大子串行,其主要需要注意的是』連續』一詞。

然而我在檢視《演算法導論》書本時,發現**本身無問題,同樣的遞迴**在c++中是可以正常執行的,在python當中卻無法正常執行,需要新增哨兵才可以正常的使用。

注:**本身無問題

上**:

#coding=utf-8

class

infotype:

def__init__

(self, leftpos, rightpos, value):

self.__leftpos = leftpos

self.__rightpos = rightpos

self.__value = value

defgetleftpos

(self):

return self.__leftpos

defgetrightpos

(self):

return self.__rightpos

defgetvalue

(self):

return self.__value

def__str__

(self):

return

', , '. format(self.getleftpos(), self.getrightpos(), self.getvalue())

deffindmaxcrossingsubarray

(array, low, mid, high):

leftsum = -100000000

maxleftpos = 0

maxsum = 0

for i in range(mid, low, -1):

maxsum = maxsum + array[i]

if maxsum > leftsum:

leftsum = maxsum

maxleftpos = i

#print(leftsum, maxsum, i)

rightsum = -100000000

maxrightpos = 0

maxsum = 0

for i in range(mid + 1, high):

maxsum = maxsum + array[i]

if maxsum > rightsum:

rightsum = maxsum

maxrightpos = i

return infotype(maxleftpos, maxrightpos, leftsum + rightsum)

deffindmaximumsubarray

(array, low, high):

if low == high:

return infotype(low, high, array[low])

mid = (low + high) // 2

leftmaxsubarray = findmaximumsubarray(array, low, mid)

rightmaxsubarray = findmaximumsubarray(array, mid + 1, high)

midmaxsubarray = findmaxcrossingsubarray(array, low, mid, high)

if leftmaxsubarray.getvalue() >= rightmaxsubarray.getvalue() and \

leftmaxsubarray.getvalue() >= midmaxsubarray.getvalue():

return leftmaxsubarray

elif rightmaxsubarray.getvalue() >= leftmaxsubarray.getvalue() and \

rightmaxsubarray.getvalue() >= midmaxsubarray.getvalue():

return rightmaxsubarray

else:

return midmaxsubarray

if __name__ == '__main__':

import sys

sys.setrecursionlimit(1000)

a = [0, 4, 1, 5, 7, 3, 9, 11, 2, 6, 3, 7, 0]

result = findmaximumsubarray(a, 0, len(a) - 1)

print(result)

ps:兩頭的』0』為哨兵。

用python學習資料結構與演算法 堆疊

堆疊 堆疊 stack 是一種後進先出 lifo 的線性資料結構,對堆疊的插入和刪除操作都只能在棧頂 top 進行。棧和佇列主要用於計算過程中儲存臨時資料。堆疊 adt 抽象資料型別 一般提供以下介面 stack 建立堆疊 push item 向棧頂插入項 pop 返回棧頂的項,並從堆疊中刪除該項 ...

用Python 學習資料結構與演算法 三 選擇排序

選擇排序是將陣列從開始按順序找出相應位置上合適的元素,到達n位置時則不用再尋找該位置元素,因為這時所有元素已經就位。上 coding utf 8 defselectsort array i 0 只用選n 1個數進行排序,因為選到最後第n個數是不用排序的 for x in range 0,len ar...

用Python 學習資料結構與演算法 四 歸併排序

歸併排序主要的過程是將大陣列拆分為小陣列,再將小陣列問題解決,然後歸併處理組成新無問題的陣列再次歸併。上 coding utf 8 歸併運算 array 陣列 lpos 左座標 mpos 中座標 rpos 右座標 defmerge array,lpos,mpos,rpos 切片左右陣列 leftar...