數學 三分 講解

2021-06-18 17:51:12 字數 1728 閱讀 6004

原文:

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

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

程式模版如下:

double calc(type a)

void solve(void)

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

buaa 1033 easy problem 

題意為在一條線段上找到一點,與給定的p點距離最小。很明顯的凸性函式,用三分法來解決。

calc函式即為求某點到p點的距離。

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

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

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

double calc(double x)

heru 5081 turn the corner 08年哈爾濱regional網路賽

汽車拐彎問題,給定x, y, l, d判斷是否能夠拐彎。首先當x或者y小於d,那麼一定不能。

其次我們發現隨著角度θ的增大,最大高度h先增長後減小,即為凸性函式,可以用三分法來求解。

這裡的calc函式需要比較繁瑣的推倒公式:

s = l * cos(θ) + w * sin(θ) - x;

h = s * tan(θ) + w * cos(θ);

其中s為汽車最右邊的點離拐角的水平距離, h為里拐點最高的距離, θ範圍從0到90。

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

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

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

三分 三分求極值 演算法講解和題目

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

萌新三分講解 基礎題ZOJ3203 三分凸性

舉凸性函式的例子 首先我們一定要明確問題 求極值,這裡是極大值。如圖,第一種情況下 mid一定在midmid的左邊,而且為什麼只能確定左端?因為midmid位於極值位置未知,但是mid一定是左邊!所以left mid.第二種情況下 midmid一定在mid的右邊,且一定在極值點的右邊,mid卻未知,...

hdu 3400 Line belt 三分套三分)

題意 在乙個二維空間中給出兩條線段ab,cd,線段ab,cd上的運動速度分別為p,q。在這兩條線段之外的空間上運動的速度為r。求從a到d的最短時間。思路 ps 在這種求解方法中,中間運用了比較多的除法,導致精度損失,所以再開方前加乙個eps,防止開方後的值比真實值小。include include ...