算法第二章实验报告

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

1、问题描述

有函数: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位。

 

2、算法描述

思路:利用二分搜索方法,在符合判断条件前(区间间距大小大于1e-7)不断地缩小middle的定义域。

 

 

 

 

  • 当f(x)>0时,则令x=middle赋给left;
  • 当f(x)<0时,则令x=middle赋给right;
  • 当f(x)=0时,停止递归,输出middle。

 

3、复杂度分析

时间复杂度:

——最好情况:

一次就恰好符合判断条件时为O(1)

——一般情况:

当一共有n个元素时,每次将元素分成两份(参照二叉树),也就是给每一层的子叶做除法,除以2,一直分到子叶为1。

2^x = n

X=log2n

因此为O(logn)

  空间复杂度分析

每次只需middle来辅助查找判断,因此空间复杂度为O(1)。

 

4、心得体会

本次实践中我颇有收获,分为团队合作的感悟与分治法的感悟。

团队合作:

通过这次实践课的团队合作,我发现了思路的多样性和代码呈现形式的多样性。每个人的思考与解决问题的方式都各异,但我认为只要是思考了,敢于表达,就离成功靠近一步了。不去评判这个思考结果的好坏,反而应该鼓励多向思考,因此团队合作能更好的拓展自己的思路,发现自己逻辑上的不足之处,正所谓“有则改之无则加勉”。

分治法:

分治法也就是“分而治之”,将大规模的问题拆分成若干个小问题(子问题),再逐步解决子问题,最后将子问题的解合并。这种方法比单一的递归循环效率要高。

 

 

posted @ 2021-10-08 00:10  小二脸  阅读(52)  评论(0编辑  收藏  举报