具有最长序列的最大连续子序列和?

时间:2011-02-28 21:20:43

标签: java data-structures

我知道如何找到最大的,连续的子序列和;但有时会有多个子序列和最大总和。所以,我需要找到具有最大总和的那些最长子序列的索引。 我唯一想到的就是蛮力。还有哪些更好的选择?

这是我在rosettacode上找到的代码,它对我的​​问题有一个确切的想法(但遗憾的是,我知道唯一的编程语言是Java),但它在REXX中写了:

/*───────────────────────────────────────────────────────────────*/
arg @                                  
say 'words='words(@) 'list='@          
say
sum=word(@,1)                          
w=words(@)                             
at=1                                   
L=0       

do j=1 for w;  f=word(@,j)

    do k=j to w; s=f

          do m=j+1 to k
          s=s+word(@,m)
          end   /*m*/

    _=k-j+1
    if (s==sum & _>L) | s>sum then do; sum=s; at=j; L=_; end
    end         /*k*/

end               /*j*/


seq=subword(@,at,L)
if seq=='' then seq="[NULL]"
sum=word(sum 0,1)
say 'sum='sum/1 "sequence="seq
/*───────────────────────────────────────────────────────────────*/

结果:

input 1 2 3 4 -777 1 2 3 4 0 0 
output
words=12 list=1 2 3 4 0 -777 1 2 3 4 0 0

sum=10 sequence=1 2 3 4 0 0

1 个答案:

答案 0 :(得分:2)

如果这是作业,我建议你看看动态编程算法。特别是,您可以简化Smith-Waterman本地字符串对齐的其中一个步骤,以完成此处所需的操作。关键是要阅读最优子结构的概念并问问自己,是否存在某种子问题,我只能使用序列中每个点的本地信息来解决这个问题?

相关问题