โครงสร้างข้อมูลแบบกราฟ (Graph) - มหาวิทยาลัยบูรพา วิทยาเขตจันทบุรี

Download Report

Transcript โครงสร้างข้อมูลแบบกราฟ (Graph) - มหาวิทยาลัยบูรพา วิทยาเขตจันทบุรี

290214 Data Structures and Algorithms
โครงสร้างข้อมูลแบบกราฟ (Graph)
อ.ธารารัตน์ พวงสุ วรรณ
คณะวิทยาศาสตร์และศิลปศาสตร์
มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
[email protected]
เนือ้ หา
นิยามกราฟ
การประยุกต์ ใช้ กราฟ
คาศัพท์ ที่เกีย่ วข้ องกับกราฟ
ชนิดของกราฟ
กราฟแบบมีนา้ หนักและกราฟไม่ มีนา้ หนัก
การแทนทีก่ ราฟในหน่ วยความจา
การท่ องไปในกราฟ
การหา minimum spaning tree
การหา shortest path
โครงสร้างข้อมูลแบบกราฟ (Graph)
• กราฟ (Graph) เป็ นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้นอีกชนิดหนึ่ง
กราฟเป็ นโครงสร้างข้อมูลทีม่ กี ารนาไปใช้ในงานทีเ่ กีย่ วข้องกับการ
แก้ปญั หาทีค่ อ่ นข้างซับซ้อน เช่น การวางข่ายงานคอมพิวเตอร์ การ
วิเคราะห์เส้นทางวิกฤติ และปญั หาเส้นทางทีส่ นั ้ ทีส่ ดุ เป็ นต้น
นิยามกราฟ
• กราฟ เป็ นโครงสร้างที่นามาใช้เพื่อแสดงความสัมพันธ์ระหว่างวัตถุ โดย
แทนวัตถุดว้ ยเวอร์เท็กซ์ (Vertex)หรื อโหนด (Node) และเชื่อมโยง
ความสัมพันธ์ดว้ ยเอดจ์ (Edge)
• เขียนในรู ปของสัญลักษณ์ได้เป็ น G = (V,E)
• ซึ่ง V(G) คือ เซตของเวอร์เทกซ์ที่ไม่ใช่เซ็ตว่าง และมีจานวนจากัด
• E(G) คือ เซตของเอดจ์ ซึ่งเขียนด้วยคู่ของเวอร์เท็กซ์
เอดจ์
A
เวอร์เท็กซ์
B
เวอร์เท็กซ์
องค์ ประกอบโครงสร้ างข้ อมูลแบบกราฟ
V = {1, 2, 3, 4}
E = {(1,2), (1,4), (2,3), (3,4)}
ตัวอย่ าง
A
C
D
B
E
เวอร์ เท็กซ์ V(G) ได้ แก่ A B C D E
เอดจ์ E(G) ได้ แก่
เส้ นทีเ่ ชื่อมโยงจาก A ไป B
เส้ นที่เชื่อมโยงจาก A ไป C
เส้ นที่เชื่อมโยงจาก A ไป D
เส้ นที่เชื่อมโยงจาก A ไป E
เส้ นที่เชื่อมโยงจาก B ไป E
V(G) = {A, B, C, D, E}
E(G) = {(A,B), (A,C), (A,D), (A,E), (B,E)}
โครงสร้างข้อมูลแบบกราฟ (Graph)
ศัพท์ที่เกี่ยวข้อง
1. เวอร์เทก (Vertex) หมายถึง โหนด
2. เอดจ (Edge) หมายถึง เส้นเชื่อมของโหนด
3. ดีกรี (Degree) หมายถึง จานวนเส้นเข้าและออก ของโหนดแต่ละ
โหนด
4. แอดจาเซนท์โหนด (Adjacent Node) หมายถึง โหนดที่มีการเชื่อมโยง
กัน
อินดีกรีและเอาท์ ดกี รี
•
•
•
•
แต่ละโหนดจะมีจานวนเส้นเชื่อมระหว่างโหนดไม่เท่ากัน
In-degree แสดงจานวนเส้นเชื่อมที่เข้ามายังโหนดนั้นๆ
Out-degree แสดงจานวนเส้นเชื่อมที่ออกจากโหนดนั้นไป
ใน Undirected Graph จานวน In-degree และ Out-degree จะเท่ากัน
A
A
B
Node
A
B
C
D
C
D
In-degree Out-Degreee
3
1
2
2
Undirected Graph
3
1
2
2
B
Node
A
B
C
D
C
D
In-degree Out-Degreee
3
0
0
2
Directed Graph
1
1
2
1
โครงสร้างข้อมูลแบบกราฟ (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)
มีเพียง Edge เดียวและมีจดุ เริ่มต้ นและสิ ้นสุดเดียวกัน
Graph VS. Tree
• กราฟเป็ น Super Set ของต้นไม้
• Tree ต้องมี Father Node เพียงโหนดเดียว, แต่ Graph ไม่จาเป็ น
• บางโหนดอาจไม่มีเส้นเชื่อมได้ เช่น บางเมืองไม่มีสายการบิน
A
A
B
C
E
G
(1) Binary tree
B
C
A
D
E F G
(2) Non binary tree
A
B
C
E
F
B
C
E
F
D
G
(3) Graph
โหนด C,D มี Father โหนดมากกว่ า 1
D
G
(4) Graph
โหนด E,G ไม่ มเี ส้ นเชื่อม
ประโยชน์ ของกราฟ (Routing การหาเส้นทาง)
สายการบิน (การเชื่อมต่อของสายการบิน ตารางบิน)
ประโยชน์ ของกราฟ (Routing การหาเส้นทาง)
• Network (การเชื่อมต่อของอุปกรณ์ Router)
• เพื่อใช้ในการรับส่ งข้อมูลในเครื อข่าย
ประโยชน์ ของกราฟ (Algorithm Design)
• Map Coloring คือวิธีการระบายสี ในแผนที่โดยใช้สีนอ้ ยที่สุด
• พื้นที่ติดกันห้ามใช้สีเดียวกัน
ชนิดของกราฟ
1) กราฟแบบไม่ มีทศิ ทาง (Undirected Graph)
2) กราฟแบบมีทศิ ทาง (Directed Graph) หรือ Digraph
Directed & Undirected Graph
• Undirected Graph คือกราฟที่เส้นเชื่อมไม่มีลกู ศรกากับทิศทาง
• หมายถึงความสัมพันธ์ของ 2 โหนดแบบไปและกลับ
A
B
C
E
H
Undirected Graph แสดงสายการบินของ Air Asia
F
D
G
Undirected Graph แสดงโหนด
และเส้ นเชื่อมของกราฟรูปหนึ่ง
Directed & Undirected Graph
• Directed Graph คือกราฟที่เส้นเชื่อมมีลกู ศรกากับทิศทาง
• เช่น อาจมีสายการบินจาก กรุ งเทพ-เสี ยมเลียบ กัมพูชา แต่ไม่มีสายการบินจาก
เสี ยมเลียบ-กรุ งเทพ
• หรื อ Edge แสดงค่าโดยสารที่มีราคา ไป-กลับไม่เท่ากัน
• หรื อ ค่าโทรศัพท์ไทยไปสิ งคโปร์ แพงกว่าสิ งคโปร์ โทรหาไทย
10
Thai
65
6
4
Indonesia
Cambodia
7
Singapore
Unweighted Graph (กราฟไม่ มนี า้ หนัก)
• กราฟแบบนี้เส้นเชื่อมแสดงถึงความสัมพันธ์ของ 2 โหนด (เหมือนกราฟทัว่ ไป)
• เส้นเชื่อมแสดงถึงความหมายบางอย่าง (เหมือนกับกราฟทัว่ ไป)
• แต่ไม่ระบุขอ้ มูลหรื อค่าบางอย่าง (แตกต่างจากสิ่ งอื่นๆ )
– เช่น ถนนที่เชื่อมเมือง 2 เมืองแต่ไม่ระบุระยะทาง
– ผังรถไฟฟ้ าใต้ดิน แต่ไม่ระบุราคาค่าโดยสารระหว่างสถานี
– หรื อมองว่าค่าข้อมูลเหล่านั้นมีค่าเท่ากันหมด
• อาจเป็ น Directed หรื อ Undirected Graph ก็ได้
A
B
C
E
F
A
D
G
Unweighted & Undirected Graph
B
C
E
F
D
G
Unweighted & directed Graph
Weighted Graph (กราฟมีนา้ หนัก)
• กราฟแบบนี้เส้นเชื่อมแสดงถึงความสัมพันธ์ของ 2 โหนด (เหมือนกราฟทัว่ ไป)
• เส้นเชื่อมแสดงถึงความหมายบางอย่าง (เหมือนกับกราฟทัว่ ไป)
• เส้นเชื่อมระบุขอ้ มูลหรื อค่าบางอย่างที่ตอ้ งการบ่งชี้
– เช่น ถนนที่เชื่อมเมือง 2 เมืองพร้อมระบุระยะทางระหว่างเมือง
– อาจเป็ น Directed หรื อ Undirected Graph ก็ได้
7
B
A
6
7
6
5
D
C
Weighted & Undirected Graph
B
A
6
6
5
D
C
Weighted & directed Graph
Complete Graph (กราฟสมบูรณ์ )
• กราฟที่ทุกโหนดมีเส้นเชื่อมถึงโหนดอื่นๆ ทั้งหมด
D
A
E
B
F
C
กราฟมีทศิ ทาง
จานวน Edge = N*(N-1)
เช่ น 3*(3-1) =6
G
H
กราฟไม่ มีทิศทาง
จานวน Edge = N*(N-1)
2
เช่ น 5*(5-1) / 2 = 10
Graph Storage Structure
การแทนที่กราฟในหน่วยความจาสามารถทาได้ 2 แบบ ดังนี้
1. Adjacency Matrix : ใช้ อาร์ เรย์ เก็บข้ อมูล
2. Adjacency List : ใช้ ลงิ ค์ ลสิ ต์ เก็บข้ อมูล
Adjacency Matrix
 ใช้อาร์ เรย์หนึ่ งมิติเพื่อเก็บVertex และใช้เมตริ กซ์ (อาร์ เรย์สองมิติ)
เพื่อเก็บ Edge
• เป็ นโครงสร้างที่ประกอบไปด้วยโหนดและเส้นเชื่อมต่อที่บอกถึง
เส้นทางของการเดินทาง หรื อความสัมพันธ์ในทิศทางซึ่งสามารถนามา
แทนความสัมพันธ์น้ นั ด้วยการกาหนดเมตริ กซ์ n x n
• Mk เป็ นเมทริ กซ์ของกราฟใด ๆ k คือทางเดินที่มีความยาว k จากโหนด
หนึ่งไปอีกโหนดหนึ่ง
Adjacency Matrix
0 : ไม่เป็ นแอดจาเซนซีกนั
1 : เป็ นแอดจาเซนซีกนั
การแทนด้วย Adjacency List
การท่ องไปในกราฟ (Graph Traversal)
• หลักในการทางานท่องไปในกราฟ คือ แต่ละโหนดจะถูกเยือนเพียงครั้ง
เดียว ดังนั้นจึงต้องมีค่าที่บอกว่าโหนดใดได้ถูกเยือนไปแล้ว
• เทคนิคการท่องไปในกราฟ มี 2 แบบ คือ
– Depth-First Traversal
– Breadth-First Traversal
Depth-First Traversal
• การท่ องแบบลึก (Depth-First Traversal) การทางานคล้ายกับการท่อง
ทรี โดยกาหนดเริ่ มต้นที่โหนดแรก และเยือนโหนดถัดไปตามแนววิถีน้ นั
จนกระทัง่ นาไปสู่ปลายวิถีน้ นั จากนั้นย้อนกลับ (Backtrack) ตามแนว
วิถีเดิมนั้น จนกระทัง่ สามารถดาเนินการต่อเนื่องเข้าสู่แนววิถีอื่นๆ เพื่อ
เยือนโหนดอื่นๆ ต่อไปจนครบทุกโหนด
การท่ องไปแนวลึก = A B C D E F G H
Depth-First Traversal
• ขั้นตอนการทางานของ Depth-First Traversal
1. ทาให้ทุกโหนดบนกราฟมีสถานะเป็ น 1
2. Push โหนดเริ่ มต้นลงใน Stack แล้วเปลี่ยนสถานะเป็ น 2
3. Pop โหนดใน Stack ออกมาทาการเยีย่ มแล้วเปลี่ยนสถานะเป็ น 3
4. Push โหนดข้างเคียงของโหนดในหัวข้อ 3 ที่มีสถานะเป็ น 1 ลง Stack
แล้วเปลี่ยนสถานะเป็ น 2
5. กลับไปทาข้อ 3 จนกระทัง่ ไม่มีโหนดใน Stack
Breadth-First Traversal
• การท่ องแบบกว้ าง (Breadth-First Traversal) วิธีน้ ีทาโดยเลือกโหนดที่เป็ น
จุดเริ่ มต้น ต่อมาให้เยือนโหนดอื่นที่อยูใ่ กล้กนั กับโหนดเริ่ มต้นทีละระดับ
จนกระทัง่ เยือนหมดทุกโหนดในกราฟ
การท่ องไปในกราฟแนวกว้ าง
การท่ องไปแนวกว้ าง = A
G
B H
E
C F
D
Breadth-First Traversal
• ขั้นตอนการทางานของ Breadth-First Traversal
1. ทาให้ทุกโหนดบนกราฟมีสถานะเป็ น 1
2. ให้เอาโหนดเริ่ มต้นมาใส่ ใน Queue แล้วเปลี่ยนสถานะเป็ น 2
3. ให้นาโหนดแรกสุ ดของ Queue ออกมาเยือนแล้วเปลี่ยนสภานะ
เป็ น 3
4. สารวจตัวข้างเคียงตัวของโหนดที่นาออกมาตามข้อ 3
ถ้าโหนดใดมีสถานะเป็ น 1 ให้นาใส่ Queue
ถ้าสถานะเป็ นอย่างอื่นก็ไม่ตอ้ งทาอะไรกับโหนดเหล่านั้น
5. กลับไปทาข้อ 3 จนกระทัง่ ไม่มีโหนดอยูใ่ น Queue
spanning tree
•
Spanning Tree คือต้นไม้ที่ประกอบด้วยโหนดทุกโหนด
ของกราฟ โดยแต่ละคู่ของโหนดจะต้องมีเส้นเชื่อมเพียงเส้น
เดียว นัน่ คือไม่มี loop หรื อ cycle
Minimum spanning tree
MST หมายถึงเวทจ์กราฟและเป็ นสแปนนิ่งทรี ที่มีค่าน้ าหนักรวมกัน
แล้วมีค่าน้อยที่สุด
2
.29
0
.31
0
.51
.25
1
.51
.51
6
7
.32
.21
.60
.31
6
7
.32
2
.29
.21
.60
1
.51
.46
.46
3
3
.34
.18
5
.25
.40
.34
.18
4
5
.40
4
Minimum spanning tree
• Representation
2
.29
0
.51
.31
7
.32
6
.25
.21
.60
1
.51
.46
3
.34
.18
5
.40
4
0
1
2
3
4
5
6
7
0 1 2 3 4 5 6 7
* .32 .29 * * .60 .51 .31
.32 * * * * * * .21
.29 * * * * * * *
* * * * .34 .18 * *
* * * .34 * .40 .51 .46
.60 * * .18 .40 * * *
.51 * * * .51 * * .25
.31 .21 * * .46 * .25 *
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
• Shortest Path หมายถึง Path ที่ส้ นั ที่สุดระหว่าง 2 Vertex
• หาเส้นทางการส่ งข้อมูลจากต้นทางไปปลายทาง โดยให้มีระยะทางสั้น
ที่สุด
1. ใส่ Vertex เริ่ มต้นใน Tree
2. เลือก Edge จาก Vertex ใน Tree ไปยัง Vertex ที่ไม่อยูใ่ น Tree และมี
ผลรวมของ Weight ต่าสุ ด
3. ทาซ้ าข้อ 2 จนกว่าจะครบทุก Vertex
Shortest Path
• จงหา Shortest Path จากโหนด A ไปยังโหนดอื่น ๆ
แบบฝึ กหัด
1. จากภาพต่ อไปนี้ จงการแทนกราฟด้ วย Adjacency matrix
A
B
C
D
2. จากกราฟต่อไปนี้ จงท่องไปในแนวลึก และ แนวกว้าง โดยมีจุดเริ่ มต้นที่
เวอร์เทกซ์ A
B
D
A
E
C
G
F
3. จากภาพต่อไปนี้ จงหา minimum spaning tree โดยเริ่ มที่จุด B
2
A
B
4
C
6
10
7
E
3
D
2
5
F
1
G
12
4. จากกราฟที่กาหนดให้ จงทาการหา Shortest Path
ซึ่งเริ่ มต้นจากจุด 0