二分 & 三分
整數二分
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;
}