最大子列和

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计实验报告

拓展实验1

}

算法1结果:

算法2结果:

附录:完整代码

#include

#include

#include

using namespace std;

算法3

结果:

算法4结果:

intDivideAndconquer(int[],int,int);

constint Max=20;

int MaxQSum4(int[],int&,int&,int&);

intmain(){

inti,x,m,n,Maxsum,a[Max];

cout<<"请输入序列元素个数:"<

cin>>x;

srand(time(0));

for( i=0;i

a[i]=rand()%100;

if(a[i]>50)

a[i]=-(rand()%50);

cout<

}

Maxsum=MaxQSum4(a,x,m,n);

cout<<"\n最大子列和为:"<

cout<<"子列的起点和终点为:"<

return 0;

}

/* 穷举法 O=n*n*n

int MaxQSum1( int a[Max],int x ){ int max=a[0],sum;

for( inti=0;i

for( int j=i;j

sum=0;

for( int k=i;k<=j;k++ ){

sum+=a[k];

if(sum>max&&sum>0)

max=sum;

}

}

if( max==a[0]&&max<0 )

max=0;

return max;

} */

/*部分穷举 O=n*n

int MaxQSum2( int a[Max],int&x){

int max=a[0],sum;

for( inti=0;i

sum=0;

for( int j=i;j

sum+=a[j];

if(sum>max&&sum>0)

max=sum;

}

}

if( max==a[0]&&max<0 )

max=0;

return max;

}*/

/*分而治之 O=logn

int MaxQSum3( int a[Max],int&x){

return DivideAndconquer(a,0,x-1);

}

int Max3(intA,intB,int C){

return A>B?A>C?A:C:B>C?B:C;

}

intDivideAndconquer(int a[Max],intleft,int right){ intLeftMax,RightMax,center;

if(right==left)

return 0;

center=(left+right)/2;

//“分”递归

LeftMax=DivideAndconquer(a,left,center);

RightMax=DivideAndconquer(a,center+1,right);

//"治"

intLeftBordMax=0,LeftBordSum=0;

for( inti=center;i>=left;i--){

LeftBordSum+=a[i];

if(LeftBordSum>LeftBordMax)

LeftBordMax=LeftBordSum;

}

intRightBordMax=0,RightBordSum=0;

for( inti=center+1;i<=right;i++){

RightBordSum+=a[i];

if(RightBordSum>RightBordMax)

RightBordMax=RightBordSum;

}

Max3( LeftMax,RightMax,RightBordMax+LeftBordMax);

return(LeftMax,RightMax,RightBordMax+LeftBordMax); }*/

/*在线处理 O=n 输出起点和终点*/

int MaxQSum4(int a[Max],int&x ,int&m,int&n){ inti,max,sum=0;

max=a[0];

m=a[0];

for(i=0;i

sum+=a[i];

if( sum>max ){

max=sum;

n=a[i];

}

else if(sum<0){

sum=0;

m=a[i+1];

}

}

return max;

}

相关文档
最新文档