วิชา COSC2202 โครงสร้างข้อมูล (Data Structure) โครงสร้างข้อมูลแบบ กราฟ (Graph)
โครงสร้างข้อมูลแบบกราฟ (Graph)
โครงสร้างข้อมูลแบบกราฟ (Graph) ศัพท์ที่เกี่ยวข้อง 1. เวอร์เทก (Vertex) หมายถึง โหนด 2. เอดจ (Edge) หมายถึง เส้นเชื่อมของโหนด 3. ดีกรี (Degree) หมายถึง จำนวนเส้นเข้าและออก ของโหนดแต่ละโหนด 4. แอดจาเซนท์โหนด (Adjacent Node) หมายถึง โหนดที่มีการเชื่อมโยงกัน Graph แบ่งเป็น 1. Directed Graph (Digraph) (Arc) 2. Undirected Graph
โครงสร้างข้อมูลแบบกราฟ (Graph)
โครงสร้างข้อมูลแบบกราฟ (Graph) แอดจาเซนท์โหนด (Adjacent Node) A กับ B D กับ F ใช่ ไม่ใช่
โครงสร้างข้อมูลแบบกราฟ (Graph) เส้นทาง (Path) ใช้เรียกลำดับของ เวอร์เทก (Vertex) ที่เชื่อมต่อกันจากจุดหนึ่งไปยังอีกจุดหนึ่ง (A,B,C,D,E) (A,B,E,F)
โครงสร้างข้อมูลแบบกราฟ (Graph) Cycle Path ที่ประกอบด้วยอย่างน้อย 3 Vertex และมีจุดเริ่มต้นและสิ้นสุดเดียวกัน เช่น (B,C,E,B) (B,C,D,E,B)
โครงสร้างข้อมูลแบบกราฟ (Graph) ลูป (Loop) มีเพียง Arc เดียวและมีจุดเริ่มต้นและสิ้นสุดเดียวกัน
โครงสร้างข้อมูลแบบกราฟ (Graph) Directed Graph : มีการกำหนดทิศทาง Strongly Connected ทุก ๆ 2 Vertex มี Path ทั้งไปและกลับ (ทุกโหนดในกราฟมีพาทติดต่อถึงกันหมด)
โครงสร้างข้อมูลแบบกราฟ (Graph) Weakly Connected : มีอย่างน้อย 2 Vertex ที่มี Path ในทิศทางเดียว (บาง โหนดไม่สามารติดต่อไปยังทุกโหนดในกราฟนั้นได้) A ไป G ได้ในทิศทางเดียว
Graph Storage Structure การเก็บข้อมูลในหน่วยความจำสามารถทำได้ 2 แบบ ดังนี้ 1. Adjacency Matrix : ใช้อาร์เรย์เก็บข้อมูล 2. Adjacency List : ใช้ลิงค์ลิสต์เก็บข้อมูล
Adjacency Matrix เป็นโครงสร้างที่ประกอบไปด้วยโหนดและเส้นเชื่อมต่อที่บอกถึงเส้นทางของ การเดินทาง หรือความสัมพันธ์ในทิศทางซึ่งสามารถนำมาแทนความสัมพันธ์ นั้นด้วยการกำหนดเมตริกซ์ n x n Mk เป็นเมทริกซ์ของกราฟใด ๆ k คือทางเดินที่มีความยาว k จากโหนดหนึ่งไป อีกโหนดหนึ่ง
Adjacency Matrix 0 : ไม่เป็นแอดจาเซนซีกัน 1 : เป็นแอดจาเซนซีกัน
Transitive Closure ในกรณีที่เราอยากทราบว่าในกราฟจากโหนดหนึ่งไปยังโหนดหนึ่งมีจำนวน เส้นทางมากเท่าไร เราสามารถหาค่าได้จากการคูณเมทริกซ์
ตัวอย่าง
Adjacency List
Graph Traversal สามารถทำได้ 2 วิธี 1. แนวลึก : Depth-first Traversal 2. แนวราบ : Breath-first Traversal
Depth-first Traversal เป็นลักษณะการท่องเข้าไปยังโหนดเริ่มต้น แล้วให้โหนดใกล้เคียงเป็นโหนดเริ่มต้น เข้า เยี่ยมโหนด ทำต่อไปจนกระทั่งไม่มีโหนดใกล้เคียงจึงย้อนกลับมายังโหนดก่อนหน้า และเข้าเยี่ยมโหนดอีกด้านด้วยรูปแบบเดียวกันจนครบ เทียบได้กับการท่องเข้าไปในทรี แบบพรีออเดอร์ 1. Push vertex 2. Pop vertex และประมวลผล 3. Push adjacent ทั้งหมดของ Vertex ในข้อ 2 4. ทำซ้ำข้อ 2-3 จนกว่าจะครบทุก Vertex และ Stack ว่าง
Breath-first Traversal เป็นการท่องเข้าไปในกราฟโดยเข้าเยี่ยมโหนดตัวแรก และดำเนินการ หาก มีโหนดใกล้เคียงจะดำเนินการกับโหนดที่อยู่ด้านซ้ายก่อน 1. Enqueue vertex 2. Dequeue vertex และประมวลผล 3. Enqueue adjacent ทั้งหมดของ Vertex ในข้อ 2 4. ทำซ้ำข้อ 2-3 จนกว่าจะครบทุก Vertex และ Queue ว่าง
Network หมายถึง Graph ที่ทุก Edge มี Weight กำกับ โดยความหมายของ Weight นั้นขึ้นอยู่กับการใช้งาน
Adjacency Matrix
Adjacency List
Network Application Minimum Spanning Tree เป็นรูปแบบของการค้นหาโดยกำหนดเรียกใช้โหนด ทุกโหนดและทุกเส้นการเชื่อมต่อ มาลำดับความสำคัญของน้ำหนักโดยเริ่มจาก ค่าน้อยที่สุดในข่ายงาน ทำการเชื่อมต่อคู่โหนดนั้น และดำเนินการต่อไปในค่า น้ำหนักที่ต่อกัน แต่ถ้าโหนดใดมีการเชื่อมต่อคู่โหนดแล้วจะไม่เชื่อมต่ออีก Shortest Path เป็นอัลกอริทึมที่ใช้ในการหาระยะทางที่สั้นที่สุดเช่นเดียวกับ MST แต่จะเปลี่ยนจากการหาเส้นทางจากโหนดแรกไปยังโหนดปลายทางของ ข่ายงาน เป็นโหนดที่กำหนดเป็นโหนดต้นทางไปยังโหนดต่าง ๆ โดยหา ระยะทางสั้นที่สุดแต่ละเส้นทาง
Minimum Spanning Tree Spanning Tree หมายถึง Tree ที่ประกอบด้วยทุก Vertex ใน Graph ซึ่ง อาจมีได้มากกว่า 1 แบบ
Minimum Spanning Tree Spanning Tree แบบที่ 1 แบบที่ 2
Minimum Spanning Tree Minimum Spanning Tree (MST) หมายถึง Spanning Tree ที่มีผลรวมของ Weight ทั้งหมดน้อยที่สุด 1. ใส่ Vertex เริ่มต้นใน Tree 2. เลือก Edge จาก Vertex ใน Tree ไปยัง Vertex ที่ไม่อยู่ใน Tree และมี Weight ต่ำสุด 3. ทำซ้ำข้อ 2 จนกว่าจะครบทุก Vertex
ตัวอย่าง จงหา Minimum Spanning Tree
Total weight = 13
Shortest Path 1. ใส่ Vertex เริ่มต้นใน Tree Shortest Path หมายถึง Path ที่สั้นที่สุดระหว่าง 2 Vertex หาเส้นทางการส่งข้อมูลจากต้นทางไปปลายทาง โดยให้มีระยะทางสั้นที่สุด 1. ใส่ Vertex เริ่มต้นใน Tree 2. เลือก Edge จาก Vertex ใน Tree ไปยัง Vertex ที่ไม่อยู่ใน Tree และมีผลรวม ของ Weight ต่ำสุด 3. ทำซ้ำข้อ 2 จนกว่าจะครบทุก Vertex
Shortest Path จงหา Shortest Path จากโหนด A ไปยังโหนดอื่น ๆ