【问题标题】:Maximum subarray最大子数组
【发布时间】:2012-06-25 01:11:41
【问题描述】:

在“编程珍珠”第8栏。存在最大子数组问题。

问题:

输入是n个浮点数的向量x;输出是在输入的任何连续子向量中找到的最大和。为了完成问题定义,我们会说,当所有输入为负时,最大和子向量是空向量,其和为零。

最有效的解决方案:

maxsofar = 0
maxendinghere = 0
for i = [0, n)
    maxendinghere = max(maxendinghere+x[i], 0)
    maxsofar = max(maxsofar, maxendinghere)

本专栏有一个练习: 我们将负数数组的最大子向量定义为零,即空子向量的总和。 假设我们将最大子向量定义为最大元素的值;您将如何更改各种程序?

我有两个关于这个练习的问题 (1) 我对“假设我们将最大子向量定义为最大元素的值”有点困惑。这是否意味着负数数组的最大子向量是数组中的最大元素?

例如: 数组:[-1 -2 -3],最大子向量:-1 数组:[-1 2 3],最大子向量:[2 3]

对不起这个愚蠢的问题,英语不是我天真的语言。

(2)作者给出了解决方案:“将赋值maxsofar=0替换为maxsofar = -infinity。”根据我对问题的理解,这个解决方案似乎是不正确的。

例如: 数组:[-1 -2 -3],答案应该是-1。但是根据解决方案,它是0。

谢谢,

【问题讨论】:

    标签: programming-pearls


    【解决方案1】:

    我同意你的看法。如果作者的解决方案只是改变 maxsofar 的初始化,那么它根本不会改变算法。

    【讨论】:

    • 嗨,Marcos,欢迎来到 StackOverflow。 StackOverflow 的目标是成为一种知识资源,不仅为提问者提供知识资源,而且为在未来几年内将看到此页面的成千上万的其他访问者提供知识资源。为了产生更大的影响,请考虑在您的答案中添加edit,以更清楚地说明您为什么相信这一点。这将确保答案在未来几年内具有价值。祝你好运!
    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 2019-11-20
    • 2017-12-28
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2013-01-20
    相关资源
    最近更新 更多