二分的本质
二分的本质就是将一个最优化问题转换成一个判定问题
用二分的条件
所以若是某一步需要计算一个最优值,我们无法直接求得,
但是容易判断一个值是否是最优值比较容易,
并且这个最优值一定在区间内部,区间的中点的取值能将区间缩小一半
浮点数二分
模板
double bsearch(double l, double r)
{
while(r-l>=1e-4)
{
double mid = ( l + r ) / 2;
if (check(mid)) r = mid;
else l = mid ;
}
return l;
}
double bsearch(double l, double r)
{
for(int i=0;i<200;i++)
{
double mid = ( l + r ) / 2;
if (check(mid)) r = mid;
else l = mid ;
}
return l;
}
小tip 精度
浮点数二分 区间长度小于一个很小的数的时候 就认为找到答案了
经验告诉我们这个数一般取1e-(k+2) k是题目要求保留的位数,如此题就是1e-4
使用1e7去除以check函数的时间复杂度得到循环次数
将while循环改为for循环,如此题1e7/1e5就是100