หน่วยที่ 6 กราฟ (Graphs) อ.กาญจนา ทองบุญนาค
นิยามกราฟ กราฟ เป็นโครงสร้างที่นำมาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดยแทนวัตถุด้วยเวอร์เท็กซ์ และเชื่อมโยงความสัมพันธ์ด้วยเอดจ์ G = (V,E) ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ที่ไม่ใช่เซ็ตว่าง และมี จำนวนจำกัด E(G) คือ เซตของเอดจ์ ซึ่งเขียนด้วยคู่ของเวอร์เท็กซ์ A B เวอร์เท็กซ์ เอดจ์
ตัวอย่าง V(G) = {A, B, C, D, E} เส้นที่เชื่อมโยงจาก A ไป C เส้นที่เชื่อมโยงจาก A ไป D เส้นที่เชื่อมโยงจาก A ไป E เส้นที่เชื่อมโยงจาก B ไป E A C D E B V(G) = {A, B, C, D, E} E(G) = {(A,B), (A,C), (A,D), (A,E), (B,E)}
Digraph กราฟแบบมีทิศทาง = กราฟที่มีเอดจ์เป็นหัวลูกศร ซึ่งแสดงทิศทางจากเวอร์เท็กซ์หนึ่ง ไปยังอีกเวอร์เท็กซ์หนึ่ง (Directed Graph) A B กรุงเทพ เวียงจันทร์ จากภาพ มีเส้นทางจากกรุงเทพไปเวียงจันทร์ แต่ไม่มีเส้นทางจากเวียงจันทร์ไปกรุงเทพ
กราฟสมบูรณ์ กราฟที่ทุกเวอร์เท็กซ์มีเอดจ์เชื่อมโยงไปยังเวอร์เท็กซ์ที่เหลือทั้งหมด A C B ในกราฟสมบูรณ์สามารถคำนวณจำนวนเอดจ์ได้จาก N*(N-1)/2
กราฟที่มีน้ำหนัก (Weighted Graphs) กราฟที่แต่ละเอดจ์จะมีค่าบ่งบอกถึงความหมายอย่างใดอย่างหนึ่ง เช่น ระยะทาง ความเร็ว เวลาเดินทาง ค่าโดยสาร เป็นต้น ปทุมธานี สระบุรี กรุงเทพ ฉะเชิงเทรา นครนายก ปราจีนบุรี 101 46 107 82 76 100 29 58
การแทนกราฟด้วยอะเรย์สองมิติ A B C D A B C D 1 A B C D
Depth-First Search เยี่ยมโหนดไปตามแนวลึกให้ครบทั้งหมดก่อน A 5 1 3 B C 2 4 E F A B E C F D
Breadth-First Search เยี่ยมโหนดไปตามแนวกว้างให้ครบทั้งหมดก่อน A 3 1 2 5 4 E F A B C D E F
Spanning tree G เป็นกราฟต้นไม้เมื่อ จุดยอดแต่ละคู่มีวิถีเชื่อมเพียงวิถีเดียว ถ้าลบ edge ใด edge หนึ่งออก กราฟที่เหลือจะไม่เชื่อมโยง ไม่มีวัฏจักร (cycle) Spanning tree เป็นกราฟต้นไม้ (G) ที่มีจุดยอด (vertex) ทั้งหมดของ G
Spanning tree สมมติสถานการณ์ให้กราฟแสดงเส้นทางการบินระหว่าง 7 เมือง แต่ด้วยเหตุผลทางธุรกิจทำให้ต้องปิดเส้นทางการบินไปให้มากที่สุดแต่ยังคงสามารถเชื่อมต่อถึงกันได้หมด a b c d e f g a b c d e f g a b c d e f g
Minimum spanning tree Definition MST of a weighted graph is a spanning tree whose weight (the sum of the weights of its edges) is no larger than the weight of any other spanning tree 2 1 7 3 4 5 6 .29 .51 .60 .31 .32 .21 .25 .46 .40 .34 .18 2 1 7 3 4 5 6 .29 .51 .60 .31 .32 .21 .25 .46 .40 .34 .18
Minimum spanning tree Representation 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 * .32 .29 * * .60 .51 .31 1 2 3 4 5 6 7 2 1 7 3 4 5 6 .29 .51 .60 .31 .32 .21 .25 .46 .40 .34 .18 .32 * * * * * * .21 .29 * * * * * * * * * * * .34 .18 * * * * * .34 * .40 .51 .46 .60 * * .18 .40 * * * .51 * * * .51 * * .25 .31 .21 * * .46 * .25 *
Kruskal’s Algorithm เลือก edge ที่สั้นที่สุด เลือกได้ n-1 edges เกี่ยวกับ Connected Graph ถ้ามีจุด (vertices) n จุด จะต้องมีอย่างน้อย n-1 เส้น เพื่อให้เป็น spanning tree นั่นคือ n vertices ใช้ n-1 edges (V จุด E เส้น) เพราะฉะนั้น Emax = V(V-1) / 2
Kruskal’s Algorithm เรียงลำดับ weight จากน้อยไปมาก 3-5 = .18 1-7 = .21 6-7 = .25 0-2 = .29 0-7 = .31 0-1 = .32 4.3 = .34 4-5 = .40 4-7 = .46 0-6 = .51 4-6 = .51 0-5 = .60 2 .29 .51 .31 6 7 .32 .25 .21 .60 1 เกิดวงจร .51 .46 3 เกิดวงจร .34 .18 5 .40 4
Prim’s algorithm - เลือก 1 จุด - เลือก edge สั้นสุดที่ต่อกับที่ได้เลือกไว้ - รวม edge นี้ถ้าไม่เกิดวงจร A A B C D E F 1 7 14 13 3 6 8 14 1 8 13 7 B C D 6 3 7 E F 1
Dijkstra’s algorithm single-source shortest path A B C D E F A B C D E 1 7 14 13 3 6 A B C D E F 1 7 14 13 3 6 8 8