最长子序列和问题
2012-11-21 15:56
423 查看
分享4个处理算法,算法复杂度分别为N^3 N^2 NlogN N
//algorithm1 //Cubic maximum contiguous subsequence sum algorithm int maxSubSum1( const vector<int> &a) { int maxSum = 0; for( int i = 0; i < a.size(); i++) for( int j = i; j < a.size(); j++) { int thisSum = 0; for( int k = i; k <= j; k++ ) thisSum += a[ k ]; if( thisSum > maxSum ) maxSum = thisSum; } return maxSum; } //algorithm2 //Quadratic maximum contiguous subsequence sum algorithm int maxSubSum2( const vector<int> & a) { int maxSum = 0; for( int i = 0; i < a.size(); i++) { int thisSum = 0; for( int j = i; j < a.size(); j++) { thisSum += a[ j ]; if( thisSum > maxSum) maxSum = thisSum; } } return maxSum; } //algorithm3 int maxSumRec( const vector<int> & a, int left, int right ) { if( left == right ) //base case if( a [ left ] > 0 ) return a[ left ]; else return 0; int center = ( left + right ) / 2; int maxLeftSum = maxSumRec( a, left, center ); int maxRightSum = maxSumRec( a, center + 1, right); int maxLeftBorderSum = 0, leftBorderSum = 0; for( int i = center; i >= left; i--) { leftBorderSum += a[ i ]; if ( leftBorderSum > maxLeftBorderSum ) maxLeftBorderSum = leftBorderSum; } int maxRightBorderSum = 0, rightBorderSum = 0; for( int j = center + 1; j <= right; j++ ) { rightBorderSum += a[ j ]; if( rightBorderSum > maxRightBorderSum ) maxRightBorderSum = rightBorderSum; } return max3( maxLeftSum, maxRightSum, maxLeftBorderSum + maxRightBorderSum ); } //Driver for divide-and-conquer maximum contiguous subsequence sum algorithm int maxSubSum3( const vector<int> & a) { return maxSumRec( a, 0, a.size() - 1); } //algorithm4 //Linear-time maximum contiguous subsequence sum algorithm. int maxSubSum4( const vector<int> & a ) { int maxSum = 0, thisSum = 0; for( int j = 0; j < a.size(); j++) { thisSum += a[ j ]; if( thisSum > maxSum ) maxSum = thisSum; else if (thisSum < 0) thisSum = 0; } return maxSum; }
相关文章推荐
- 动态规划解决最长子序列问题
- 最长子序列问题
- hdu 1160 DP 最长子序列问题
- 动态规划—最长子序列问题
- nyoj 17 最长子序列相关问题
- _____________________________________动态规划之最长子序列问题______1:两个序列中的______________________________________
- 最长子序列回文问题,Longest Palindromic Subsequence
- 【C语言】最长子序列问题求解
- 动态规划5:求解最多航线问题(应用了最长子序列知识)
- ACM LIS 最长子序列问题
- 算法笔记:动态规划求解最长子序列问题
- 最长子序列问题之系列一
- 动态规划 --- 最长子序列问题
- 最长子序列问题之系列一
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
- 最长子序列问题:简单的动规
- 最长子序列问题
- 最长子序列问题
- 公主和王子能在一起多久的问题+dp+最长公共子序列转最长子序列。
- 动态规划之LCS最长子序列问题