二分三分
一、概念
在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。
时间复杂度:O (logn)
1 double left=“区间下界”,right=“区间上界”,mid; 2 while(right - left > 1.0e-6) 3 { 4 mid = (right + left)/2; 5 if(Caculate(mid)<x) 6 left=mid; 7 else 8 right=mid; 9 }
二、三分法
类似二分的定义left和right
mid = (left + right) / 2
midmid = (mid + right) / 2;
如果mid靠近极值点,则right = midmid;
否则(即midmid靠近极值点),则left = mid;
格式:
1 double mid, midmid; 2 while ( low + eps < high ) 3 { 4 mid = (low + high) / 2; 5 midmid = (mid + high ) / 2; 6 double cmid = cal(mid); 7 double cmidmid = cal(midmid); 8 if ( cmid > cmidmid ) 9 high = midmid; 10 else 11 low = mid; 12 }
1 while(l+1e-11<r) 2 { 3 lmid=l+(r-l)/3; 4 rmid=r-(r-l)/3; 5 if(check(lmid)<=check(rmid)) r=rmid; 6 else l=lmid; 7 }
浙公网安备 33010602011771号