- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式系统开发 计算机学院计算机科学与技术系 主讲:陈 蕾 E-mail: chenleijx@ 第九章 并行算法 9.1 并行排序 9.2 矩阵运算 9.3 组合优化 8.1 并行排序 并行排序研究的必要性: 排序是计算机所需要经常完成的操作。由于排序后的数据常常比无序的数据更容易处理(比如查找的效率更高),所以很多算法要求数据是排序的。大数据量的排序在单个处理器上串行执行需要消耗大量的时间,这就提出了并行排序的需求。 排序的分类:内部排序和外部排序 常用的排序算法大多是基于比较(Comparison-based)的排序,已经证明,这类排序算法的最低时间复杂度是 ,其中n是待排序的元素数目。 因此如果使用n个处理器基于顺序排序算法的最好并行时间复杂性为: 并行排序的几个关键问题 串行排序算法的并行化需要把待排序的元素分布到各个处理器上,在这过程中有几个问题需要解决。 1. 数据如何分配到不同的处理器上 2. 不同处理器上的元素如何进行大小比较 问题1: 数据如何分配到不同的处理器 (1)、可以把所有数据放在一个结点上,其它结点从此结点取数据并把处理结果再回送给此结点。 很多情况下要求源数据和处理结果数据都分布在不同的结点上,这就要考虑数据的分布问题。 (2)、一个直观的办法是把所有参与排序的处理器和数据编号,源数据按照其编号取模分布到相应的处理器上。 排序结果在各个处理器上均匀分布,满足小编号处理器上的每个元素均小于大编号处理器上的每个元素。 问题2:不同处理器上的元素如何进行大小比较 比较操作和位置交换操作是排序算法中的基本操作,它们在串行程序中都很容易实现,因为要比较大小或交换位置的两个元素都在存储空间中。而在并行算法中,这些操作并不是想象的那么容易,因为两个元素分别位于不同的结点上。 考虑一种极端的情况,待排序的元素与处理器的个数一样多,这样每个处理器上存储一个待排序元素。假定在算法执行过程中,两个处理器Pi和Pj要比较它们的元素ai和aj,比较结束后,Pi上要存储两个元素中较小的一个,而Pj则存储较大的一个。 如何完成比较呢? 再来看每个处理器上存储多个待排序元素的情况。设处理器个数为p,待排序元素数目为n,则每个处理器上平均有n/p个元素。 定义每个处理器上的所有元素为一个超元素,定义超元素之间的大小关系。当一个超元素E1中的所有元素都不大于另一个超元素E2中的任何元素时,定义为E1≤E2。同理定义等于(=)、小于等于(≥)等关系。与普通元素不同的是,两个超元素之间可能不是≥、=、≤中的任何一个。容易验证,超元素之间的≤关系满足传递性。 来看两个编号相邻的处理器之间如何进行元素比较。与每个处理器上一个元素的情形类似,每个处理器把超元素发给对应的处理器,每个处理器在接受到对方的超元素后,合并两个超元素并排序(归并排序),然后Pi取值较小的一半,而Pj则取值较大的一半。整个过程分四步:通信-比较-合并-拆分 冒泡排序串行算法 串行冒泡排序算法包括两个循环,每次操作比较两个相邻的元素,然后通过交换使之符合指定的排序。 以下是串行冒泡排序算法: procedure BUBBLE_SORT(n) Begin for i:=n-1 downto 1 do for j:=1 to i do compare-exchange (aj,aj+1); End BUBBLE_SORT 冒泡排序的步骤 可以通过一些手段来提高其性能,比如当没有发现交换时便结束循环等,不过这并不改变算法运行的时间复杂度O(n2)。 冒泡排序顺次比较相邻的元素,这在本质上是一个串行的过程,很难并行化。将顺次的比较过程并行化将导致算法错误,得不到预想的结果。 考虑到内循环的下一次迭代的“冒泡”动作可以在前一次迭代完成之前开始,只要下一次“冒泡”动作不影响前一次迭代,所以可以开发流水线并行算法。 流水线并行 一维线性网络中的奇偶置换冒泡排序 设待排序的元素数目为n,以n为偶数来说明奇偶置换排序。奇偶置换排序用n个阶段完成对n个元素的排序,每一个阶段需要n/2个比较+交换操作。这n个阶段分成两类,分别称为奇操作阶段和偶操作阶段。 设 是待排序的序列,在每个奇操作阶段,奇数索引的元素与自己的右邻居进行比较并在必要时交换,同样,在每个偶操作阶段,偶数索引的元素与自己的右邻居进行比较和交换。 经过n个阶段进行这样的操作后,整个序列便处于有序状态。 对8个数进行奇偶互换排序 串行奇偶置换冒泡排序程序 1. procedure ODD
您可能关注的文档
最近下载
- 0102、U9 cloud供应链-采购管理.pptx VIP
- 上海市各机构名称英译.docx VIP
- 0303、U9 cloud财务-应收管理.pptx VIP
- 0302、U9 cloud财务-应付管理.pptx VIP
- 0304、U9 cloud财务-总账管理.pptx VIP
- 数据通信与计算机网络(第3版)全套PPT课件.pptx
- 0105、U9 cloud供应链-多组织供应链协同.pptx VIP
- 第5课 走近科学家 第3课时(课件)2025-2026学年道德与法治三年级上册统编版.pptx VIP
- 临床药物治疗学第四节.pdf VIP
- 2025年湖南中医药高等专科学校单招职业技能测试必刷测试卷最新.docx VIP
文档评论(0)