- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4 找最大和最小元素.doc
4 找最大和最小元素
如果要在含有n个不同元素的集合中同时找出它的最大和最小元素(元素类型为elemType,可比较大小),最简单的方法是将元素逐个进行比较。这种直接算法可初步描述如下。
算法4.1 直接找最大和最小元素
void StraitMaxMin(elemType a[],int n,elemType Max,elemType Min) {
// 将A(1:n)中的最大元素置于max中,最小元素置于min中。
int i;
Max=Min=a[1];
For(i=2;i=n;++i) {
if(a[i]max) Max=a[i];
if(a[i]max) Min=a[i];
};//for
}// StraitMaxMin
分析这个算法的时间复杂度时,只需将元素比较次数求出即可。这不仅是因为算法中的其它运算与元素比较有相同数量级的频率计数,而且更重要的是,当A(l:n)中的元素是多项式、向量、非常大的数或字符串时,一次元素比较所用的时间比其它运算的时间多得多。
容易看出过程StraitMaxMin在最好、平均和最坏情况下均需要作2(n-l)次元素比较。另外,只要考察一下算法4.1就可发现,只有当A(i)max为假时,才有必要比较A(i)min,因此,可用下面的语句代替for循环中的语句:
if(a[i]max) Max=a[i];
else
if(a[i]Min) Min=a[i];
在作以上改进后,最好情况将在元素按递增次序排列时出现,元素比较数是n-1;最坏情况将在递减次序时出现,元素比较数是2(n-1);至于平均情况,A(i)将有一半的数据比max大,因此平均比较数是3*(n-1)/2(即上述两种情况的平均值)。
能否找到更好的算法呢?下面用分治策略的思想来设计一个算法与直接算法作比较。使用分治策略设计是将某一实例I=(n,A(l),…,A(n))分成一些较小的实例来处理。例如,可以把I分成两个实例:I1=(「n/2」,A(1),…,A(「n/2」))和I2=(n-「n/2」,A(「n/2」+1),…,A(n))。如果Max(I)和 Min(I)是I中的最大和最小元素,则Max(I)等于Max(I1)和Max(I2)中的较大者,而Min(I)等于Min(I1)和Min(I2)中的较者。如果I只包含一个元素,则不需要作任何分割,直接就可得到其解。
算法4.2依据以上方法所编写的函数,它是在元素集合{A(i),A(i+1),…,A(j)}中找最大和最小元素的递归过程。函数对于集合中含有一个元素(i=j)和两个元素(i=j-1)的情况分别作了处理,而对含有多于两个元素的集合,则确定其中点(正如在二分检索中那样作分割),并且产生两个新的子问题。当分别找到这两个子问题的最大和最小值后,再比较这两个最大值和两个最小值,最终得到此全集合的解。Max和Min被看成是两个内部函数,它们分别求取两个元素的大者和小者,并认为每次调用其中的一个函数都只需作一次元素比较。
算法4.2 递归求取最大和最小元素
VOID MaxMin(int i,int j,elemType fmax,elemType fmin) {
// A(1:n)是含有n个元素的数组,参数i,j是整数(1≤i,j≤n)
//该函数把A(i,j)中的最大和最小元素分别赋给fmax和fmin。
int A[],n; //n和数组A(1,n)说明成全程变量。
if(i==j) {fmax=fmin=a[i];return fmax,fmin;}
if(i==j-1) { if(a[i]a[j]) {fmax=a[j];fmin=a[i];}
else {fmax=a[i];fmin=a[j];}
return fmax,fmin;
};//if
mid = (i+j) /2;
MaxMin(i,mid,gmax,gmin);
MaxMin(mid+1,j,hmax,hmin);
fmax=max(gmax,hmax);
fmin=min(gmin,hmin);
return fmax,fmin;
};//MaxMin
这个函数过程最初由调用MaxMin(l,n,x,y)实现。为加深对这个过程的理解,请看下面的例子。
例4.1 在下述九个元素上模拟函数过程MaxMin。
a[1..9]:[l] [2] [3] [4] [5] [6] [7] [8] [9]
22 13 -5 -8 15 60 17 31 47
用一棵树来描述递归调用的轨迹是很清晰的,其中的一个结点表示一次递归调用,每作一次新的调用就增加一个结点。对于这个程序来说,每个结点有四项信息:i,j,fmax,fmin。根据上面的数组 a[],就可画出图4.1所示的树。图中,根
您可能关注的文档
- 2015年高三“广州一模”调研测试考学校统一阅卷.doc
- 2015年高职单招政策加分申请表.doc
- 2015爱尔兰梅努斯大学.doc
- 2015级邮轮班第二学期课程表.doc
- 2015高中生物理竞赛决赛试题.doc
- 20米框架式高杆灯结构简介及技术参数.doc
- 21世纪不动产杭州区域分部 主题:制式物品订购.doc
- 21世纪对中学语文教师的要求.doc
- 21世纪广告国际峰会参会注册回执-营销新时代 传播E革命.doc
- 21世纪广告国际峰会理事会.doc
- 北京市顺义区牛山第二中学初中信息技术教学设计:5.3图像初级处理.docx
- 3.2 图文混排教学设计-2024—2025学年河大版(2012)初中信息技术七年级上册.docx
- 北师大版(2019)必修 第一册Unit 3 Celebrations Lesson 1 Spring Festival教案.docx
- 2.4物质的分类练习教学设计-2024-2025学年浙教版九年级上册科学.docx
- 高中信息技术选修2教学设计-8.2.1流媒体与流媒体技术-粤教版.docx
- 2.4可以复用的代码——完善购物系统教学设计2023—2024学年教科版(2019)高中信息技术必修1.docx
- 第五节 水的组成 教学设计 (3).docx
- 古诗词诵读《桂枝香 金陵怀古》教学设计 2023-2024学年统编版高中语文必修下册.docx
- 7.2《东南亚》(第二课时)(教学教学设计)-2023-2024学年七年级地理下册(商务星球版).docx
- 3.3体液调节与神经调节的关系教学设计-2023-2024学年高二上学期生物人教版选择性必修1.docx
文档评论(0)