算法第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:合并子问题的解
分治法类似于数学归纳法,找到解决问题的求解方程式,然后根据方程式设计递归程序。