三分查詢總結

2021-08-09 01:38:47 字數 828 閱讀 7006

演算法背景:

二分與三分類似。

二分法利用的是函式的單調性。而三分法利用的是函式的單峰性。二次函式就是乙個典型的單峰函式。三分法與二分法一樣,它會不斷縮小答案所在的求解區間,直到求出極值。

如圖:

演算法流程:

1、設當前求解的區間為 [l,r],令 m1=l+(r-l)/3,m2=r-(r-l)/3;

2、接著我們計算這兩個點對應函式值 find(m1),find(m2)(類似於二分中的check);

3、 之後我們將兩點中函式值更優的那個點稱為好點 (若計算最大值,find後結果更大的那個點就稱為好點,計算最小值等同理),而函式值較差的那個點稱為壞點。我們可以證明,最優點與好點會在壞點的同側。如上圖,find(m1)>find(m2),所以m1是好點,m2 是壞點,因此最後的最優點會與m1一起在m2的左側,即我們的求解區間由[l,r]變成[l,m2];

4、因此同理我們可以重複以上操作不斷縮短求解區間,直至可以得出近似最優解(根據題目的精度要求)。

關鍵**:

double l,r;//l與r根據題目要求自設範圍 

while(r-l>eps)//eps根據題目要求自設精度

附練習題:三分模板

附我的講解:

三分套三分,有點難度

附我的講解:

千古的部落格

三分查詢演算法

輸入 n個元素的公升序陣列 a 1 n 和元素x 輸出 如果x a j 1 j n,則輸出就,否則輸出 0.步驟 1 先把整個區間的 n 3的值 lmid n 3 left。2 再取右側區間的中間值 rmid lmid right,從而把區間分為三個小區間。3 我們a lmid 的值與 x進行比較,...

二分查詢,三分查詢

今天看分治法那塊,裡面提到了二分搜尋,想想好多年沒寫這個簡單的程式了,話說當年第乙個真正意義上理解的是三分查詢,即二分搜尋的拓展,所以根據分治法的思想,重新寫了二分搜尋,三分搜尋這兩個程式,突然回憶起來,當初對m l r 2,竟一點沒有懷疑過,那些分割點是怎麼求出來的,要提醒像我一樣初寫程式的朋友,...

三分查詢求極值

我們都知道 二分查詢 適用於單調函式中逼近求解某點的值。如果遇到凸性或凹形函式時,可以用三分查詢求那個凸點或凹點。下面的方法應該是三分查詢的乙個變形。如圖所示,已知左右端點l r,要求找到白點的位置。思路 通過不斷縮小 l,r 的範圍,無限逼近白點。做法 先取 l,r 的中點 mid,再取 mid,...