Summary Graph Algorithm

From Ta Wiki
Jump to navigation Jump to search

MST

=========================================
1. Kruskal  O(V log V)  

+ เรียง edge + วนทุกเส้นแล้วดูว่าทั้งสองจุดที่ปลาย edge อยู่เซ็ตเดียวกันรึยัง ถ้ายังก็ union set

2. Prim

-- ถ้าเก็บใส่ Adj Matrix O(V^2) -- ถ้าเก็บใส่ Adj List O(E log V) 1. หยิบซักจุด push (จุดนั้น, ระยะทาง=0) เข้า min-heap (เรียงตามระยะทาง) 2. pop จุด (ที่ไปถึงได้ในระยะใกล้สุด) ออกมาจาก heap 3. ดูว่าจุดที่จะไปนั้นเคยเชื่อมไปรึยัง ถ้าเชื่อมแล้วก็ไม่เอาไปทำข้อ 4 ต่อ แต่ถ้ายังก็เอาก็ mark ไว้ว่าจุดนี้เอาไปแล้ว 4. เอา edge รอบๆจุดนั้น push (จุดที่ปลายเส้น, ความยาว edge) ยัดใส่ min-heap (priority queue)




Shortest Path

=========================================
1. Dijkstra (เขียนเหมือน Prim แก้นิดเดียว คือ แทนที่จะ push เส้น ก็ไป push จุด,ระยะทาง  แทน)

** ใช้กับ Graph ที่มี negative cycle ไม่ได้ (ใช้ได้เฉพาะกับ Negative Acyclic Graph) -- ถ้าเก็บใส่ Adj Matrix O(V^2) -- ถ้าเก็บใส่ Adj List O(E log V) -- เขียนเหมือน prim เลย แต่แทนที่ ขั้นตอนที่ 4 จะ push (จุดที่ปลายเส้น, ความยาว edge) ก็เปลี่ยนเป็น push(จุดที่ปลายเส้น , ระยะทางที่เดินทางมาถึงจุดปัจจถุบัน +ความยาว edge ) แทน

2. Bellman-Ford 

** ใช้กับ Graph ที่มี negative cycle ได้ -- O(VE)

3. BFS

** ใช้กับ edge ที่ weight เท่ากันหมด ** ส่วนมากใช้กับพวกเดินในตารางที่นับก้าวเท่ากันหมด

All pair shortest path

=========================================
3. Floyd Warshall

-- O(V^3)