实验1 分治法的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 分治法的应用
1.实验目的
(1)理解分治法的思想。
(2)掌握用分治法解决问题
2.实验类型
设计型
3.预习要求
熟悉Visual C++ 6.0上机编程调试的基本方法。掌握教材上分治法的思想。
4.实验基本要求
(1)仔细阅读实验的题目,选择其中的两个题目完成,设计的程序要满足正确性,代码中有关键的注释,书写格式清晰,简洁易懂,效率较高,适合各种合理输入,并能对不合理输入做出正确的提示。
(2)实验题目:
a)最大值次大值
★问题描述
输出n个数中的最大值和次大值(注意:不能用排序)
★编程任务
利用分治法策略设计一个算法对任意输入的n个数可以输出最大值和次大值★数据输入
第一行输入数的个数n,第二行输入n个数
★结果输出
输出最大值和次大值。
输入示例输出示例
3 3 2
2 1 3
★实现提示
最大数是两组中的最大值中较大的值,次大值是从两组中较小的最大值和另一组的次大值选取。
b)查找第K小元素
★问题描述
在n个数当中找第K小元素问题。
★编程任务
利用分治策略试设计一个算法对任意的n个数构查找第K小元素,不能用排序。
★数据输入
第一行输入n的值,第二行输入n个数,第三行输入K的值。
★结果输出
程序运行结束时,输出第K小元素的值。
输入示例输出示例
6
5
8 1 3 6 9
3
★实现提示
使用快速排序中所采用的分划方法。
c)中位数问题
★问题描述
设X[ 0 : n - 1]和Y[ 0 : n– 1 ]为两个数组,每个数组中含有n个已排好序的数。找出X和Y的2n个数的中位数。
★编程任务
利用分治策略试设计一个算法求出这2n个数的中位数。
★数据输入
第1行中有1个正整数n(n<=200),表示每个数组有n个数。接下来的两行分别是X,Y数组的元素。
★结果输出
程序运行结束时,将计算出的中位数输出。
输入示例输出示例
14
3
5 15 18
3 1
4 21
★实现提示
比较两个序列的中位数大小,如果两个数相等,则该数为整个2n个数据的中位数,否则通过比较,分别减少两个序列的查找范围,确定查找的起止位置,继续查找。
按照指定的格式书写实验报告,实验报告清晰,但不赘述,字体最大为四号。在实验结束一周内上交实验报告。
5.实验基本步骤
(1)选定实验题目,仔细阅读实验要求,设计好输入输出,按照分治法的思想构思算法,选取合适的存储结构实现应用的操作。
(2)设计的结果应在Visual C++ 实验环境下实现并进行调试。
(3)请完成实验报告的编写,实验报告中要有详细的测试记录,包括各种可能的测试数
据。