Algorithm 返回错误输出的最大和子阵列

Algorithm 返回错误输出的最大和子阵列,algorithm,python-3.x,divide-and-conquer,Algorithm,Python 3.x,Divide And Conquer,算法看起来是正确的,无法找出错误所在。代码从8返回到10是最大子数组,总共32个。但实际答案是8比11,总共43个 import sys import math def maxtuple(lss,rss): if lss[2] > rss[2]: return lss else: return rss def crosssubarray(A, start, mid, end): ls=rs=-sys.maxsize maxleft=0 max

算法看起来是正确的,无法找出错误所在。代码从8返回到10是最大子数组,总共32个。但实际答案是8比11,总共43个

import sys
import math

def maxtuple(lss,rss):
  if lss[2] > rss[2]:
      return lss
  else:
      return rss

def crosssubarray(A, start, mid, end):
  ls=rs=-sys.maxsize
  maxleft=0
  maxright=0
  sum = 0;
  for i in reversed(range(start, mid)):
    sum = sum + A[i]
    print(i)
    if sum > ls:
        ls = sum
        maxleft = i
  sum = 0
  for i in range(mid+1, end):
    sum = sum+ A[i]
    if sum > rs:
        rs = sum
        maxright = i
  return (maxleft, maxright, ls+rs)

def maxsubarray(A,start,end):
  if start == end:
    return (start,end,A[start])
  else:
    mid = (start+end)/2
    lss = maxsubarray(A, start, mid)
    rss = maxsubarray(A, mid+1, end)
    css = crosssubarray(A, start, mid, end)
    maxsub = maxtuple(lss,rss)
    maxall = maxtuple(maxsub, css)
    return maxall`enter code here`

A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
print(maxsubarray(A,0,15))

问题是rangestart、mid产生start、start+1、…、mid-1,但不包括mid

这意味着您的交叉子阵列不包括中间值

相反,请尝试:

for i in reversed(range(start, mid+1)):

对不起,实际输出应该是7到10,总共43个