使用分而治之的最大连续总和

时间:2016-10-09 01:10:58

标签: algorithm

我对“使用分而治之的方法编写一个有效的递归算法感到困惑,该算​​法在给定n个实数(正或负)值列表的任何连续子列表中找到最大总和。”

我知道如何在不使用分而治之的情况下解决问题,但不知道采用分而治之的方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

将列表l拆分为两个子列表l1,l2。设l1_last,l2_first是l1的最后一个元素,分别是l2的第一个元素(l2_first紧跟在列表l中的l1_last之后)。

找到s1a不包含l1的子列表l1a的最大连续总和 l1_last和s1b包含l1_last的l1子列表l1b的最大连续和。

同样对l2做同样的事情,得到s2a,l2a和s2b,l2b,其中l1_last被替换为l2_first。 l的子列表的最大连续和是最大值 s1a,s1b,s2a,s2b,s1b + s2b以及相应的子列表 l1a,l1b,l2a,l2b c(l1b,l2b)。