//说明:此篇文章不是出自本人(virtualtan),不过作者不知,无法注明,侵权联系删除
//我之前打的貌似有点问题…没事理解思路就行
三分:
如果说二分针对的是单调函数,那么三分针对的是双调函数。也就是下面这样的函数。(如果是y = x*x)
三分是求这样先增后减或者是先减后增的函数的极值的。
具体步骤就是:对于区间 (L,R),先求出 1/3 处的 M1 和 2/3 处的 M2,然后比较 M1 和 M2 处的大小,如果 M1 处的值大于 M2 处的值,那么极值一定在(M1,R)这个区间范围内,否则一定在 (L,M2)这个范围内。
因为如果 M1处大于M2处的话,M1不可能在极值点的右边。。。所以。。。就是这样了。。。每次变成原来区间的2/3大小。。。
二分三分的用处很广很广,比如对一个符合的序列,或者是在计算几何中用来求一些不好算的值等等。。。
比如求点到椭圆的最近距离的题目,就可以通过三分一次次的逼近。
三分模板:
double l = 0, r = 1e3;
while(r - l > 1e-11)
{
double m1 = l + (r - l) / 3;
double m2 = r - (r - l) / 3;
if(f(m1) > f(m2)) l = m1;
else r = m2;
}