二分查找, 使用与单调的函数, 用于查找true 与 false 的分割点, 该点为极限值。
三分查找的概念 : 在二分查找的基础上, 在其中一个区间再进行一次二分。即三分。通常也用来确定最值。
而三分查找 是寻找峰值,即函数的趋势并不是单调的
通过比较mid 和 mmid 对峰值的接近程度(一般是比大小),来一次次的缩小L 和 R 的范围。
如上图, judge( mid ) < judge( mmid ) 则可缩小边界为 R = mmid;
个人更喜欢的三分模板:
double tree_devide(double L, double R)
{
while(R - L >= eps)
{
double mid = L + (R - L) / 3;
double mmid = R + (R - L) / 3;
if(judge(mid) <= judge(mmid))
L = mid;
else
R = mmid;
}
return (mid + mmid) / 2;
}
基本的三分模板:
double tree_devide(double L, double R)
{
while(R - L >= eps)
{
double mid = (L + R) / 2;
double mmid =(mid + R) / 2;
if(judge(mid) <= judge(mmid))
L = mid;
else
R = mmid;
}
return (mid + mmid) / 2;
}