最近在看算法导论,在第三章看到用递归查找的方法找出最大子数组,理解很容易,但是还是有些复杂,就在网上看了一下大牛写的动态规划法,明显简单多了。故想分享给小伙伴。由于递归方法很经典,所以也再次介绍一下。
递归方法即使将一个数组以二分法进行分成若干个子数组,在合并成所求的子数组
def max_child(arr,low,high):
if arr[low]=arr[high]:
return arr[low]
mid=(low+high)//2
m1=max_child(arr,low,mid)
m2=max_child(arr,mid+1,hig
max_left=arr[mid]
left=arr[mid]
for i in range(mid-1,low-1,-1):
max_left=max_left+arr[i]
if max_left>left:
left=max_left
max_right=arr[mid+1]
right=arr[mid+1]
for j in range(mid+2,high+1)
max_right=max_right+arr[j]
if max_right>right
right =max_right
m3=left+right
result=max(m1,m2,m3)
return result
arr=[]#任意一个数组
print(max_child(arr,0,len(arr)-1))
这种方法不好得到最大子数组的起始和终止元素的坐标
动态规划法用于求最大子数