算法第二章上机实践报告
- 实践题目名称
二分法求函数的零点
- 问题描述
有函数: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
- 算法描述
由题目得知该函数在此区间上递减。根据零点的定义,从区间两端开始取中间的数mid,并判断mid是否小于零,若是,则零点在左端到mid,若不是,则零点在mid到右端,不断逼近判断直到f(mid)<1e-7为止
- 算法时间及空间复杂度分析(要有分析过程)
时间复杂度:不断砍半,所以时间复杂度为logn
第一次 n/2
第二次 n/4
.......
第n次 logn
空间复杂度:仅创建三个double变量 空间复杂度为1
- 心得体会(对本次实践收获及疑惑进行总结)
通过此次上机实践,更加掌握了对二分法的运用。起初并没有注意到此函数在区间内递减,误以为大于0时mid赋值给right,小于零时mid赋值给left导致答案一直错误,后来将区间两端 值代入才发现该函数在区间内递减。同时,经过老师提醒,while的条件中fx(mid)应当取绝对值,避免从另一侧接近零点时总是满足条件。
- 分治法的个人体会和思考
所谓分治法就是把问题划分为若干个相同的小问题,用相同的方法来解决。
我认为分治法的突破口是要发现该问题能够分而治之,像是课堂例子中,一块正方形被分为十六份,有一份已经被小正方形填充,需要用L型积木填满一样。当将正方形扩大,变成 4X16时,需要我们先用L型积木放在中间,将一个大正方形变成四块都被占了一个小正方形的正方形来解决