代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g
提取码:gf13
| 算法分析与设计第 1 次实验 |
|||||
| 时间 |
2020.3.31 |
地点 |
软件大楼 127 |
||
| 实验名称 |
用分治法查找数组元素的最大值和最小值 |
||||
| 实验目的 |
通过上机实验,要求掌握分治算法的问题描述、算法设计思想、程序设计。 |
||||
| 实验原理 |
使用二分思想的查找算法,根据不同的输入用例,能准确的输出用例中的最值, 并计算出程序运行所需要的时间。 |
||||
| 实验步骤 |
① 将用例数据从文件中读取到数组中 ; ② 进行分治操作如下; ③ 若达到基底(此时仅有一个元素),则将该数据元素返回; ④ 二分操作,将当前区域分为两份,分别在两个区域中找到最值(最大/最小),比较这两个最值,得到更大(或更小)的一个并返回该值; ⑤重复③④步骤直到返回最值; |
||||
| 关键代码 |
关键代码(带注释)1. 二分操作代码(核心)
找最小值的操作与此类似,只是在返回最值时返回较小的那个; 2. 计算时间部分代码
通过时间函数QueryPerformanceFrequency与cpu的主频频率得到程序段的运行时间,可以精确到微妙,比clock函数更精确一些; 3. 随机数生成程序
利用rand()函数生成大小为10、1000、100000的三个文件,其中全为随机数; |
||||
| 测试结果 |
运行结果截图及分析
可以看到对三种规模的文件进行测试的结果,程序段运行时间的单位为ms,而验证是利用普通的遍历法遍历数组找出最值与分治法找出的最值相比较,验证分治算法得正确性; 时间复杂度分析: 因为要找数组中的最值,每个元素都至少要比较一次,因此时间复杂度是 O(n); 从主定理法也可以得到式子: T(n)=2T(n/2)+O(1)(n>1)、1(n=1); 计算可得时间复杂度为O(n) 从运行时间来看,大中小三种规模都相差100倍,而运行时间也几乎相差100倍; |
||||
| 实验心得 |
通过这次实 |
||||





最低0.47元/天 解锁文章
2800

被折叠的 条评论
为什么被折叠?



