二分二分,一分为二,分而取之
整数集合上的二分
单调递增序列a
初始l=1,r=N
写法1
1 | while(l<r){ |
写法2
1 | while(l<r){ |
- 缩小范围时,r=mid,l=mid+1,取中间值 mid=(l+r)/2
- 缩小范围时,l=mid,r=mid-1,取中间值 mid=(l+r+1)/2
不同形式的原因在于程序除法向下取整
二分的终止条件是l=r,该值就是答案
实数域
确定精度eps
如果保留k位小数,eps=10^(-(k+2))
1 | while(l+1e-5<r){ |
循环固定次数也可
1 | for(int i=1;i<=100;++i){ |