[問題] Maximum Independent Set(Greedy method)

看板Prob_Solve (計算數學 Problem Solving)作者 (可愛小孩子)時間8年前 (2016/10/16 18:02), 8年前編輯推噓0(0011)
留言11則, 2人參與, 最新討論串1/1
Maximum Independent Set Greedy Method 如下: Greedy(G): S = {} While G is not empty: Let v be a node with minimum degree in G // 選擁有最小 degree 的點 S = union(S, {v}) remove v and its neighbors from G // 將選到的點和它的鄰居刪掉 return S ------------------ 想問每次做完 remove 的動作之後 因為每個點的 degree 會有所變動 怎樣可以快速找到下一個擁有「最小 degree 的點」呢 最直覺的是每次重新 for loop scan 一次找最小 degree 的點 這樣整個算法在查找最小 degree 的點的複雜度是 O(V ^ 2) 有更好的算法嗎 謝謝 ^__^ ※ 編輯: cutekid (61.221.80.36), 10/16/2016 18:06:44

10/16 20:08, , 1F
如果有題址我會去衝的。
10/16 20:08, 1F

10/16 20:14, , 2F
priority queue
10/16 20:14, 2F

10/16 20:15, , 3F
欸 不對 這樣會跟邊數相關還是n^2
10/16 20:15, 3F

10/16 20:19, , 4F
如果E<<V^2的話就是拔點的時候把鄰居degree-1丟進去
10/16 20:19, 4F

10/16 20:19, , 5F
可以做到O(E log V) 我猜可能可以再壓到O(E)
10/16 20:19, 5F

10/16 20:20, , 6F
要比O(E)再低可能就不是很合理啦 畢竟圖大小就那樣了
10/16 20:20, 6F

10/16 20:33, , 7F
每個degree建個list(vector) 點丟到list裡
10/16 20:33, 7F

10/16 20:34, , 8F
刪點的時候把鄰居degree-1,丟到他該去的list裡
10/16 20:34, 8F

10/16 20:34, , 9F
維護當前最小degree值 刪點頂多-1 所以至多回退V
10/16 20:34, 9F

10/16 20:35, , 10F
每個點只會出現在(移除時degree~原degree)的lsit中
10/16 20:35, 10F

10/16 20:35, , 11F
總數O(E) 所以整體來說應該是O(E)
10/16 20:35, 11F
文章代碼(AID): #1O0r11ay (Prob_Solve)
文章代碼(AID): #1O0r11ay (Prob_Solve)