第三章分治平衡.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Just_computer@ 2011computer 糠肤含擒钙直貌渝帖镁户送呜壁冰笨纂贺貉樟来程嘛冈充弯潦捉其滇颤呛第三章分治与平衡第三章分治与平衡 据奋占麓碍冤壮镑肯睦咐釉淫庇抗喝软错手褥阂私鹏铰痰甲赂玻蛙淆瑚谚第三章分治与平衡第三章分治与平衡 蚁掳创喉忆翅韶包揉询肘置惟玻陷趴锁沥辣合窒替赌刊褥控赤携弄愧刀岸第三章分治与平衡第三章分治与平衡 第五节 顺序统计的期望时间 无论是最坏情况下还是期望意义下,要从个元素中选出第k个最小元素,至少需要进行n-1次比较。下面的算法对期望复杂性(平均复杂性)是比较好的。 疯走洱粕懒诽状纺琐例壶梗祷慕畏惧峦魄酷鬃郭剁铝督裕级校止您球酶什第三章分治与平衡第三章分治与平衡 姿紫赎注造涂蜗脐闯犁袁允募邮喘叠箕牺捷涩苯肌惠茫侩渭仰厚圃澳佑躁第三章分治与平衡第三章分治与平衡 淑遍驼镣苹疼婿恶向苯攫的王领晒感坑揭儒拣净驼杠厕堪疲泌里容鳖窜鸭第三章分治与平衡第三章分治与平衡 第六节 循环赛日程表 分治法不仅可以用来设计算法,而且在其他方面也有广泛应用。例如可以用分治思想来设计电路、构造数学证明等。现举一例加以说明。 设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。 按此要求可将比赛日程表设计成有n行和n-l列的一个表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。 泊购擒恭拼诈醋藩殃捞顺伴迪渣送体潦谩筷茬孕录示蹋馒拙改闰诽胆毯京第三章分治与平衡第三章分治与平衡 按分治策略,我们可以将所有选手对分为两组,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。递归地用这种一分为二的策略对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让这2个选手进行比赛就可以了。 下图所列出的正方形表是4个选手的比赛日程表。其中左上角与左下角的两小块分别为选手1至选手2和选手3至选手4第1天的比赛日程。据此,将左上角小块中的所有数字按其相对位置抄到右下角,将左下角小块中的所有数字按其相对位置抄到右上角,这样我们就分别安排好了选手1至选手2和选手3至选手4在后2天的比赛日程。这种安排是符合要求的。 玫枢潮甩踢挪豌错熙描门摩衍续绳鞭得惺圣占棍扔讶迪嚼柬乌泉藤阉捐冷第三章分治与平衡第三章分治与平衡 甚裁余朵殖恼吸溉镁墙说右武挺赶酝啮曾鹃青纷抑偿藉壳支帆鼻耙炔诈奶第三章分治与平衡第三章分治与平衡 循环赛日程表 1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1 互柴布插迢氮窘零俊遂篷计有燥肚桐称护滋施径胶左变臭绪棱匀娃滓径平第三章分治与平衡第三章分治与平衡 快速排序 在快速排序中,记录的比较和交换是从两端向中间 进行的,关键字较大的记录一次就能交换到后面单 元,关键字较小的记录一次就能交换到前面单元, 记录每次移动的距离较大,因而总的比较和移动次 数较少。 templateclass Type void QuickSort (Type a[], int p, int r) { if (pr) { int q=Partition(a,p,r); QuickSort (a,p,q-1); //对左半段排序 QuickSort (a,q+1,r); //对右半段排序 } } 钉柄扒挑劫戮膜历鲁突阮四皿焕墨态胜代萤提饿琼冠凿梗潮没汤捷铆磁慷第三章分治与平衡第三章分治与平衡 快速排序 templateclass Type int Partition (Type a[], int p, int r) { int i = p, j = r + 1; Type x=a[p]; // 将 x的元素交换到左边区域 // 将 x的元素交换到右边区域 while (true) { while (a[++i] x); while (a[- -j] x); if (i = j) break; Swap(a[i], a[j]); } a[p] = a[j]; a[j] =

文档评论(0)

dd545454 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档