实验时间 | 2024年 4 月10日19时至22时 | 学时数 | 3 |
1.实验名称 分治与减治算法实验:题目6 淘汰赛冠军问题 | |||
2.实验目的 (1)掌握减治法的设计思想; (2)掌握淘汰赛冠军问题的具体实现过程; (3)通过这个实例进一步掌握递归技术的运用; (4)在掌握的基础上编程实现淘汰赛冠军问题的具体实现过程。 | |||
3.实验内容 假设有n个选手进行竞技淘汰赛,最后决出冠军的选手,请设计竞技淘汰比赛的过程,输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。 | |||
竞技淘汰比赛最自然的想法是将所有选手分成两部分,每部分决出胜者后。让这两个胜者进行比赛,再决出最后的冠军,这属于分治法,显然满足如下递推式: ![]() 应用扩展递归技术求解这个递推式,得到T(n)=O(n)。 下面考虑采用减治法,开始时将所有选手分成n/2组,每组两个选手进行比赛,被淘汰者不参加以后的比赛,然后再将剩余选手分成n/4组,每组两个选手进行比赛,……直到剩余最后两个选手,进行一次比赛即可选出最后的冠军。图给出了一个减治技术解决淘汰赛冠军问题的过程示例(假设按照字符编码进行比较)。 ![]() 减治法求解淘汰赛冠军问题实例
| |||
设函数Comp模拟两位选手meml和mem2的比赛,若meml获胜则函数Comp返回1,否则返回0,并假定可以在常数时间内完成函数Comp的执行,简单起见,用字符表示选手,设字符数组r[n]存储n个选手,算法用C++语言描述如下:
时间复杂度分析: 设n=2k,则外层的while循环共执行k次,在每一次执行时,内层的for循环的执行次数分别是n/2,n/4,…,1,而函数Comp可以在常数时间内完成,因此,算法的执行时间为: | |||
代码运行截图: ![]() 心得: 因为时间原因未能实现输入选手中文名字的比较代码 |
分治与减治算法实验:题目6 淘汰赛冠军问题
于 2024-04-15 19:38:50 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)