三分查詢求極值

2021-08-28 16:13:53 字數 1200 閱讀 4429

**:

我們都知道 二分查詢 適用於單調函式中逼近求解某點的值。

如果遇到凸性或凹形函式時,可以用三分查詢求那個凸點或凹點。

下面的方法應該是三分查詢的乙個變形。

如圖所示,已知左右端點l、r,要求找到白點的位置。

思路:通過不斷縮小 [l,r] 的範圍,無限逼近白點。

做法:先取 [l,r] 的中點 mid,再取 [mid,r] 的中點 mmid,通過比較 f(mid) 與 f(mmid) 的大小來縮小範圍。

當最後 l=r-1 時,再比較下這兩個點的值,我們就找到了答案。

1、當 f(mid) > f(mmid) 的時候,我們可以斷定 mmid 一定在白點的右邊。

反證法:假設 mmid 在白點的左邊,則 mid 也一定在白點的左邊,又由 f(mid) > f(mmid) 可推出 mmid < mid,與已知矛盾,故假設不成立。

所以,此時可以將 r = mmid 來縮小範圍。

2、當 f(mid) < f(mmid) 的時候,我們可以斷定 mid 一定在白點的左邊。

反證法:假設 mid 在白點的右邊,則 mmid 也一定在白點的右邊,又由 f(mid) < f(mmid) 可推出 mid > mmid,與已知矛盾,故假設不成立。

同理,此時可以將 l = mid 來縮小範圍。

這是先增再減的模型 凸型

兩種寫法

int sanfen(int l,int r) //找凸點  

return f(l) > f(r) ? l : r;

}

double three_devide(double low,double up)  

return (m1+m2)/2;

}

後面是先減再增 下凸

和上面反著來

int sanfen(int l,int r) //找凸點  

return f(l) > f(r) ? l : r;

}

double three_devide(double low,double up)  

return (m1+m2)/2;

}

三分求極值

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 這一次我們就簡單一點了,題目在此 在直角座標系中有一條拋物線y ax 2 bx c和乙個點p x,y 求點p到拋物線的最短距離d。輸入第1行 5個整數a,b,c,x,y。前三個數構成拋物線的引數,後兩個數x,y表示p點座...

三分求極值

題目傳送 hihocoder 1142 三分 三分求極值 二分適用於單調函式,對於需要逼近的區間做二等分,來求解某點的值等。三分適用於凸形函式,對於需要逼近的區間做三等分。ac include include include include include include include inclu...

(求極值)三分模板

三分求極值法 如果要求極值,二分法早就失去了他的意義了。不過還是可以用三分法來實現的,就是二分中再來二分。比如我們定義了l和r,m l r 2,mm mid r 2 如果mid靠近極值點,則r mm 否則就是mm靠近極值點,則l m 這樣的話,極值還是可以求的 include include inc...