求最大子序列之和

今天一下午在看sharepoint了,又有活干,所以时间比较紧凑,于是想起了前些日子写的求最大子序列之和,作为每日一小题吧,暂做自我安慰吧。

 

求最大子序列之和,主要要注意他的效率,

 1,算法复杂度是O( pow( n, 2 ) )

 

2,算法复杂度为o(n)

3,还从网上看了一种 递归的“分而治之”( divide-and-conquer  )的方法。(现在转一下)

比如  4   -3   5   -2        -1   2   6   -2

          First                  Second 

把序列分为两部分,那么最长子序列要么在First,要么在Second,要么就既在First又在Second。

第一中情况只要求First的最大子序列(递归调用),第二中情况只要求Second的最大子序列(还是递归调用)。对于第三种情况,只要找到包含First最后一个元素(在例子中是2)在First的最大子序列(例子中是 4,-3,5,-2)和包含Second起始元素(-1)在Second的最大子序列(-1,2,6)然后相加就行了。

这种算法的复杂度计算和计算斐波那契数列的复杂度相似,设 N 个数的执行次数是 T( N ) ,那么 T( N ) = 2*T( N/2 ) + O( N )  其中T( 1 ) = 1

O( N ) 可以看成 N ,那么可以观察得到 T( N ) = N * logN

  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值