一、概念
在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。
时间复杂度:O (logn)
格式
double left=“区间下界”,right=“区间上界”,mid;
while(right - left > 1.0e-6)
{
mid = (right + left)/2;
if(Caculate(mid)<x)
left=mid;
else
right=mid;
}
二、三分法
类似二分的定义left和right
mid = (left + right) / 2
midmid = (mid + right) / 2;
如果mid靠近极值点,则right = midmid;
否则(即midmid靠近极值点),则left = mid;
格式:
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;
}