最大子序列问题,递归和线性
来源:互联网 发布:知乎亡羊补牢为时未晚 编辑:程序博客网 时间:2024/05/02 01:09
/************************************************************************* > File Name: maxSumRec.cpp > Author:keson > Mail:keson@bupt.edu.cn > Created Time: 2014年11月20日 星期四 17时51分23秒 ************************************************************************/#include<stdio.h>#include<iostream>#include<vector>#include<algorithm>#include<ctime>using namespace std;const int SIZE=50000000;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 i=center+1;i<=right;++i) { rightBorderSum+=a[i]; if(rightBorderSum>maxRightBorderSum) maxRightBorderSum=rightBorderSum; } return max(max(maxLeftSum,maxRightSum),maxLeftBorderSum+maxRightBorderSum);}int maxSubSum(const vector<int> &a){ int maxSum=0,thisSum=0; for(int i=0;i<a.size();++i) { thisSum+=a[i]; if (thisSum>maxSum) maxSum=thisSum; if(thisSum<=0) thisSum=0; } return maxSum;}int main(){ vector<int> vec={}; for(int i=1;i<=SIZE;++i) { vec.push_back(rand()%100-50); } clock_t start_time=clock(); cout<< maxSumRec(vec,0,vec.size()-1)<<endl; clock_t end_time=clock(); cout<<"Running time is:"<< static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC<<" S"<<endl; clock_t start_time2=clock(); cout<<maxSubSum(vec)<<endl; clock_t end_time2=clock(); cout<<"Running time is: "<< static_cast<double>(end_time2-start_time2)/CLOCKS_PER_SEC<<" S"<<endl; return 0;}
0 0
- 最大子序列问题,递归和线性
- 最大子序列和问题的解(线性时间)
- 求解最大子序列和问题的线性时间算法
- 最大子序列和线性算法
- 最大子数组问题的递归和非递归(线性时间)代码
- 最大和子序列问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题~~
- 最大子序列和问题
- POSIX Capabilities & File POSIX Capabilities
- java实现AVL树
- 设立知识产权法院具有破冰意义
- extern关键字
- 基于FPGA的DS18B20控制程序设计及其Verilog实现 (一)
- 最大子序列问题,递归和线性
- Python学习笔记-第五章 条件、循环和其他语句(上)
- 我国将建国家科技知识产权评估制度
- VS解决BEX错误但无法关闭DEP保护的问题
- 地方和史蒂夫还是发的
- 时代噶时代噶但是
- 基于FPGA的DS18B20控制程序设计及其Verilog实现(二)
- 放到合适的粉红色发的
- 地方还是奋斗还是发的