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

Posted

技术标签:

【中文标题】使用分而治之的最大连续和【英文标题】:Maximum contiguous sum using Divide and Conquer 【发布时间】:2017-02-17 17:40:52 【问题描述】:

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

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

感谢您的帮助!

【问题讨论】:

【参考方案1】:

将列表 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)。

【讨论】:

感谢您的帮助!但是,我对找到 S1a 和 S2a 的原因感到困惑。 因为最大连续和可能出现在这样的子列表中,考虑 l=(1,1,1,-1,-1,-1,) 在第二个“-1”处拆分:l1 =(1,1,1,-1), l2=(-1,-1)。

以上是关于使用分而治之的最大连续和的主要内容,如果未能解决你的问题,请参考以下文章

最大子数组:分而治之

绪论—最大子列和问题

使用分而治之的方法找到最大值和最小值

使用分而治之方法的最大函数比线性慢?

最大和子数组 - 返回子数组和总和 - 分而治之

c_cpp 使用分而治之的方法查找未排序数组中的最小值和最大值