最優比率生成樹 最優比例生成樹

2021-06-17 23:37:33 字數 868 閱讀 5680

2023年的acm地區賽賽場上, 樓爺高速過了乙個求最優比率生成樹的問題, 從而打亂了全場的陣腳, 順利奪冠...

有帶權圖g, 對於圖中每條邊e[i], 都有benifit[i](收入)和cost[i](花費), 我們要求的是一棵生成樹t, 它使得 ∑(benifit[i]) / ∑(cost[i]), i∈t 

最大(或最小).

這顯然是乙個具有現實意義的問題.

設x[i]等於1或0, 表示邊e[i]是否屬於生成樹.

則我們所求的比率 r = ∑(benifit[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i.

為了使 r 最大, 設計乙個子問題---> 讓 z = ∑(benifit[i] * x[i]) - l * ∑(cost[i] * x[i]) = ∑(d[i] * x[i]) 

最大 (d[i] = benifit[i] - l * cost[i]) , 並記為z(l). 我們可以興高采烈地把z(l)看做以d為邊權的最大生成樹的總權值.

然後明確兩個性質:

1.  z單調遞減

證明: 因為cost為正數, 所以z隨l的減小而增大.

2.  z( max(r) ) = 0

證明: 若z( max(r) ) < 0, ∑(benifit[i] * x[i]) - max(r) * ∑(cost[i] * x[i]) < 0, 可化為 max(r) < max(r). 矛盾;

若z( max(r) ) >= 0, 根據性質1, 當z = 0 時r最大. 

到了這個地步, 七竅全已打通, 喜歡二分的上二分, 喜歡dinkelbach的就dinkelbach.

時間 o( o(mst) * log max(r) )

空間 o( o(mst) )

最優比率生成樹 最優比例生成樹

有帶權圖g,對於圖中每條邊e i 都有benifit i 收入 和cost i 花費 我們要求的是一棵生成樹t,它使得 benifit i cost i i t最大 或最小 這顯然是乙個具有現實意義的問題.設x i 等於1或0,表示邊e i 是否屬於生成樹.則我們所求的比率r benifit i x...

最優比率生成樹

最優比率生成樹 已知乙個完全圖,每條邊有兩個引數 dis和c 求一棵生成樹,使 xi ci xi disi 最小,其中xi當第i條邊包含在生成樹中時為1,否則為0。迭代法 假設rate為當前比率,以ci rate disi作為各邊的權重,使用prim演算法構造最小生成樹,再對該最小生成樹求 xi c...

最優比率生成樹

最優比率生成樹 已知乙個完全圖,每條邊有兩個引數 dis和c 求一棵生成樹,使 xi ci xi disi 最小,其中xi當第i條邊包含在生成樹中時為1,否則為0。迭代法 假設rate為當前比率,以ci rate disi作為各邊的權重,使用prim演算法構造最小生成樹,再對該最小生成樹求 xi c...