这是我对findMaximumSubarray的解决方案,我遵循CLRS伪代码算法,但遇到此递归错误,我试图找出原因,但是却无济于事!
我无法理解递归的这一部分,第一行是找到左除数组,直到到达一个元素的基本情况为止,然后我的大脑在发抖,我无法想象在那之后会发生什么!
leftLow,leftHigh,leftSum = FindMaxSubarray(array,low,mid)
rightLow,rightHigh,rightSum = FindMaxSubarray(array,mid,high)
crossLow,crossHigh,crossSum = MaxCrossSubarray(array,high)
这是整个代码。
array = [0,1,-2,3,4,5,-1,10,11,9,-5,-10,12]
low = 0
high = len(array)
mid = len(array)//2
def MaxCrossSubarray(array,high):
sum = 0
left_sum = float('-inf')
for i in range(mid,-1):
sum = sum+array[i]
if sum > left_sum:
left_sum = sum
max_left = i
right_sum = float('-inf')
sum = 0
for i in range(mid+1,high):
sum = sum+array[i]
if sum > right_sum:
right_sum = sum
max_right = i
return (max_left,max_right,left_sum+right_sum)
def FindMaxSubarray(array,high):
if high == low :
return (low,high,array[low])
else:
mid = (high+low)//2
leftLow,mid)
rightLow,high)
crossLow,high)
if leftSum >= rightSum and leftSum >=crossSum:
return (leftLow,leftSum)
elif rightSum >= leftSum and rightSum >=crossSum:
return (rightLow,rightSum)
else:
return (crossLow,crossSum)
low,sum = FindMaxSubarray (array,high)