Find Maximum Subarray

FIND-MAX-CROSSING-SUBARRAY(A, low, mid, high)
 left-sum = - infty // It is INT_MIN in c in limits.h
 sum = 0
 for i = mid downto low
     sum = sum + A[i]
     if sum > left-sum
     	left-sum = sum
       max-left = i
 right-sum = - infty // It is INT_MIN in c in limits.h
 sum = 0
 for j = mid + 1 to high
     sum = sum + A[j]
     if sum > right-sum
         right-sum = sum
         max-right = j
 return (max-left, max-right, left-sum + right-sum)
FIND-MAXIMUM-SUBARRAY(A, low, high)
 if high == low
     return (low, high, A[low]) // base case: only one element
 else mid = (low + high)/2
     (left-low, left-high, left-sum) = FIND-MAXIMUM-SUBARRAY(A, low, mid)
     (right-low, right-high, right-sum) = FIND-MAXIMUM-SUBARRAY(A, mid+1, high)
     (cross-low, cross-high, cross-sum) = FIND-MAX-CROSSING-SUBARRAY(A, low, mid, high)
     if left-sum >= right-sum and left-sum >= cross-sum
         return (left-low, left-high, left-sum)
     elseif right-sum >= left-sum and right-sum >= cross-sum
         return (right-low, right-high, right-sum)
     else return (cross-low, cross-high, cross-sum)

Comments

Popular posts from this blog

BdsDex: failed to load Boot0001 "UEFI BHYVE SATA DISK BHYVE-OABE-20A5-E582" from PciRoot(0x0)/Pci (0x2, 0x0)/Stat(0x0,0xFFFF,0x0) : Not Found

How To Install Nginx, MySQL and PHP (FEMP) Stack on FreeBSD 13.0

Install samba on FreeBSD(on VMware Workstation) to share files with Window.