算法第二章上机实践报告
实践题目名称
7-2二分法求函数零点
问题描述
整理原问题得:
有函数:f(x)=x5−15x4+85x3−225x2+274x−121,已知方程在(1.5,2.4)上有且只有一个根,请用二分法求出该根,此根满足 f(1.5)>0,f(2.4)<0。
算法描述
题目给定一个区间,根据分治法的思想,我们可以不断取区间中点进行判断是否是该方程的根。因为题中函数在区间内有且只有一零点,由函数图像的性质,可以从区间中点的函数值的正负判断区间往哪边二分缩小:
若函数值大于0,则往右边缩小,若函数值小于0,则往左边缩小。
最后在区间长度为0的时候,确定此时中值为所求方程的解,由于浮点数的精度较差,故最后在区间长度小于1e-7的时候认为此时中值为所求方程的解。
算法时间及空间复杂度分析
- 时间复杂度
使用二分查找的思想,每次查找的区间就是n、n/2、n/4……设最坏情况要循环k次,最后区间长度为1,则有n/2^k=1,故时间复杂度为logn。但由于题目的问题规模已经给出(区间给定),则最后的时间复杂度为O(1)。
- 空间复杂度
由于没有在循环中反复申请额外的储存空间,所以空间复杂度为O(1)。
心得体会
- 二分法求方程的解是二分搜索的一个新的运用场景,让我明白了计算机和人脑在解决问题时的差异,计算机可以通过高效率的穷举来实现大规模运算,而我们写出更好的算法就可以加快计算机穷举的速度,从而提高工作效率。
- 由于计算机的浮点数精度有限,我们在设计算法时不能想当然,不然可能会酿成大祸,这对我们的计组知识也有一定要求。
分治法的个人体会和思考
分治法将一个大问题分成一个个的子问题求解,让算法的思路更清晰易懂,其实分治法在中学阶段的学习中也有被运用,在算法设计上使用后让我明白了理清逻辑在算法的设计中是很重要的。