350 likes | 473 Views
รายวิชา ง40 206 โครงสร้างข้อมูลและขั้นตอนวิธี. โรงเรียนมหิดลวิทยานุสรณ์. Graph. กราฟเป็นโครงสร้างข้อมูลชนิดหนึ่งประกอบด้วย 2 ส่วน คือ เซตของสมาชิกที่เรียกว่าบัพ (node) เซตของเส้นเชื่อม (edge) นำมาใช้แก้ปัญหาในการทำงานหลายด้าน เช่น
E N D
รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี โรงเรียนมหิดลวิทยานุสรณ์
กราฟเป็นโครงสร้างข้อมูลชนิดหนึ่งประกอบด้วย 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 400 400 m 800 m 350 m 300 m 350 800 300 คณะวิทยาศาสตร์ 400 m ตึกอธิการฯ 400 800 m 700 m C D 700 สัตว์ทดลอง 800 E
อยุธยา เชียงใหม่ ปทุมธานี ลำปาง กรุงเทพฯ กรุงเทพฯ เพชรบุรี ชลบุรี ภูเก็ต สุราษฎร์ธานี ไม่ระบุทิศทาง ระบุทิศทาง
กราฟไม่ระบุทิศทาง B E G A 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) }
กราฟระบุทิศทาง B A D G E 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) = 2deg(g) = 1 deg(b) = 4 deg(e) = 3 deg(c) = 2deg(f) = 4 จงหา degree ของ node แต่ละ node ในกราฟ Y
a b c e d f กราฟ G กราฟระบุทิศทาง ระดับขั้นใน deg-(v) คือจำนวนของเส้นเชื่อมที่ชี้เข้าหา node v ระดับขั้นนอก deg+(v) คือจำนวนของเส้นเชื่อมที่ออกจาก node v ระดับขั้นของกราฟ (Degree) ในกราฟ 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
1 2 3 4 5 6 1 2 3 4 5 6 6 การแทนกราฟด้วย Adjacency Matrix 2 3 กราฟ H 4 5 1 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 เมทริกซ์ประชิด A =
กราฟG X Y W Z 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 = กำหนดให้ v1=X, v2=Y, v3=Z, v4=W
กราฟ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
วิถีความยาว 2 จาก Y ถึง W มี 2 วิถี ดังนี้ Y-X-W Y-Z-W กราฟ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
วิถีความยาว 3 จาก Z ถึง Z มี 1 วิถี ดังนี้ Z-X-W-Z กราฟ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
Depth-First Traversal การท่องเข้าไปในกราฟTraverse Graph A เป็นการท่องเข้าไปในกราฟ โดยจะโปรเซสในทุกๆโหนดในแนวดิ่งตามการสืบทองของโหนดนั้นก่อน แล้วจึงค่อยเคลื่อนไปยังโหนดประชิดที่อยู่ข้างเคียงต่อไป C B D E F G H I Depth-first traversal : A – B – E – F – C – D – G – H - I
A 1 Depth-First Traversal การท่องเข้าไปในกราฟTraverse Graph 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 1 2 3 4 5 6 7 8 9 Stack contents
Depth-First Traversal การท่องเข้าไปในกราฟTraverse Graph • Push โหนดแรกลงใน stack • เมื่ออยู่ในลูป จะดำเนินการ Pop stack เพื่อโปสเซสโหนดนั้น จากนั้น push โหนดประชิดทุกตัวลงใน stack • ทำตามข้อ 2 จนกระทั่ง stack ว่าง
Breadth-First Traversal การท่องเข้าไปในกราฟTraverse Graph A เป็นการท่องเข้าไปในกราฟแบบแนวกว้าง โดยจะทำการโปรเซสโหนดประชิดทุกตัวก่อนที่จะลงสู่ระดับถัดไป C B D E F G H I Breadth-first traversal : A – B – C – D – E – F – G – H - I
A 1 Breadth-First Traversal การท่องเข้าไปในกราฟTraverse Graph 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 1 2 3 4 5 6 7 8 9 Queue contents
Breadth-First Traversal การท่องเข้าไปในกราฟTraverse Graph • 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
v1 v2 v3 v4 v5 v6 v7 Unweighted Shortest Path: Assume that the starting vertex is v3 Initial configuration
v1 v2 v3 v4 v5 v6 v7 Unweighted Shortest Path:
v1 v2 v3 v4 v5 v6 v7 Unweighted Shortest Path:
v1 v2 v3 v4 v5 v6 v7 Unweighted Shortest Path: v1 v2 v3 v4 v5 v6 v7
2 Weighted Shortest Path:Dijkstra’s Algorithm 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
2 v1 v2 10 3 4 1 2 2 v3 v4 v5 8 4 5 6 1 v6 v7 Weighted Shortest Path:Dijkstra’s Algorithm Initial configuration After v1 is declared known After v4 is declared known
2 v1 v2 10 3 4 1 2 2 v3 v4 v5 8 4 5 6 1 v6 v7 Weighted Shortest Path:Dijkstra’s Algorithm After v5&v3 are declared known After v2 is declared known After v7 is declared known