算法设计及分析实验二.pdfVIP

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

实验二:分治法实验

一、实验目的

(1)把握设计有效算法的分治策略。

(2)通过快速排序学习分治策略设计技术

二、实验要求

(1)熟练把握分治法的大体思想及其应用实现。

(2)明白得所给出的算法,并对其加以改良。

三、分治法的介绍

任何一个能够用运算机求解的问题所需的计算时刻都与其规模有关。问题的规模越小,

越容易直接求解,解题所需的计算时刻也越少。而当n较大时,问题就不那么容易处置了。

要想直接解决一个规模较大的问题,有时是相当困难的。分治法的设计思想是,将一个难以

直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

若是原问题可分割成k个子问题,1k≤n,且这些子问题都可解,并可利用这些子问

题的解求出原问题的解,那么这种分治法确实是可行的。由分治法产生的子问题往往是原问

题的较小模式,这就为利用递归技术提供了方便。在这种情形下,反复应用分治手腕,能够

使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其

解。这自然致使递归进程的产生。分治与递归像一对孪生兄弟,常常同时应用在算法设计当

中,并由此产生许多高效算法。

分治法的适用条件:

(1)该问题的规模缩小到必然的程度就能够够容易地解决;

(2)该问题能够分解为假设干个规模较小的相同问题,即该问题具有最优子结构性质。

(3)利用该问题分解出的子问题的解能够归并为该问题的解;

(4)该问题所分解出的各个子问题是彼此独立的,即子问题之间不包括公共的子问题。

上述的第一条特点是绝大多数问题都能够知足的,因为问题的计算复杂性一样是随着

问题规模的增加而增加;第二条特点是应用分治法的前提,它也是大多数问题能够知足的,

此特点反映了递归思想的应用;第三条特点是关键,可否利用分治法完全取决于问题是不是

具有第三条特点,若是具有了第一条和第二条特点,而不具有第三条特点,那么能够考虑贪

婪法或动态计划法。第四条特点涉及到分治法的效率,若是各子问题是不独立的,那么分治

法要做许多没必要要的工作,重复地解公共的子问题,现在尽管可用分治法,但一样用动态

计划法较好。

分治法的大体步骤:

分治法在每一层递归上都有三个步骤:

分解:将原问题分解为假设干个规模较小,彼此独立,与原问题形式相同的子问题;

解决:假设子问题规模较小而容易被解决那么直接解,不然递归地解各个子问题;

归并:将各个子问题的解归并为原问题的解。

它的一样的算法设计模式如下:Divide-and-Conquer(P)

1.if|P|≤n0

2.thenreturn(ADHOC(P))

3.将P分解为较小的子问题P1,P2,...,Pk

4.fori←1tok

5.doyi←Divide-and-Conquer(Pi)△递归解决Pi

6.T←MERGE(y1,y2,...,yk)△归并子问题

7.return(T)

其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已

容易直接解出,没必要再继续分解。ADHOC(P)是该分治法中的大体子算法,用于直接解小规

模的问题P。因此,当P的规模不超过n0时,直接用算法ADHOC(P)求解。算法

MERGE(y1,y2,...,yk)是该分治法中的归并子算法,用于将P的子问题P1,P2,...,Pk的相

应的解y1,y2,...,yk归并为P的解。

依照分治法的分割原那么,原问题应该分为多少个子问题才较适宜?各个子问题的规

模应该如何才为适当?这些问题很难予以确信的回答。但人们从大量实践中发觉,在用分治

法设计算法时,最好使子问题的规模大致相同。换句话说,将一个问题分成大小相等的k

个子问题的处置方式是行之有效的。许多问题能够取k=2。这种使子问题规模大致相等的做

法是出自一种平稳(balancing)子问题的思想,它几乎老是比子问题规模不等的做法要好。

分治法的归并步骤是算法的关键所在。有些问题的归并方式比较明显,有些问题归并方式比

较复

文档评论(0)

159****1506 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档