分治算法实验参照.pdfVIP

  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文档。上传文档
查看更多
中 南 大 学 《算法设计与分析》实验报告 姓 名 : 专 业 班 级: 学 号 : 指 导 教 师 : 完 成 日 期 : 2010.1 一.实验名称 分治算法实验 二. 实验目的 1. 了解分治策略算法思想 2. 掌握快速排序、归并排序算法 3. 了解其他分治问题典型算法 三.实验内容 1. 编写一个简单的程序,实现归并排序。 2. 编写一段程序,实现快速排序。 3. 编写程序实现循环赛日程表。 设有 n=2k 个运动员要进行网球循环赛。 现 要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其它 n-1 个选手各 赛一次( 2)每个选手一天只能赛一场( 3 )循环赛进行 n-1 天 四.算法思想分析 1. 归并排序 归并排序算法思想 : 分而治之 (divide - conquer) ,即每个递归过程涉及三 个步骤:第一 , 分解 : 把待排序的 n 个元素的序列分解成两个子序列 , 每个子 序 列 包 括 n/2 个 元 素 。 第 二 , 治 理 : 对 每 个 子 序 列 分 别 调 用 归 并 排 序 MergeSort ,进行递归操作。 第三 , 合并 : 合并两个排好序的子序列 , 生成排序结 果。 归并操作的工作原理如下: (1)申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并 后的序列 (2 )设定两个指针,最初位置分别为两个已经排序序列的起始位置 (3 )比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并 移动指针到下一位置 (4 )重复步骤 3 直到某一指针达到序列尾 (5 )将另一序列剩下的所有元素直接复制到合并序列尾 比较操作的次数介于 (nlogn) / 2 和 nlogn - n + 1 。 赋值操作的次数是 (2nlogn) 。 归并算法的空间复杂度为: Θ (n) 2. 快速排序 快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二, 分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。 (1 )分解:将输入的序列 L[p..r] 划分成两个非空子序列 L[p..q] 和 L[q+1..r] ,使 L[p..q] 中任一元素的值不大于 L[q+1..r] 中任一元素的值。 (2 )递归求解:通过递归调用快速排序算法分别对 L[p..q] 和 L[q+1..r] 进行排序。 (3 )合并:由于对分解出的两个子序列的排序是就地进行的, 所以在 L[p..q] 和 L[q+1..r] 都排好序后不需要执行任何计算 L[p..r] 就已排好序。 3. 循环赛日程表 按分治策略,将所有的选手分为两组, n 个选手的比赛日程表就可以通过为 n/2 个选手设计的比赛日程表来决定。递归地用对选手进行分割,直到只剩下 2 个选手时,比赛日程表的制定就可以简单的处理了。 五.算法源代码及用户屏幕 1. 归并排序 (备注:语言 C++;编译器: MS VS2008;共 2 个文件) head.h文件 #include iostream #include coni

文档评论(0)

131****9592 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档