算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

代码链接: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倍;

实验心得

通过这次实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值