看板 Grad-ProbAsk 關於我們 聯絡資訊
關於這題下面回應 (3) 是 v^1.5 想問大家是怎麼算的 謝謝! ※ 引述《mkchiun1028 (YO)》之銘言: : 倒數第二題,問Prim's演算法worst case的複雜度 : 點數V, 邊數E=V^1.5 : (1) 沒有使用任何data structure : (2) 使用loser tree,leaf是cost最小的邊 : (3) 使用Fibonacci Heap : 大家這題寫什麼呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.45.30 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1455030337.A.A32.html
easonc: VlgV(extra-min)+E*O(1)(decrease-key)=O(V^1.5) 02/10 09:03
easonc: 想請問一下這題(1)的答案還有(2)得loser tree在這題裡是怎 02/10 09:09
easonc: 麼運作的? 02/10 09:09
yad50968: 1的答案好像很多種 我算是O(E + E + E ...+E) V-1次 02/10 12:18
yad50968: 所以是O(VE) = O(V^2.5) (2)需要有人補充 看不懂@@ thx 02/10 12:19
jerry031181: 2我認為 extractmin是跟一般heap一樣動作花logV 02/10 12:33
jerry031181: 而decrease key則是從該data對應leaf往上調整花logV 02/10 12:33
jerry031181: 所以可以當作heap這樣 整個time O(VlogV+VE)=(V^2.5) 02/10 12:34
jerry031181: 1的話我想到的有2種 O(V^2+E),O(V^3)兩種 02/10 12:37
yad50968: 那我1應該是想錯了。樓上能說說1的部分嗎 感謝! 02/10 13:16
jerry031181: 用一般array+adj list 迴圈+extract min 花V^2,Dkey 02/10 14:25
jerry031181: O(1) 所以是O(V^2+E) 另一種是用matrix 每個vertex的 02/10 14:27
jerry031181: for each v屬於adj(u)這邊要花O(V)*DkeyO (1)=O(V) 02/10 14:28
jerry031181: 所以total O(V^3) 02/10 14:28
jerry031181: 不過題目是寫用list 所以我寫第一種 但這樣比(2)還 02/10 14:30
jerry031181: XXXXXXXXXXX快... 02/10 14:30
easonc: 謝謝各位 1說不能用其他資料結構,是不是也不能用array啊? 02/10 17:06
easonc: 不用array的話我一開始的想法可能跟yad大類似,一開始隨便 02/10 17:08
easonc: 挑一個點V0,接著從V0的adjacency list中挑離V0最近的點, 02/10 17:09
easonc: V1,再來從V0,V1的list中,挑離目前的樹最近的點,V2,然 02/10 17:11
easonc: 後從V0,V1,V2的list中,再挑離目前樹最近的點,依此類推 02/10 17:12
easonc: 每次都花O(E),總共V次,所以是O(VE) 02/10 17:13
easonc: 不過我想說,每次選頂點時,應該要考慮這個點是不是已經在 02/10 17:16
easonc: 樹裡了,所以在掃描adjacency list裡的每一個人時,都要花 02/10 17:17
easonc: O(v)的時間,檢查是不是已經在樹裡了,所以總共要花 02/10 17:18
easonc: O(E*V^2)=O(V^3.5)的時間,不是很確定 02/10 17:20
DLHZ: 在選的時候就能決定在不在樹裡了 不影響 12/19 23:00