欢迎来到天天文库
浏览记录
ID:8807681
大小:38.00 KB
页数:3页
时间:2018-04-08
《c求解最大字段和的几种方法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C++求解最大字段和的几种方法问题定义:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值(0
2、j,k,maxn=0; for(i=0;imaxn) { maxn=temp_max; } } } returnmaxn;}时间复杂度O(n^3)。这显然是不能接受滴。其实这其中进行了大量的重复计算。方法二:可以把字段和结果线
3、计算出来啊,存储到s[]数组中,即预处理intsum=0.s[n];for(i=0;i4、种情行:1)和a[1..n/2]的最大字段和相同。2)和a[n/2+1:n]的最大字段和相同。cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com5、冬装外套、冬装女装、时尚冬装:www.haomeifa.comgucci包、酷奇包包、金利来女包:www.naitiao.com6、皮草外套、水貂皮草、皮草大衣:www.qqxk.org3)最大字段和包含两部分,一部分在中,另一部分在a[n/2+1..n]中。前两种情形我们可以用递归方法求出,第三种情形可以分别求出两部分的最大字段和值再相加(注:a[1..n/2]这部分求7、最大字段和要以a[n/2]结束,a[n/2+1..n]这部分求最大字段和要以a[n/2+1]开始)。序列的最大字段和即为这三种情形的最大值。intmaxSubItem(int*a,intlow,inthigh){ ints1,s2,s31,s32,i,j; intsum; intmid=(low+high)/2; if(low==high) returna[low]; else { s1=maxSubItem(a,low,mid); s2=maxSubItem(a,mid+1,high); i=m8、id; s31=a[mid]; while((s31+a[i-1]>s31)&&(i>low)) { s31+=a[i-1]; i--; } j=mid+1; s32=a[mid+1]; while((s32+a[j+1]>s32)&&(j9、杂度为O(n*logn)。要是有O(n)的算法该多好呢?事实上还真有。这自然就是要想到动态规划了吧!!!方法四:intmaxsub(inta,intn){ inttemp=0,maxn=-INF,k=1 intstart,end; for(i=1;i<=n;i++) { temp+=a[i];cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com10、冬装外套、冬装女装、时尚冬装:www.haomeifa.comgucci包、酷奇包包、金利来女包:www.naitiao.com11、皮草外套、水貂皮草、皮草大衣12、:www.qqxk.org if(temp>maxn) { maxn=temp;start=k;end=i; } if(temp<0) { temp=0;k=i+1; } }
4、种情行:1)和a[1..n/2]的最大字段和相同。2)和a[n/2+1:n]的最大字段和相同。cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com
5、冬装外套、冬装女装、时尚冬装:www.haomeifa.comgucci包、酷奇包包、金利来女包:www.naitiao.com
6、皮草外套、水貂皮草、皮草大衣:www.qqxk.org3)最大字段和包含两部分,一部分在中,另一部分在a[n/2+1..n]中。前两种情形我们可以用递归方法求出,第三种情形可以分别求出两部分的最大字段和值再相加(注:a[1..n/2]这部分求
7、最大字段和要以a[n/2]结束,a[n/2+1..n]这部分求最大字段和要以a[n/2+1]开始)。序列的最大字段和即为这三种情形的最大值。intmaxSubItem(int*a,intlow,inthigh){ ints1,s2,s31,s32,i,j; intsum; intmid=(low+high)/2; if(low==high) returna[low]; else { s1=maxSubItem(a,low,mid); s2=maxSubItem(a,mid+1,high); i=m
8、id; s31=a[mid]; while((s31+a[i-1]>s31)&&(i>low)) { s31+=a[i-1]; i--; } j=mid+1; s32=a[mid+1]; while((s32+a[j+1]>s32)&&(j9、杂度为O(n*logn)。要是有O(n)的算法该多好呢?事实上还真有。这自然就是要想到动态规划了吧!!!方法四:intmaxsub(inta,intn){ inttemp=0,maxn=-INF,k=1 intstart,end; for(i=1;i<=n;i++) { temp+=a[i];cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com10、冬装外套、冬装女装、时尚冬装:www.haomeifa.comgucci包、酷奇包包、金利来女包:www.naitiao.com11、皮草外套、水貂皮草、皮草大衣12、:www.qqxk.org if(temp>maxn) { maxn=temp;start=k;end=i; } if(temp<0) { temp=0;k=i+1; } }
9、杂度为O(n*logn)。要是有O(n)的算法该多好呢?事实上还真有。这自然就是要想到动态规划了吧!!!方法四:intmaxsub(inta,intn){ inttemp=0,maxn=-INF,k=1 intstart,end; for(i=1;i<=n;i++) { temp+=a[i];cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com
10、冬装外套、冬装女装、时尚冬装:www.haomeifa.comgucci包、酷奇包包、金利来女包:www.naitiao.com
11、皮草外套、水貂皮草、皮草大衣
12、:www.qqxk.org if(temp>maxn) { maxn=temp;start=k;end=i; } if(temp<0) { temp=0;k=i+1; } }
此文档下载收益归作者所有