私は本の「アルゴリズムの紹介」(第4章)に従って、この最大サブアレイアルゴリズムを実装しようとしています。実行することはできますが、結果は正しくありません。私はここで論理的な問題を見つけることができません。ありがとうございました。最大サブアレイを見つけようとする私のアルゴリズムがなぜ機能しないのですか?
def find_max_crossing_subarray(A,low,mid,high):
leftSum=float('-inf')
result=0 ## left_max_sum of midpoint
maxLeft=0
maxRight=0
for i in range(mid,low,-1):
result=result+A[i]
if result>leftSum:
leftSum=result
maxLeft=i
rightSum=float('-inf')
result2=0 ##right_max
for j in range(mid+1,high,1):
result2=result2+A[j]
if result2>rightSum:
rightSum=result2
maxRight=j
Result=result+result2
return maxLeft,maxRight,Result
def find_maximum_subarray(A,low,high):
if low==high:
return low, high, A[low]
else:
mid=(low+high)//2
leftLow,leftHigh,leftSum=find_maximum_subarray(A,low,mid)
rightLow,rightHigh,rightSum=find_maximum_subarray(A,mid+1,high)
crossLow, crossHigh,crossSum=find_max_crossing_subarray(A,low,mid,high)
if leftSum>=rightSum and leftSum>=crossSum:
return leftLow,leftHigh,leftSum
elif rightSum>=leftSum and rightSum>=crossSum:
return rightLow, rightHigh, rightSum
else:
return crossLow,crossHigh,crossSum
A=[1,2,30,21]
print (find_maximum_subarray(A,0,len(A)-1))
Lokksが長すぎます* Pythonプログラムについては、このような小さなタスクを達成するためのビットが... –
はデバッグやそれを介してステッピングを試してみましたか*? – tisaconundrum