Algorithm 分析“;查找后续元素的最大和”;算法

Algorithm 分析“;查找后续元素的最大和”;算法,algorithm,sequences,arrays,Algorithm,Sequences,Arrays,如果可能的话,我想有人给一个算法的分析解释 例如,给定序列 -2, 4, -1, 3, 5, -6, 1, 2 最大子序列和为 4 + -1 + 3 + 5 = 11 我参考的这个算法是一个除法和求法类型的算法 该算法具有O(nlogn)复杂度 实际上,我想看看这个算法产生的所有步骤的例子。上述顺序可用于示例 这实际上可以使用一种称为。如果你感兴趣的话,我已经写信给你了。其思想是使用动态规划逐步改进解决方案,直到找到最佳子序列。该思想是将序列一分为二,找到两半的答案,然后使用它来找到整个序

如果可能的话,我想有人给一个算法的分析解释

例如,给定序列

-2, 4, -1, 3, 5, -6, 1, 2 
最大子序列和为

4 + -1 + 3 + 5 = 11
我参考的这个算法是一个除法和求法类型的算法

该算法具有O(nlogn)复杂度


实际上,我想看看这个算法产生的所有步骤的例子。上述顺序可用于示例

这实际上可以使用一种称为。如果你感兴趣的话,我已经写信给你了。其思想是使用动态规划逐步改进解决方案,直到找到最佳子序列。

该思想是将序列一分为二,找到两半的答案,然后使用它来找到整个序列的答案

假设您有一个序列
[左,右]
。让
m=(左+右)/2
。现在,
[left,right]
的最大和子序列(
MSS
)要么是
MSS(left,m)
MSS(m+1,right)
,要么是从
[left,m]
开始并在
[m+1,right]
某处结束的序列

伪代码:

MSS(left, right)
  if left = right then return sequence[left]
  m = (left + right) / 2
  leftMSS = MSS(left, m)
  rightMSS = MSS(m + 1, right)

  maxLeft = -inf // find the maximum sum subsequence that ends with m and starts with at least left
  cur = 0
  i = m
  while i >= left do
    cur += sequence[i]
    if cur > maxLeft
      maxLeft = cur

  maxRight = -inf // find the maximum sum subsequence that starts with m + 1 and ends with at most right
  cur = 0
  i = m + 1
  while i <= right
    cur += sequence[i]
    if cur > maxRight
      maxRight = cur

  return max(leftMSS, rightMSS, maxLeft + maxRight)
有趣的是
MSS(0,3)
MSS(0,7)
的计算,因为它们不只是取其子代的最大值。对于
MSS(0,3)
我们尝试尽可能大的求和,从区间(1)中间开始向左添加连续元素。此最大值为
4
。下一步我们做同样的事情,从中间的间隔+1开始,然后向右走。此最大值为
2
。把这些加在一起,我们得到一个最大和子序列,其和为
6
,大于两个子区间的最大和子序列,所以我们取这个


对于
MSS(0,7)

的推理类似,您的意思是找到最大连续子序列和吗?最大子集和是微不足道的:扔掉所有的负元素。不,我指的是后续子元素的最大和elements@Peter-那只是更多的代码。OP希望对其复杂性进行分析。没有必要在标题中添加“plz”和“我想要”。如果你清楚并且写一个结构良好的问题,很好的答案就会出现。我知道O(n)(以及O(n^2)和O(n^3)也存在),但是今天我在学习O(nlogn)算法,所以我需要一个特定算法的例子。这是家庭作业吗?现在,你似乎在乞求答案,却没有做任何自己的工作。我可以提供分析,但我不会这样做,除非我保证我不仅仅是为你做家庭作业,没有家庭作业。我独立研究自己感兴趣的算法、离散数学等。我有自我激励能力。我现在一整天都在坚持这件事。我不想看到分析,因为我找到了很多关于这件事的来源。但我没有发现一个实际序列上的步骤示例。如果您向我们指出您希望分析的特定算法,有人可以向您指出分析结果。:)@Ted Hopp在第4页的www.cs.ru.nl/~chaack/teaching/CIS500s00/Transpar/trans15.pdf中,你可以在脑海中看到这个算法。我的错误是,当我计算基本情况的值时,我消除了一些值,但我不应该这样做。tnx
 0  1  2 3 4  5 6 7
-2  4 -1 3 5 -6 1 2

                                             MSS(0, 7) = 11
                                      /                    \
                              MSS(0, 3) = 6                 MSS(4, 7) = 5 ------
                          /                  \              |                   \
           MSS(0, 1) = 4                    MSS(2, 3) = 3   MSS(4, 5) = 5      NSS(6, 7) = 3
             /       \                    /              \
   MSS(0, 0) = -2     MSS(1, 1) = 4    MSS(2, 2) = -1    MSS(3, 3) = 3