二分 & 三分
整数二分
int BinarySearch(const int L,const int R)
{
int l=L-1,r=R+1;
while(l+1<r)
{
int mid=l+r>>1;
if(check(mid)) l=mid;
else r=mid;
}
return l;
}
浮点数二分
const double EPS=1e-6;
double BinarySearch(const double L,const double R)
{
double l=L,r=R;
while(r-l>EPS)
{
double mid=(l+r)/2.0;
if(check(mid)) l=mid;
else r=mid;
}
return l;
}
浮点数三分求单峰函数极值
const double EPS=1e-6;
double TernarySearch(const double L,const double R)
{
double l=L,r=R;
while(r-l>EPS)
{
double lmid=l+(r-l)/3.0,rmid=r-(r-l)/3.0;
double lres=calc(lmid),rres=calc(rmid);
if(lres<=rres) l=lmid;
if(lres>=rres) r=rmid;
}
return l;
}
标签:二分,const,int,double,mid,EPS,模板,三分
From: https://www.cnblogs.com/jerrycyx/p/18351393