# given an array, it solves sum of elements in it,
# args: array, initial and final indices
# Returns: sum of elements
def ArrayTot (arr, low, high):
return sum( arr[low : high+1] )
# Is this linear time?
# args: array, initial and final indices
# returns: Max possible value in sub-array.
def MaxSubArray (arr, low, high):
# max value of sub-array
TotalArray = 0
# starts iterating arr from left - right i.e., arr[low, j]
for j in xrange(low, high+1):
# finds sum of sub array arr[low,j]
tot = ArrayTot (arr, low, j)
# Iterates the sub-array arr[low,j] so as to find any other possible arr[i,j] which results max value
for i in xrange(low, j+1):
SubArrTot = ArrayTot(arr, i, j)
if SubArrTot >= tot:
tot = SubArrTot
if tot >= TotalArray:
TotalArray = tot
return TotalArray
arr = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
low = 0
high = 15
print MaxSubArray(arr, low, high)
私はアルゴリズムを学んでいます (Book: Introduction to Algorithms)..だから、最大合計を構成する与えられた配列のサブ配列を見つけることになっています..ええ、非再帰的、線形時間アルゴリズム..
これは私がやったことです(上に表示)..しかし、私の解決策では、for
ループ内にfor
ループがあり、両方とも「n」項を繰り返します..
私が間違っていなければ、O(n^2)
どちらが直線的ではないはずです! その場合、どのように解決すればよいのでしょうか。