
所以,我必须找到连续子集的最大和,我在python中遵循这个算法。
def SubSeq(list):
final_list = None
suming = 0
for start in range(len(list)):
for end in range(start+1, len(list)+1):
subseq = list[start:end]
summation= sum(list[start:end])
if summation > suming:
suming = summation
final_list = subseq
return final_list
print SubSeq([5, 15, -30, 10, -5, 40, 10])我想知道这是否是一种正确的动态编程方式,尽管运行时间是O(n^2)。另外,有没有可能让它成为O(n)
发布于 2015-06-11 11:40:52
基本上是再次计算和,again.You可以通过将和存储在数组中来避免这种情况。你可以用O(n)来做。
设S0,1.n-1是序列设T0,1,.n-1是从i元开始的最大连续和。
现在要填充Ti,从相反开始。Tn-1=最大值(Sn-1,0)
现在Ti=max(Ti+1+Si,Si ,0)
现在,遍历'T‘数组,找到最大和。
设Tm为最大值。
计算从Sm开始的精确序列,并将所有元素加到和等于Tm为止
https://stackoverflow.com/questions/30779358
复制相似问题