算法第2章实践报告


1.实践题目名称

 二分法求函数的零点

2.问题描述

 

 

 

 

 

 3.算法描述

 

 

 已知 f(1.5)>0,f(2.4)<0,取左边值为1.5,右边值为2.4,当右边值减左边值大于1e-7,将左边和右边值相加再除以2得到中间值,如果中间函数值大于1e-7,就将该中间值赋给左边值;如果中间函数值小于1e-7,就将该中间值赋给右边值,以此循环直到得到中间函数值等于1e-7,得到的该中间值即为题目要求的根。

 

4.算法时间及空间复杂度分析(要有分析过程)

时间复杂度:取中间值为O(1),子问题规模为原问题规模的一半即T(n/2),所以时间复杂度为T(n) = T(n/2) + O(1) = O(log n)

空间复杂度:只需要储存left, right, m这三个变量,所以空间复杂度为O(1)

 

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

我学会了用二分法查找元素,从数组的中间元素开始搜索,如果要求查找的元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,使得到的中间元素不断逼近要求查找的元素,当中间元素无限接近要求查找的元素便找到目标元素了。

 

6.分治法的个人体会和思考

分治法可分为三个阶段:

devide:整个问题划分为多个子问题

conquer:求解各个子问题(递归调用)

merge:合并子问题的解

 

 

 

分治法类似于数学归纳法,找到解决问题的求解方程式,然后根据方程式设计递归程序。

posted @ 2021-10-05 22:09  suidz  阅读(35)  评论(0编辑  收藏  举报