您的位置:首页 > 其它

二分查找在算法竞赛中的应用

2020-05-25 19:01 18 查看

二分查找主要用于暴力查找数据时数据量过大导致的超时
原理可理解为查词典,不断缩小查找的数据范围得以很大程度上减少工作量

整数的二分查找:

对于单调数列可用一些比较好用的函数

binary_search(a+1,a+n+1,k);	   //判断数组a
(1~n)中是否存在k(数组元素不能是递减的,要先排序)
lower_bound(a+1,a+n+1,k)-a;    //返回数组中a
(1~n)第一个大于或等于k的值的位置
upper_bound(a+1,a+n+1,k)-a;    //返回数组中a
(1~n)第一个大于k的值的位置

对于实际问题更加通用的模板

int search(){
int l=左边界;r=右边界;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
return ans;
}

实际问题中运用二分法的难点主要在于左右边界的确定与check函数的写法,建议多加练习,剩下的直接套用这套模板就行~~

实数的二分查找(简单):

//实数二分(重点在于精度)
while(r-l>0.00...1){
......
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: