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

2022-08-21 13:21:08 字數 856 閱讀 5625

有帶權圖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) )

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

2005年的acm地區賽賽場上,樓爺高速過了乙個求最優比率生成樹的問題,從而打亂了全場的陣腳,順利奪冠.有帶權圖g,對於圖中每條邊e i 都有benifit i 收入 和cost i 花費 我們要求的是一棵生成樹t,它使得 benifit i cost i i t 最大 或最小 這顯然是乙個具有現實...

最優比率生成樹

最優比率生成樹 已知乙個完全圖,每條邊有兩個引數 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...