使用分而治之的最大连续和
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)。以上是关于使用分而治之的最大连续和的主要内容,如果未能解决你的问题,请参考以下文章