在二分搜索法的基础上,在右区间(左区间)再进行一次二分,这样与二分法相似的搜索,我们称之为三分搜索法,也就是我们平时所说的三分法。
三分搜索法通常用来迅速确定最值。
二分搜索法所面向的搜索序列的要求是:具有单调性(不一定严格单调)。没有单调性的序列便没法使用二分法。
而与二分法不同的是,三分法所面向的搜索序列的要求是:序列为一个凸性函数。通俗来讲,就是该序列必须有一个最大值(或最小值),在最大(小)值的左侧序列,必须满足不严格单调递增(递减),右侧序列必须满足不严格单调递减(递增)。
double cal(type a)
{
/*依据题目写*/
}
double solve()
{
double left,right,mid,midmid;
left=min;
right=max;
while(right-left>EPS/*精确度*/)
{
mid=(left+right)/2;
midmid=(mid+right)/2;
if(cal(mid)>=cal(midmid))
right=midmid;
else
left=mid;
}
mid=(right+left)/2;
return mid;
}