算法第二章上机实践报告

1、实践题目:7-2 二分法求函数的零点

 

2、问题描述:

有函数:f(x)=x5−15x4+85x3−225x2+274x−121 已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。 提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7

输入格式:

无。

输出格式:x

该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

 

3.算法描述

通过二分不断缩小[1.5,2.4]找到符合精度1e-7的根。

·定义double find(double l,double r)

此题利用二分搜索方法,在区间间距大小大于1e-7之前即近似为0,不断地判断中间下标m的元素是否为零点。

(通过画图加深对题意的理解,便于解决题目)

 

4、算法时间及空间复杂度分析

时间复杂度:

最好情况下,答案为第一次的m即所用时间为O(1);二分法的时间复杂度为O(log2n)

空间复杂度:

每次只使用m辅助查找,故空间复杂度为O(1)

 

5、心得体会(对本次实践收获及疑惑进行总结)

本次实践中加深了我对二分法的运用以及对迭代和递归之间区别的理解,一开始过了题目后老师问我为什么不直接用0去比较而是用1e-7我无法回答这个问题,但在将1e-7换成0的时候题目部分错误无法通过,对此我和同伴开始了探讨,在将函数使用迭代的解法后通过了题目,在老师的讲解下我们也明白了使用递归的方法时,同样需要一个精度来判断循环结束条件(边界条件)否则double类型不断二分下去是不会结束循环。除此之外,在讲解算法的时候干对着代码讲解很容易把自己绕进去,可以多动笔在纸上画出来,讲解的思路会更加清晰。

 

6、分治法的体会

分治法也就是“分而治之”,将规模很大的问题拆题分成许多小问题(子问题),再一步步解决子问题,再将子问题的解合并。这样可以大大提高解决问题的效率,同样也告诉了我们在日常生活中遇到非常困难的问题时不要心急,将问题分解再去解决就容易许多了。

posted @ 2021-10-05 23:33  张力元  阅读(55)  评论(0编辑  收藏  举报