1. 程式人生 > >(hiho一下)三分·三分求極值

(hiho一下)三分·三分求極值

在之前的幾週中我們瞭解到二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。
但當函式是凸形函式時,二分法就無法適用,這時就需要用到三分法。
從三分法的名字中我們可以猜到,三分法是對於需要逼近的區間做三等分:

我們發現lm這個點比rm要低,那麼我們要找的最小點一定在[left,rm]之間。如果最低點在[rm,right]之間,就會出現在rm左右都有比他低的點,這顯然是不可能的。 同理,當rm比lm低時,最低點一定在[lm,right]的區間內。
利用這個性質,我們就可以在縮小區間的同時向目標點逼近,從而得到極值。

接下來我們回到題目上,拋物線和點之間的距離可以簡單的用直線公式計算:
即d = min{sqrt((X - x)^2+(aX^2+bX+c-y)^2)}
該公式展開後為4次,需要採用求導等方法來求極值。對於計算機程式設計來說是很麻煩的一件事。

進一步觀察題目,我們可以發現根據帶入的X值不同,d的長度恰好滿足凸形函式。
而我們要求的最短距離d,正好就是這個凸形函式的極值。
那麼三分法不就正好可以用來解決這道題目了麼?

需要注意在解題過程中一定要想清楚如何劃分區間,我們求的各個變數到底是什麼含義。
另外,這道題還有一個小小的trick,在解決的時候請一定要小心。