Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. import math
  2.  
  3. def FIND_MAX_CROSS_SUBARRAY(A,low,mid,high):
  4. left_sum = math.inf*-1
  5. tsum = 0
  6. for i in range(mid,low-1,-1):
  7. tsum = tsum + A[i]
  8. if (tsum > left_sum):
  9. left_sum = tsum
  10. max_left = i
  11. right_sum = math.inf*-1
  12. tsum = 0
  13. for j in range(mid+1,high+1):
  14. tsum = tsum + A[j]
  15. if (tsum > right_sum):
  16. right_sum = tsum
  17. max_right = j
  18. return(max_left,max_right,left_sum+right_sum)
  19.  
  20.  
  21. def FIND_MAX_SUBARRAY(A,low,high):
  22. if (high == low):
  23. return (low,high,A[low])
  24. else:
  25. mid = math.floor((low+high)/2)
  26. (left_low,left_high,left_sum) = FIND_MAX_SUBARRAY(A,low,mid)
  27. (right_low,right_high,right_sum) = FIND_MAX_SUBARRAY(A,mid+1,high)
  28. (cross_low,cross_high,cross_sum) = FIND_MAX_CROSS_SUBARRAY(A,low,mid,high)
  29. if (left_sum >= right_sum) and (left_sum >= cross_sum):
  30. return (left_low,left_high,left_sum)
  31. elif (right_sum >= left_sum) and (right_sum >= cross_sum):
  32. return (right_low,right_high,right_sum)
  33. else: return (cross_low,cross_high,cross_sum)
  34.  
  35. def main():
  36. print("Find Maximum Subarray")
  37. A = eval(input('Enter array:'))
  38. (i, j, max_sum) = FIND_MAX_SUBARRAY(A,0,len(A)-1)
  39. print("Output(i,j,max_sum,A[i:j]): ",i,j,max_sum,A[i:j+1])
  40.  
  41. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement