算法第二章上机实践报告

实践题目名称

二分法求函数的零点

问题描述

已知函数f(x)=x5−15x4+85x3−225x2+274x−121,用二分法找区间[1.5,2.4] 中的根。

算法描述

用二分法进行浮点二分:已知f(1.5)>0,f(2.4)<0,则零点左边的一定f>0,零点右边的一定f<0,此函数是单调递减的。因此我们就令l=1.5,r=2.4,每次取中间值mid,若f(mid)>0,则更新l,对mid到r二分;f(mid)<0则更新r,对l到mid二分。如果刚好==0,则直接输出答案(虽然不太可能,但万一呢)。

算法时间即空间复杂度分析

时间复杂度:

这里并没有输入数组长度n,而是直接给出了常数范围[1.5,2.4],所以是O(1);

但如果给出了数组长度n,则为O(logn):每次取中点更新边界条件,最多logn次,循环内的if比较、边界更新、求f值和取中点等操作都是O(1)。综上即为O(logn);

 

空间复杂度:

O(1),并没有开任何数组。

 

心得体会

学到了分治思想。它能很好地运用于数据范围大的问题,且要在有不同性质分隔的情况下用,如:一组数据,左边的满足一种性质,右边满足另一种性质,则可以通过二分来找两种性质的边界,而不一定是只比大小、找零点。二分找零点的思想可以推广到找边界上。

而且,有二分,肯定就有三分等。能为新的问题打开新思路。

 

分治法的个人体会和思考

分治法,能把一个复杂问题分解为多个相似的子问题,再将子问题分解为更小的子问题,直到子问题可以直接求解,再将答案合并。可以将题目化繁为简。

分治中分而治之的思想在其他算法中也有体现,只不过不同算法应用的条件和场景不同,如:动态规划也是分解问题,把大问题分解为相似的子问题,不过分治是要子问题合并后的答案是总问题的答案,而动态规划不是。

相似的思想在不同的场景有不同的应用,这大概就是算法的魅力!

 

posted @ 2021-09-28 09:37  karshey  阅读(51)  评论(0编辑  收藏  举报