分治算法试题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分治算法试题

分治算法 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。下面通过实例加以说明。 ????【例3】??在n个元素中找出最大元素和最小元素。 ????我们可以把这n个元素放在一个数组中,用直接比较法求出。算法如下:BEGIN MIN:=A[1]:MAX:=A[1]; FOR I:=2 TO N DO BEGIN IF A[I] MAX THEN MAX:=A[I]; IF A[I] MIN THEN MIN:=A[I]; END. ????上面这个算法需比较2(N-1)次,即时间复杂度是2(N-1)。能否找到更好的算法呢?我们用分治策略来讨论。 ????我们把n个元素分成 ????A1={A[1],...,A[int(n/2)]} 和 ????A2={A[INT(N/2)+1],...,A[N]} 两组,分别求这两组的最大值和最小值,然后分别将这两组的最大值和最小值相比较,求出全部元素的最大值和最小值。 ????如果A1和A2中的元素多于两个,则再用上述方法各分为两个子集。直至子集中元素至多两个元素为止。 ????例如有下面一组元素: ????-13,13,9,-5,7,23,0,15。用分治策略比较的过程如下: ????图中每个方框中,左边是最小值,右边是最大值。从图中看出,用这种方法一共比较了10次,比直接比较法的14次减少4次,即约减少了1/3。 ????算法如下: procedure maxmin(i,j,max,min); BEGIN CASE J-I OF 0:MAX:=A[I];MIN:=A[I]; 1:IF A[I] A[J] THEN MIN:=A[I];MAX:A[J]; ELSE MAX:=A[I];MIN:=A[J]; ELSE MID:=(I+J) DIV 2 MAXMIN(I,MID,MAX1,MIN1); MAXMIN(MID+1,J,MAX2,MIN2); MAX:=MAX(MAX1,MAX2); MIN:=MIN(MINI,MIN2); END; ????这种算法在比较数组元素所用时间比比较整数i、j所用的时间多得多时,是一种较优的算法,否则并不是优化的算法。这种算法的程序同学们自己完成。 分治策略在计算机算法中经常应用,而且大多数分为2个子问题,因此也叫做二分法。例如二分法检索、牛顿迭代法求方程的根等。 ????从上述的分治思想来看,运用分治策略解决的问题一般来说具有以下特点: ????1、原问题可以分解为多个子问题,这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。 ????2、原问题在分解过程中,递归地求解子问题,由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解。 ????3、在求解并得到各个子问题的解后,应能够采用某种方式、方法合并或构造出原问题的解。 ????利于分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是经常采用的一种有效的方法。 不难发现,在分治策略中,由于子问题与原问题在结构和解法是的相似性,用分治方法解决的问题,大都采用了递归的形式。在各种时间复杂度为nlog2n的排序方法中,如分治合并排序、堆排序、快速排序等,都存在有分治的思想。实际上,进行分治处理的过程,从数据结构的角度看,其本质就是一个建树的过程。 思考与练习:完成并提交作业   1、在n个不同元素中找出第k个最小元素。   2、写出本节例题的Pascal程序。   3、赛程问题。有n个编号为1到n的运动员参加某项运动的单循环比赛,即每个运动员要和所有其他运动员进行一次比赛。试为这n个运动员安排一个比赛日程,使得每个运动员每天只进行一场比赛,且整个比赛在n-1天内结束。输入运动员人数n(n=10000),输出一个n阶方阵A[1..N,0..N-1],当J0时,A[1,J]表示第1名运动员在第J天的比赛对手。   【分析提示】由于N个运动员要进行单循环比赛,且在N-1天内要结束全部比赛,经过分析,当且仅当N为2的整次幂时,问题才有解,当然解是不惟一的。这样可以将运动员分成两组:1,2,…,N/2和N/2+1,N/2+2,…,N。给第一组运动员安排一

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档