首页 > 其他分享 >三分法

三分法

时间:2024-02-01 22:11:29浏览次数:28  
标签:三分法 int double while lmid calc

三分法是二分法的变种,他最基本的用途是求单峰函数的极值点。

  • 三分适用的情况:有唯一的最大值,满足最大值左侧严格单调递增,右侧严格单调递减(或左减右增)。强调严格单调,这样在确定最值是才能判断最值的位置,否则三分法不能缩小左右边界。

三分整数模板

整数的三分可能具有不确定性,可以通过改变while循环的条件while(l+3<r)来缩小范围,再通过小范围暴力更新答案

  • 对于边界的暴力不仅省去了处理边界,甚至常数也有提升,原因未知

凹函数的极小值

int sfmin(){
	int l=0,r=1e9;
	while(l+2<r){
		//cerr<<l<<" "<<r<<endl;
		int m1=(r-l)/3+l;
		int m2=r-(r-l)/3;
		if(cal(m1)>cal(m2))l=m1;
		else r=m2;
	}
	int ans=cal(l);
	
	for(int i=l+1;i<=r;i++)ans=min(ans,cal(i));
	
	return ans;
}

凸函数的极大值

double sfmax(){
	int l=1,r=cnt-1;
	
	while(l+2<r){
		//cerr<<l<<" "<<r<<endl;
		int m1=(r-l)/3+l;
		int m2=r-(r-l)/3;
		if(cal(m1)<cal(m2))l=m1;
		else r=m2;
	}
	double ans=cal(l);
	
	for(int i=l+1;i<=r;i++)ans=max(ans,cal(i));
	
	return ans;
}

三分小数模板

凸函数的极大值

double l, r;
for(int i = 0; i < 300; i++) {//通过直接确定三分次数直接保证不会出现精度问题
    double lmid = l + (r - l) / 3;
    double rmid = r - (r - l) / 3;
    if(calc(lmid) <= calc(rmid))	l = lmid;
    else 	r = rmid;
}
printf("%.6f\n", calc(l));

凹函数的极小值

double l, r;
for(int i = 0; i < 300; i++) {
    double lmid = l + (r - l) / 3;
    double rmid = r - (r - l) / 3;
    if(calc(rmid) >= calc(lmid))	r = rmid;
    else 	l = lmid;
}
printf("%.6f\n", calc(l));

三分例题

https://codeforces.com/contest/1355/problem/E
https://codeforces.com/contest/939/problem/E
https://www.luogu.com.cn/problem/solution/CF939E

标签:三分法,int,double,while,lmid,calc
From: https://www.cnblogs.com/mathiter/p/18002239

相关文章

  • 【学习笔记】【自学】【模板】三分法
    题目描述:给定一个$n$次函数$f(x)$形如$a_1x^n+a_{2}x^{n-1}+......+a_{n-1}x^2+a_nx+a_{n+1}$,求$f(x)_{\max}$,且$x\in[l,r]$,设使得$f(x)_{\max}$的$x$为$x_{\max}$。对于一个区间$[l,r]$而言,若确定使得$f(x)$为最大值的$x$定在$[l,r]$中,则可以使用三分法求......
  • wzOI 2023.8.24 模拟赛(附树的直径和三分法)
    2023-08-2815:53:53$$A$$典型错误一知半解看样例型:如果该队某个数组的值比最大值大就算入答案。上第一次厕所前我的思路:开局\(30\)分钟。显然,我并不需要有一个数值最大才能赢,我只需要其中一个数值比其中一个数值比其中一个数值最大的那个要大的队要大即有可能获胜......
  • 4.12 三分法学习笔记
    三分的思路和二分有一点像。正好这两天数学在学函数的单调性,所以感觉还不错。但是三分法出题似乎有一定的局限性,所以应用并不广泛,但是还是需要学习一下。P3382【模板】三分法 一个洛谷三分的板子。三分求单峰函数极值。三分适用的情况:有唯一的最大值,满足最大值左侧严格单调递......
  • 和菜鸟一起学算法之三分法求极值问题
    7年,唉,可是他错了,女孩根本不爱他,不过期间他的执着和付出,很让我感动,也许自己不太像他那样,才会让自己有现在的处境吧。也许吧。小感慨下。不过现在也挺好的,上上班,写写文章,然后......
  • 二分法&三分法模板
    二分法求函数零点longdoublel=INT_MIN,r=INT_MAX,mid,eps=1e-6;while(r-l>eps){ mid=(l+r)/2; if(f(mid)<0)l=mid; elser=mid;}cout<<l<<endl;三分法......
  • P5931 [清华集训2015]灯泡——三分法
    一道不错的题,只是重构数据后精度太奇怪了,必须打表才能过题目分析根据题意我们可以抽象出一个直角梯形,并设人到墙壁的距离为\(x\),设影子在墙上的高度为\(y\)如果没有在......