二分三分
阿新 • • 發佈:2020-11-02
一、概念
在一個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。
時間複雜度: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 }