[特点]
三分法就是用来求单峰函数的极值
二分查找所面向的搜索序列的要求是:
具有单调性(不一定严格单调);
没有单调性的序列不能使用二分查找。
与二分查找不同的是,三分法所面向的搜索序列的要求是:
序列为一个凸(凹)型函数。通俗来讲,就是该序列必须有一个最大值(或最小值),在最大值(最小值)的左侧序列,必须满足不严格单调递增(递减),右侧序列必须满足不严格单调递减(递增)。
[思想]
类似二分的定义Left和Right
mid = (Left + Right) / 2
midmid = (mid + Right) / 2;
如果mid靠近极值点,则Right = midmid;
否则(即midmid靠近极值点),则Left = mid;
[代码]
double cal(double x)
{
//这里放要求的函数;
}
double mid, midmid;
while ( low + eps < high )
{
mid = (low + high) / 2;
midmid = (mid + high ) / 2;
double cmid = cal(mid);
double cmidmid = cal(midmid);
if ( cmid < cmidmid )
high = midmid;
else
low = mid;
}