Algorithm 为什么可以';t使用;“分而治之”;最大乘积子阵的方法?

Algorithm 为什么可以';t使用;“分而治之”;最大乘积子阵的方法?,algorithm,data-structures,divide-and-conquer,Algorithm,Data Structures,Divide And Conquer,我们当然可以为最大和子数组设计分治,但在为最大乘积子数组开发基于分治的算法时,我发现我们可能需要为两部分(以及交叉乘积)保持最大和绝对最大值,但似乎我们可以设计。我只是好奇为什么我在讨论中没有看到任何基于分而治之的算法 是不是因为我们保持了最大值和全局最大值,我们就朝着DP前进 任何想法都将不胜感激。我只是想澄清我对该方法的理解。谢谢。这是因为每次递归函数调用返回的局部最大值都不能保证为全局最大值的因子。在某些情况下,可以想象全局最大值既不是局部最大值的乘积,也不是局部最小值的乘积 这是因为每次

我们当然可以为最大和子数组设计分治,但在为最大乘积子数组开发基于分治的算法时,我发现我们可能需要为两部分(以及交叉乘积)保持最大和绝对最大值,但似乎我们可以设计。我只是好奇为什么我在讨论中没有看到任何基于分而治之的算法

是不是因为我们保持了最大值和全局最大值,我们就朝着DP前进


任何想法都将不胜感激。我只是想澄清我对该方法的理解。谢谢。

这是因为每次递归函数调用返回的局部最大值都不能保证为全局最大值的因子。在某些情况下,可以想象全局最大值既不是局部最大值的乘积,也不是局部最小值的乘积

这是因为每次递归函数调用返回的局部最大值不能保证为全局最大值的一个因子。在某些情况下,可以想象全局最大值既不是局部最大值的乘积,也不是局部最小值的乘积

@phimuemue:如果所有的值都是严格正的话,这将起作用,但是如果有任何值是负的或零,那么log函数是未定义的。我不知道为什么没有讨论最大乘积子数组问题的分治方法,但这可能与(a)有关这个问题非常类似于sum版本和(b)IIRC,D&C方法是O(n logn),因此次优于Kadane的O(n)算法。在我看来,您还需要为每个子问题保留最大值和最小值(即大多数负值)。@Phimueme:如果所有值都是严格的正值,这将起作用,但如果有负值或零,则日志函数是未定义的。我不知道为什么不讨论最大乘积子数组问题的分治方法,但这可能与以下事实有关:(a)问题与求和版本非常相似,(b)IIRC D&C方法为O(n logn),因此与Kadane的O(n)算法相比,次优。在我看来,你需要为每个子问题保留最大和最小(即最负)的值。