二維最小乘積生成樹學習小記
阿新 • • 發佈:2018-01-31
轉化 div 求解 idt pla 學習 right log inf
Preface
對於形如給定一些邊,其邊權為xi和yi,構造一個生成樹,使得
我們稱這棵樹,為最小乘積生成樹。我們可以考慮,沿用最小生成樹的思想,把這種新穎的最小生成樹做對。
Content
算法簡介
其實就是利用樹形結合的思想,將點弄到平面直角坐標系上,使之明了,轉化問題,求出最優解。
算法應用
應對類似的裸題,直接裸奔
算法核心
我們將sigma(xi)看成橫坐標,sigma(yi)看成縱坐標,在坐標系中繪制出來。並在x,y軸作垂線,構成一個正方形
我們要求一種方案xy=k最小,也就是這個正方形最小,也就是反比例函數(等面積線)y=k/x最接近坐標軸(k最小,即y最小)
顯然可以知道,把所有點列出來,構建一個下凸殼,最優的點(x,y)必定在下凸殼上。
如下圖,如果一個點不在凸包上,那麽以這個點作矩陣,顯然面積比以被圈圈起來的點作矩陣優,這更顯然吧?
網上大都用分治求解
固定凸包上最接近x軸與y軸的兩個節點,即求離x軸,y軸最近的點(分別以x,y為關鍵字作最小生成樹即可,所得x,y必定最小)。
尋找一個點C,使得C離AB最遠,也就是△ABC面積最大,想要用C來更新答案。這個點C是目前最優的。
如何找點C?我們用向量來考慮。可能覺得比較奇妙,說不出個之所以然,但是過程嚴謹,是沒有錯的,多悟一下,睡前想一想,第二天就懂了。
向量AB=(B.x-A.x,B.y-A.y)
向量AC=(C.x-A.x,C.y-A.y)
根據向量定義,得出S△ABC=AB
二維最小乘積生成樹學習小記