摘要本文分析并演示最大子序列和问题的几种算法,它们都能解决问题,但是时间复杂度却大相径庭,最后将逐步降低至线性
算法子序列和问题的引入给定(可能有负数)整数序列A1,A2,A3
,An,求这个序列中子序列和的最大值
(为方便起见,如果所有整数均为负数,则最大子序列和为0)
例如:输入整数序列:-2,11,8,-4,-1,16,5,0,则输出答案为35,即从A2~A6
这个问题之所以有吸引力,主要是因为存在求解它的很多算法,而这些算法的性能差异又很大
这些算法,对于少量的输入差别都不大,几个算法都能在瞬间完成,这时若花费大量的努力去设计聪明的算法恐怕就不太值得了;但是如果对于大量的输入,想要更快的获取处理结果,那么设计精良的算法显得很有必要
切入正题下面先提供一个设计最不耗时间的算法,此算法很容易设计,也很容易理解,但对于大量的输入而言,效率太低:算法一:publicstaticintmaxSubsequenceSum(int[]a){intmaxSum=0;for(inti=0;i