三分算法
主要用于求单峰函数的极值点,例如下图:
设当前函数为\(f\),若\(f(midl) < f(midr)\),那么极值点一定在\([midl, r]\)中取到,令\(l = midl\)继续执行。
反之,若\(f(midl) > f(midr)\),那么极值点一定在\([l, midr]\)中取到,令\(r = midr\)执行。
算法模板
while (r - l > eps)
{
mid = (l + r) / 2;
double fl = f(mid - eps), fr = f(mid + eps);
if (fl < fr)
l = mid; // 这里不写成mid - eps,防止死循环;可能会错过极值,但在误差范围以内所以没关系
else
r = mid;
}