麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

最大子序列和問(wèn)題

2019-11-10 19:39:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最大子序列和問(wèn)題

給定(可能有負(fù)的)整數(shù),A1、A2,...,AN,求∑k=ijAk的最大值。(為方便起見(jiàn),如果所有整數(shù)均為負(fù)數(shù),則最大子序列和為0)。

第一種算法O(N^3)

public static int maxSubSum1(int a[]){ int maxSum=0; for(int i=0;i<a.length;i++){ for(int j=i;j<a.length;j++){ int thisSum=0; for( int k=i;k<j;k++){ thisSum+= a[k]; } if(thisSum>maxSum) maxSum=thisSum; } } return maxSum; }

第二種算法O(N^2)

public static int maxSubSum2(int a[]){ int maxSum=0; for(int i=0;i<a.length;i++){ int thisSum=0; for(int j=i;j<a.length;j++){ thisSum +=a[j]; if(thisSum>maxSum) maxSum = thisSum; } } return maxSum; }

第三種算法O(N logN),分治法 最大子序列的和可能在三處出現(xiàn),或者出現(xiàn)在輸入數(shù)據(jù)的左半部,或者出現(xiàn)在輸入數(shù)據(jù)的右半部份,或者出現(xiàn)在輸入數(shù)據(jù)的中間部分。前兩種情況可以遞歸求解,第三種情況的最大和可以通過(guò)求出前半部分(包含前半部分最后一個(gè)元素)的最大和以及后半部分(包含后半部分第一個(gè)元素)的最大和而得到。此時(shí)將這兩個(gè)相加。

public static int maxSumRec(int a[] ,int left,int right){ if(left== right){ 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 max3(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum); } PRivate static int max3(int a, int b, int c) { int ab = Math.max(a, b); return Math.max(c, ab); } public static int maxSubSum3(int a[]){ return maxSumRec(a, 0, a.length-1); }

第四種算法O(N) 這種算法是比較難看出正確性的。可以知道,當(dāng)a[i]是負(fù)的時(shí),那么它不可能作為最有序列的起點(diǎn),因?yàn)槿魏伟琣[i]的作為起點(diǎn)的序列都可以通過(guò)用a[i+1]作為起點(diǎn)而得到改進(jìn)。類似地,任何負(fù)的子序列不可能是最優(yōu)子序列的前綴。如果在循環(huán)中檢測(cè)到從a[i]到a[j]的子序列是負(fù)的,那么可以推進(jìn)i。關(guān)鍵的結(jié)論是,我們不僅可以把i推進(jìn)到i+1, 而且實(shí)際上還可以把它一直推進(jìn)到j(luò)+1。為了看清楚這一點(diǎn),令p為i+1到j(luò)之間的任一下標(biāo)。開(kāi)始于下標(biāo)p的任意子序列都不大于在下標(biāo)i開(kāi)始并包含從a[i]到a[p-1]的子序列的對(duì)應(yīng)的子序列,因?yàn)楹竺娴倪@個(gè)子序列不是負(fù)的(j是使得從下標(biāo)i開(kāi)始其值成為負(fù)值的序列的第一個(gè)下標(biāo))。因此,把i推進(jìn)到j(luò)+1是沒(méi)有風(fēng)險(xiǎn)的。

public static int maxSubSum4(int a[]){ int maxSum=0,thisSum=0; for(int i=0;i<a.length;i++){ thisSum+=a[i]; if(thisSum>maxSum) maxSum = thisSum; else if(thisSum<0) thisSum = 0; } return maxSum; }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本成人一区二区三区 | 国产精品视频一区二区三区四区国 | www69xxxxx| 中文字幕在线观看视频一区 | 精品国产99久久久久久宅男i | 99re热视频这里只精品 | 91看片王| 久草视频福利在线观看 | 欧美一级色片 | 男女污视频在线观看 | 欧美精品一区二区三区在线 | 国产精品成年片在线观看, 激情小说另类 | 深夜视频在线观看 | 久久96国产精品久久久 | 91精品久久久久久久久网影视 | 中文字幕精品一二三四五六七八 | 午夜视频久久 | 亚洲影院在线 | 国产视频在线一区 | av电影在线观看网站 | 欧美aaaaa一级毛片在线 | 国产99视频精品免视看9 | 免费国产自久久久久三四区久久 | 黄污污网站 | 国产精品av久久久久久久久久 | 成人午夜视频免费在线观看 | 国产毛片在线 | 国产在线1区| 亚洲精品一区二区三区大胸 | 欧美黄色一级片在线观看 | 91中文在线观看 | 免费久久久久 | 日韩美女电影 | 视频一区二区三区中文字幕 | 欧美日韩国产中文字幕 | 毛片在线看免费 | 亚洲第一成网站 | 国产麻豆久久 | 亚洲免费视频大全 | 男女无套免费视频 | 日本a∨精品中文字幕在线 狠狠干精品视频 |