三分法求解凸函式的最值

2021-06-01 08:10:33 字數 1095 閱讀 5438

轉了牛人的:

二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸性函式時,二分法就無法適用,這時三分法就可以「大顯身手」

~~ 如圖,類似二分的定義left和right,mid = (left + right) / 2,midmid = (mid + right) / 2; 如果mid靠近極值點,則right = midmid;否則(即midmid靠近極值點),則left = mid;

程式模版如下:

double calc(type a)

void solve(void)

}現根據幾道的oj題目來分析三分法的具體實現。

zoj 3203 light bulb

如圖,人左右走動,求影子l的最長長度。

根據圖,很容易發現當燈,人的頭部和牆角成一條直線時(假設此時人站在a點),此時的長度是影子全在地上的最長長度。當人再向右走時,影子開始投影到牆上,當人貼著牆,影子長度即為人的高度。所以當人從a點走到牆,函式是先遞增再遞減,為凸性函式,所以我們可以用三分法來求解。

下面只給出calc函式,其他直接套模版即可。

double calc(double x)

poj 3301 texas trip

題意為給定n(n <= 30)個點,求出飽含這些點的面積最小的正方形。

有兩種解法,一種為逼近法,就是每次m分角度,求出最符合的角度,再繼續m分,如此進行times次,即可求出較為精確的解。(m 大概取10, times取30即可)

第二種解法即為三分法,首先旋轉的角度只要在0到180度即可,超過180度跟前面的相同的。座標軸旋轉後,座標變換為:

x』 = x * cosa - y * sina;

y』 = y * cosa + x * sina;

至於這題的函式是否是凸性的,為什麼是凸性的,我也無法給出準確的證明,希望哪位路過的大牛指點一下~~

例題更新(2010.5.5)

hdu 3400 line belt

典型的三分法,先三分第一條線段,找到乙個點,然後根據這個點再三分第二條線段即可,想出三分的思路基本就可以過了。

對於求解一些實際問題,當公式難以推導出來時,二分、三分法可以較為精確地求解出一些臨界值,且效率也是令人滿意

三分法(洛谷3382 模板 三分法)

如題,給出乙個n次函式,保證在範圍 l,r 內存在一點x,使得 l,x 上單調增,x,r 上單調減。試求出x的值。輸入格式 第一行一次包含乙個正整數n和兩個實數l r,含義如題目描述所示。第二行包含n 1個實數,從高到低依次表示該n次函式各項的係數。輸出格式 輸出為一行,包含乙個實數,即為x的值。四...

三分法小結

二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸性函式時,二分法就無法適用,這時三分法就可以 大顯身手 如圖,類似二分的定義left和right,mid left right 2,midmid mid right 2 如果mid靠近極值點,則right midmid 否則...

三分法查詢

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