模板 - 二分&三分

Jerrycyx發表於2024-08-09

二分 & 三分

整數二分

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;
}

相關文章