รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี โรงเรียนมหิดลวิทยานุสรณ์
Graph
กราฟเป็นโครงสร้างข้อมูลชนิดหนึ่งประกอบด้วย 2 ส่วน คือ เซตของสมาชิกที่เรียกว่าบัพ (node) เซตของเส้นเชื่อม (edge) นำมาใช้แก้ปัญหาในการทำงานหลายด้าน เช่น จำลองเครือข่ายคอมพิวเตอร์เพื่อหาค่าใช้จ่ายที่น้อยที่สุดในการเดินสายสัญญาณ จำลองเส้นทางการเดินทางเพื่อหาระยะทางที่สั้นที่สุด การวางสายโทรศัพท์
วิทยาลัยดุริยางค์ฯ ตึกอินเตอร์ฯ 400 m ถ้าต้องการติดตั้งสายสัญญาณ Fiber optic เพื่อเชื่อมเครือข่ายคอมพิวเตอร์ทั้ง 5 อาคารเข้าด้วยกัน จะต้องเชื่อมต่ออย่างไรจึงจะใช้งบประมาณน้อยที่สุด และใช้งบประมาณเท่าไร (กำหนดให้สาย Fiber optic ราคาเมตรละ 100 บ.) 800 m 350 m 300 m คณะวิทยาศาสตร์ 400 m ตึกอธิการฯ 700 m 800 m สัตว์ทดลอง
A B D C E วิทยาลัยดุริยางค์ฯ ตึกอินเตอร์ฯ 400 400 m 800 m 350 m 300 m คณะวิทยาศาสตร์ 400 m ตึกอธิการฯ 700 m 800 m 400 D C 700 สัตว์ทดลอง 800 E
ไม่ระบุทิศทาง ระบุทิศทาง เชียงใหม่ อยุธยา ลำปาง ปทุมธานี กรุงเทพฯ สุราษฎร์ธานี ภูเก็ต กรุงเทพฯ ชลบุรี เพชรบุรี ปทุมธานี อยุธยา ไม่ระบุทิศทาง ระบุทิศทาง
กราฟไม่ระบุทิศทาง กราฟ G กำหนดให้ กราฟ G เป็นกราฟไม่ระบุทิศทาง B A E G D C F กราฟ G กำหนดให้ กราฟ G เป็นกราฟไม่ระบุทิศทาง ประกอบด้วย เซตของ node {A, B, C, D, E, F, G} และ เซตของ edge { (A,B), (A,D), (A,C), (C,D), (C,F), (E,G), (A,A) }
กราฟระบุทิศทาง กราฟ H กำหนดให้ กราฟ H เป็นกราฟระบุทิศทาง B A D E G C กราฟ H F กำหนดให้ กราฟ H เป็นกราฟระบุทิศทาง ประกอบด้วย เซตของ node {A, B, C, D, E, F, G} และ เซตของ edge {(A,A), (A,B), (A,C), (A,D), (C,D), (F,C), (E,G)}
ระดับขั้นของกราฟ (Degree) กราฟไม่ระบุทิศทาง b c d a f e g กราฟ G ในกราฟ G : deg(a) = 2, deg(b) = deg(c) = deg(f) = 4, deg(d) = 1, deg(e) = 3 และ deg(g) = 0
ระดับขั้นของกราฟ (Degree) กราฟไม่ระบุทิศทาง b c d a f e g กราฟ X ในกราฟ X : deg(a) = 2, deg(b) = deg(c) = 4, deg(d) = deg(f) = deg(e) = 3 และ deg(g) = 1
ระดับขั้นของกราฟ (Degree) กราฟไม่ระบุทิศทาง b c d a f e g กราฟ Y ในกราฟ Y : deg(a) = 4 deg(d) = 2 deg(g) = 1 deg(b) = 4 deg(e) = 3 deg(c) = 2 deg(f) = 4 จงหา degree ของ node แต่ละ node ในกราฟ Y
ระดับขั้นของกราฟ (Degree) กราฟระบุทิศทาง ระดับขั้นใน deg-(v) คือจำนวนของเส้นเชื่อมที่ชี้เข้าหา node v ระดับขั้นนอก deg+(v) คือจำนวนของเส้นเชื่อมที่ออกจาก node v กราฟ G a b c e d f ในกราฟ G : deg-(a) = 2 deg-(b) = 2 deg-(c) = 3 deg-(d) = 2 deg-(e) = 2 deg-(f) = 0 deg+(a) = 3 deg+(b) = 1 deg+(c) = 2 deg+(d) = 2 deg+(e) = 3 deg+(f) = 0 ดังนั้น : deg(a) = 5 deg(b) = 3 deg(c) = 5 deg(d) = 4 deg(e) = 5 deg(f) = 0
ระดับขั้นของกราฟ (Degree) กราฟระบุทิศทาง deg-(v) คือจำนวนของเส้นเชื่อมที่ชี้เข้าหา node v deg+(v) คือจำนวนของเส้นเชื่อมที่ออกจาก node v a b c e d f กราฟ G จงหาระดับขั้น (degree) ของ node แต่ละ node ในกราฟ G (หาระดับขั้นในและนอกด้วย) ในกราฟ G : deg-(a) = 3 deg-(b) = 3 deg-(c) = 1 deg-(d) = 1 deg-(e) = 0 deg-(f) = 2 deg+(a) = 2 deg+(b) = 1 deg+(c) = 1 deg+(d) = 1 deg+(e) = 3 deg+(f) = 2 ดังนั้น : deg(a) = 5 deg(b) = 4 deg(c) = 2 deg(d) = 2 deg(e) = 3 deg(f) = 4
การแทนกราฟด้วย Adjacency Matrix 6 2 3 กราฟ H 4 5 1 1 2 3 4 5 6 1 2 3 4 5 6 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 0 เมทริกซ์ประชิด A =
X Y W Z กราฟG เมทริกซ์ประชิด A = X Y Z W X Y 0 0 0 1 Z 1 0 1 1 W 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 เมทริกซ์ประชิด A = กำหนดให้ v1=X, v2=Y, v3=Z, v4=W
X Y W Z กราฟG A2 = A3 = เมทริกซ์ประชิด A = A4 = 0 0 1 0 1 0 1 2 0 0 1 0 1 0 1 2 0 0 1 1 1 0 0 1 X Y A2 = W Z 1 0 0 1 1 0 2 2 1 0 1 1 0 0 1 1 A3 = X Y Z W X Y Z W 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 เมทริกซ์ประชิด A = 0 0 1 1 2 0 2 3 1 0 1 2 1 0 1 1 A4 = กำหนดให้ v1=X, v2=Y, v3=Z, v4=W
X Y W Z กราฟG วิถีความยาว 2 จาก Y ถึง W มี 2 วิถี ดังนี้ A2 = Y-X-W Y-Z-W Y-X-W วิถีความยาว 2 จาก Y ถึง W มี 2 วิถี ดังนี้ กราฟG 0 0 1 0 1 0 1 2 0 0 1 1 1 0 0 1 X Y A2 = W Z 1 0 0 1 1 0 2 2 1 0 1 1 0 0 1 1 A3 = X Y Z W X Y Z W 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 เมทริกซ์ประชิด A = 0 0 1 1 2 0 2 3 1 0 1 2 1 0 1 1 A4 = กำหนดให้ v1=X, v2=Y, v3=Z, v4=W
X Y W Z กราฟG วิถีความยาว 3 จาก Z ถึง Z มี 1 วิถี ดังนี้ A2 = Z-X-W-Z มี 1 วิถี ดังนี้ 0 0 1 0 1 0 1 2 0 0 1 1 1 0 0 1 X Y A2 = W Z 1 0 0 1 1 0 2 2 1 0 1 1 0 0 1 1 A3 = X Y Z W X Y Z W 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 เมทริกซ์ประชิด A = 0 0 1 1 2 0 2 3 1 0 1 2 1 0 1 1 A4 = กำหนดให้ v1=X, v2=Y, v3=Z, v4=W
การแทนกราฟด้วย Adjacency List
การแทนกราฟด้วย Adjacency List
การท่องเข้าไปในกราฟ Traverse Graph Depth-First Traversal A เป็นการท่องเข้าไปในกราฟ โดยจะโปรเซสในทุกๆโหนดในแนวดิ่งตามการสืบทองของโหนดนั้นก่อน แล้วจึงค่อยเคลื่อนไปยังโหนดประชิดที่อยู่ข้างเคียงต่อไป C B D E F G H I Depth-first traversal : A – B – E – F – C – D – G – H - I
การท่องเข้าไปในกราฟ Traverse Graph 1 Depth-First Traversal 6 3 2 Depth-first traversal : A – X – H – P – E – Y – M – J - G X H Y 5 E 8 9 M J G P 7 4 A X H G P E G E G Y M G M G J G G 1 2 3 4 5 6 7 8 9 Stack contents
การท่องเข้าไปในกราฟ Traverse Graph Depth-First Traversal Push โหนดแรกลงใน stack เมื่ออยู่ในลูป จะดำเนินการ Pop stack เพื่อโปสเซสโหนดนั้น จากนั้น push โหนดประชิดทุกตัวลงใน stack ทำตามข้อ 2 จนกระทั่ง stack ว่าง
การท่องเข้าไปในกราฟ Traverse Graph Breadth-First Traversal A เป็นการท่องเข้าไปในกราฟแบบแนวกว้าง โดยจะทำการโปรเซสโหนดประชิดทุกตัวก่อนที่จะลงสู่ระดับถัดไป C B D E F G H I Breadth-first traversal : A – B – C – D – E – F – G – H - I
การท่องเข้าไปในกราฟ Traverse Graph 1 Breadth-First Traversal 4 8 2 Breadth-first traversal : A – X – G – H – P – E – M – Y - J X H Y 6 E 9 5 3 M J G P 7 A X H G P H E P E Y M J Y J 1 2 3 4 5 6 7 8 9 Queue contents
การท่องเข้าไปในกราฟ Traverse Graph Breadth-First Traversal Enqueue โหนดแรก ลงในคิว เมื่ออยู่ในลูป จะทำการ Dequeue คิวนั้นออกไปและทำการโปสเซสส่วนหน้าของคิว หลังจากที่ได้โปรเซสโหนดนั้นแล้ว ก็จะดำเนินการนำโหนดประชิดตัวถัดไปมาไว้ในคิว ทำซ้ำจนกระทั่งคิวว่าง
Shortest Path Algorithms 2 v1 v2 10 4 1 3 2 2 v3 v4 v5 8 4 5 6 1 v6 v7 The shortest weighted path from v1 to v6 has a cost of 6 and goes from v1 to v4 to v7 to v6. The shortest unweighted path between these vertices is 2.
Unweighted Shortest Path: Dijkstra’s Algorithm v1 v2 We are only interested in the number of edges contained on the path, so there are no weight on the edges. The strategy for searching a graph is known as breadth-first search. The vertices closest to the start are evaluated first, and the most distant vertices are evaluated last. v3 v4 v5 v6 v7
Unweighted Shortest Path: Assume that the starting vertex is v3 v2 v3 v5 v4 v6 v1 v7 v known dv pv V1 V2 V3 V4 V5 V6 v7 Initial configuration
Unweighted Shortest Path: v2 v3 v5 v4 v6 v1 v7 Unweighted Shortest Path: v Initial state known dv pv V1 V2 V3 V4 V5 V6 V7 Q: V3 dequeued known dv pv 1 V3 V1, V6 V1 dequeued known dv pv 1 V3 2 V1 V6, V2, V4 V6 dequeued known dv pv 1 V3 2 V1 V2, V4
Unweighted Shortest Path: v2 v3 v5 v4 v6 v1 v7 Unweighted Shortest Path: v V2 dequeued known dv pv V1 1 V3 V2 2 V4 V5 3 V6 V7 Q: V4, V5 V4 dequeued known dv pv 1 V3 2 V1 3 V2 V4 V5, V7 V5 dequeued known dv pv 1 V3 2 V1 3 V2 V4 V7 V7 dequeued known dv pv 1 V3 2 V1 3 V2 V4 empty
Unweighted Shortest Path: v2 v3 v5 v4 v6 v1 v7 v1 v2 v3 v4 v5 v6 v7
Weighted Shortest Path: Dijkstra’s Algorithm 2 v1 v2 This thirty-year-old solution is an example of a greedy algorithm. Greedy algorithms generally solve a problem in stages by doing what appears to be the best thing at each stage. 10 4 1 3 2 2 v3 v4 v5 8 4 5 6 1 v6 v7
Weighted Shortest Path: Dijkstra’s Algorithm v2 v3 v5 v4 v6 v1 v7 2 1 3 10 4 6 8 5 Weighted Shortest Path: Dijkstra’s Algorithm v known dv pv V1 V2 V3 V4 V5 V6 v7 v known dv pv V1 1 V2 2 V3 V4 V5 V6 v7 v known dv pv V1 1 V2 2 V3 3 V4 V5 V6 9 v7 5 Initial configuration After v1 is declared known After v4 is declared known
Weighted Shortest Path: Dijkstra’s Algorithm v2 v3 v5 v4 v6 v1 v7 2 1 3 10 4 6 8 5 Weighted Shortest Path: Dijkstra’s Algorithm After v5&v3 are declared known v known dv pv V1 1 V2 2 V3 3 V4 V5 V6 9 v7 5 v known dv pv V1 1 V2 2 V3 3 V4 V5 V6 8 v7 5 v known dv pv V1 1 V2 2 V3 3 V4 V5 V6 6 V7 v7 5 After v2 is declared known After v7 is declared known