目录
(2)疑问一:当子序列之和为非正数时,为何不能继续使用该序列?
(3)疑问二:当子序列之和为非正数时,为何不从子序列中的任一元素开始往后扫描,而是从子序列之后的元素开始扫描?
(1)先给出在线算法的伪代码
仅针对至少含有一个正数的序列:
Solve_MaxSubSum(A, n):
sum <- 0
maxsum <- 0
boundleft <- 0
for i <- 0 to n-1 do
sum <- sum + A[i]
if sum <= 0 then
sum <- 0
boundleft <- i + 1
else if sum > maxsum then
maxsum <- sum
boundright <- i
maxsum = A[boundleft] + ... + A[boundright]
接下来,用以下序列举例说明在线算法的详细步骤
可以看出,在线算法仅扫描一遍序列即可求得最大子序列;其高效的本质在于当子序列和为非正数时,该序列要被弃掉而要从序列之后的元素开始往后扫描。