学习笔记:数据结构、算法::求最大子列和
来源:互联网 发布:程序员到架构师 编辑:程序博客网 时间:2024/05/16 12:48
学习笔记:数据结构、算法::求最大子列和
一、一般算法
int MaxSum(int a[],int n){ int maxsum=0,thissum=0; for(int i=0;i<n;i++){//子列左端 for(int j=i;j<n;j++){//子列右端 thissum=0; for(int k=i;k<j;k++){//求子列和 thissum+=a[k]; } if(thissum>maxsum){//判断 maxsum=thissum; } } }}
时间复杂度为O(n^3);
二、简单优化算法
int MaxSum(int a[],int n){ int maxsum=0,thissum; for(int i=0;i<n;i++)for(int j=i;j<n;j++){//子列左端 thissum=0; for(int j=i;j<n;j++){//子列右端 thissum+=a[j]; if(thissum>maxsum){//判断 maxsum=thissum; } } }
在取子列右端时便计算子列和,少了一层计算子列和的循环;
时间复杂度为O(n^2);
三、分治算法
#include <iostream>#include <math.h>using namespace std;int tmax(int,int,int);int maxsum(int[],int,int);int leftmaxsum(int[],int,int);int rightmaxsum(int[],int,int);int main(){ int n; cin>>n; int *a=new int[n-1]; for(int i=0;i<n;i++){ cin>>a[i]; } //int a[8]={4,-3,5,-2,-1,2,5,-3}; cout<<maxsum(a,0,n); delete[] a; return 0;}int tmax(int a,int b,int c){ int m; if(a>b){m=a;} else{m=b;}; if(m>c){return m;} else{return c;}}int maxsum(int a[],int left,int right){ int smax,mid,leftmax,rightmax,midmaxsum; if(left==right){ return a[left]; } mid=(right+left)/2; leftmax=maxsum(a,left,mid); rightmax=maxsum(a,mid+1,right); smax=max(leftmax,rightmax); midmaxsum=leftmaxsum(a,left,mid)+rightmaxsum(a,mid+1,right); //return tmax(leftmax,rightmax,midmaxsum); return max(smax,midmaxsum);}int leftmaxsum(int a[],int left,int mid){ int maxsum=a[mid],sum=0; for(int i=mid;i>=left;i--){ sum+=a[i]; if(sum>maxsum){maxsum=sum; } } return maxsum;}int rightmaxsum(int a[],int mid,int right){ int maxsum=a[mid],sum=0; for(int i=mid;i<=right;i++){ sum+=a[i]; if(sum>maxsum){maxsum=sum; } } return maxsum;}
时间复杂度:
T(n)=2T(n/2)+c*n,T(1)=O(1);
递推得到 T(n)=2^k*O(1)+c*k*n,k=log2(n);
时间复杂为O(n*logn);
三、在线处理
在线的意思是指每输入一个数据就进行处理 ,在任何一个地方终止输入,算法都能能正确给出当前解。
int MaxSum(int a[],int n){ int maxsum=0,thissum=0; for(int i=0;i<n;i++){ thissum+=a[i]; if(thissum>maxsum){ maxsum=thissum; } if(thissum<0){ thissum=0; } } return maxsum;}
时间复杂度:O(n);
阅读全文
0 0
- 学习笔记:数据结构、算法::求最大子列和
- 数据结构与算法--求最大子列和问题
- 数据结构学习笔记-Day1-最大子列和问题
- 数据结构学习-最大子列和问题
- 学数据结构的第一个算法,最大子列和问题,即求一个数组连续子列和求最大
- 求最大子列和问题(浙江大学数据结构)
- 求最大子列和
- 求最大子列和
- 数据结构--最大子列和
- 数据结构 ---- 最大子列和
- 求最大子列和问题两种算法比较
- 求最大子列和的四种算法
- 数据结构之多项式最大子列和问题(学习笔记)
- 【算法学习笔记】19.算法设计初步 最大子列和问题的三种方法
- 数据结构与算法-求子数组的最大和
- 【数据结构与算法分析】2.4 求最大子序列和
- 最大子列和算法
- 算法笔记-1-最大子列和-Maximum Subsequence Sum
- cmake 设置vs工程的MT、MTd
- mysql insert异常,springmvc 请求异常 404
- mybatis传多个参数(三种方法)详细
- Cardboard的学习(三)目录介绍
- 将自定义标签打包为jar包并提供给JSP使用
- 学习笔记:数据结构、算法::求最大子列和
- ES6 notes
- 简析JNI的使用
- PostgreSQL 百万级每秒的流式实时统计应用
- Luogu 1111 修复公路
- LeetCode: 566. Reshape the Matrix
- Char 和 Varchar 的区别
- Entity Framework Code First实体对象变动跟踪
- Android 启动退出时的相关问题