算法实践报告

项目名称:二分法求函数的零点

问题描述:给定一个已知一定有根的单调函数,给出一个异侧的根的区间,要求通过二分法求出函数的解并保留小数点后六位。

算法描述

因为该函数一定有根,通过两区间不断逼近必定能找到根,最后根据题目提醒的判别式判断是否等于0;

算法:开始用数组存储两个区间,通过区间算出“mid”值,将mid带入函数中判断是否大于0,小于0,或等于0,若等于0则为根,若大于0则

说明根在mid右边,左边界需要继续往右缩进,所以mid的值变成left,重新计算mid值递归该过程,若小于0则说明根在mid左边,右边界需要

往左缩进,所以mid值给right,然后继续计算mid,递归该过程。直达f(mid)等于0即跳出循环。得出答案。

时间复杂度和空间复杂度分析:

 

本题中的二分算法是通过两个边界计算出mid值,每次都用mid值去判断是否大于小于或等于0,若大于0,则要找的值在数组右边,小于0则要

找的值在数组左边。每次进行二分查找的元素基数都为上一次查找基数的二分之一,最后一次查找的元素基

数肯定会大于一,则假设用二分法在N个元素中查找某个元素,则第一次,第二次,第三次,第n次的查找元素基数分

别为N,N/2,N/4......N/(2^n),由此可得简单表达式如下:N/(2^n)>=1 ----> N>=2^n ----> log2N>=n ----> o(n)=o(logN)

 

空间复杂度:

o(1)

 

心得体会:

在这一题中,看见时间复杂度为logn就知道要用分治法,但是这题中要明白该函数一定有根,只要不断逼近就一定能找到,同时要看清楚题目中1.5大于0,2.4小于0

判断出是单调递减函数,来设置算法中判断完>/<0时两边界是mid给left还是right。

 

分治法的个人体会与心得:

 

分治法每次能把样本折半筛选,不用整个数组遍历的查找,能快速的找到目标。

 

 

 

posted @ 2021-09-28 21:13  黄仲祺  阅读(64)  评论(0编辑  收藏  举报