- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构经典题型
数据结构 杨旸 最大子序列问题 给定整数A1, A2, A3, A4..,An,求其中的最大子序列(为方便起见,如果所有整数为负数,则最大子序列为负数) 第一种算法 求出所有子序列的所有可能的组成,然后计算出最大子序列 int MaxSubsequenceSum (int A[ ], int N ) { int ThisSum, MaxSum, i, j, k; /* 1*/ MaxSum = 0; /* initialize the maximum sum */ /* 2*/ for( i = 0; i N; i++ ) /* start from A[ i ] */ /* 3*/ for( j = i; j N; j++ ) { /* end at A[ j ] */ /* 4*/ ThisSum = 0; /* 5*/ for( k = i; k = j; k++ ) /* 6*/ ThisSum += A[ k ]; /* sum from A[ i ] to A[ j ] */ /* 7*/ if ( ThisSum MaxSum ) /* 8*/ MaxSum = ThisSum; /* update max sum */ } /* end for-j and for-i */ /* 9*/ return MaxSum; } 第二种算法 减少了一个循环 int MaxSubsequenceSum (int A[ ], int N ) { int ThisSum, MaxSum, i, j; /* 1*/ MaxSum = 0; /* initialize the maximum sum */ /* 2*/ for( i = 0; i N; i++ ) { /* start from A[ i ] */ /* 3*/ ThisSum = 0; /* 4*/ for( j = i; j N; j++ ) { /* end at A[ j ] */ /* 5*/ ThisSum += A[ j ]; /* sum from A[ i ] to A[ j ] */ /* 6*/ if ( ThisSum MaxSum ) /* 7*/ MaxSum = ThisSum; /* update max sum */ } /* end for-j */ } /* end for-i */ /* 8*/ return MaxSum; } 第三种算法 利用分治思想递归之 我们的最大子序列可能出现在三处地方,或者前半部分,或者后半部分,或者跨越中部的部分 4 -3 5 -2 -1 2 6 -2 前半部分最大为6,后半部分为8,跨越中间的部分为6-2-1+8=11,因此中间为最大的子序列 Int MaxSubSum(int A[],int left,int right) { int MaxLeftSum, MaxRightSum; int MaxLeftBorderSum=0; int MaxRightBorderSum=0; int LeftBorderSum=0,RightBorderSum=0; int Center,i; if(Left==Right) if(A[Left]0) return A[Left]; else return 0; Center=(left+ right)/2; MaxLeftSum=MaxSubSum(A,left,Center); MaxRightSum=MaxSubSum(A, Center+1, right); for(i= Center;i=left;i--) //从中间往左边加 { LeftBorderSum+=A[i]; if(LeftBorderSumMaxLeftBorderSum) MaxLeftBorderSum=LeftBorderSum; } for(i= Center+1;i= right;i++)//从中间往后面加 { RightBorderSum+=A[i]; if(RightBorderSumMaxRightBorderSum) MaxRightBorderSum=RightBorderSum; } return Max3(MaxLeftSum, MaxRightSum, MaxLeftBorderSum+MaxR
您可能关注的文档
最近下载
- 中国石油油气田地面建设标准化施工技术手册-第二册安全文明施工管理20160427.doc VIP
- 第三册工艺安装工程中国石油油气田地面建设标准化施工技术手册标准化施工手册.pdf VIP
- elrow电音主题派对招商方案【音乐节】【招商方案】.pdf VIP
- 老年护理便秘课件.pptx
- 食材配送运输方案.pdf VIP
- 信号与系统第2版奥本海姆课后习题答案详解.pdf
- 食材的装卸质量保障措施.docx VIP
- 2022年第六次全国幽门螺杆菌感染处理共识报告(非根除治疗部分)推荐要点(全文).pdf VIP
- 工程机械维修知识培训课件.pptx VIP
- 外墙悬挑脚手架搭设方案设计与实施指南.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)