最大子列和
最大子列和问题,即给定N个整数的序列\(\{A_1,A_2,\ldots,A_N \}\),求函数\(f(i,j)=max\lbrace 0,\sum\limits_{i=0}^n{A_k}\rbrace\)的最大值。 例如\(\lbrace-2,11,-4,13,-5,-2\rbrace\)的最大子列和为20,子列为\(\lbrace11,-4,13\rbrace\). \(\lbrace-10, 1, 2, 3, 4, -5, -23, 3, 7, -21\rbrace\)的最大子列和为10,子列为\(\lbrace1,2,3,4\rbrace\)。 本文将给出实现这种算法的\(\Theta(N^2)\)和\(\Theta(N)\)算法
\(\Theta(N^2)\)
1 | int MaxSubseqSum(int A[], int N) |
\(\Theta(N)\)
1 | int MaxSubseqSum(int A[], int N) |
第二种方法可能不是很好理解,有必要的话可以根据上面的例子手动推演一下。