三分思想是二分的一个简单延展
二分区间要求是简单线性变换
而对于二次函数等单 峰 / 谷 函数无法获得正确的逼近趋向
而三分搜索可以解决这样的问题
设左右两三分点 X, Y
若F(X) > F(Y)
则有 X = A && Y = B 或 X = A && Y = C;
则必定有峰在X 右侧
同理
则必定有峰在Y 左侧
结束
注意此处两三分点 X Y 并不是严格三等分
而是 X 为总区间中点
Y 为 X 到 最右区间中点
因为假若严格三等分
当 fst == -lst 时
fst + lst == 0
则三分点X = 0 / 3 == Y = 0 * 2 / 3
答案肯定就错了
对于浮点数求解直接固定次数暴力循环即可
代码
ld fst = -INF, lst = INF;
ld midfst, midlst;
ld disa, disb;
for(int i = 0; i < 50; i++)
{
midfst = (fst + lst) / 2.0, midlst = (midfst + lst) / 2.0;
disa = retdis(midfst), disb = retdis(midlst);
if(disa >= disb)
fst = midfst;
else
lst = midlst;
}