โครงสร้างข้อมูลกราฟ ( graph) 7 graph.pdf · 2016-11-29 ·...
TRANSCRIPT
โครงสร้างข้อมูลกราฟ (GRAPH)
โครงสร้างข้อมูลแบบกราฟ (Graph)
โครงสร้างข้อมูลแบบไม่ใช่เชิงเส้น
น าไปใช้ในงานท่ีเก่ียวข้องกับการแก้ปัญหาท่ีค่อนข้างซับซ้อน เช่น
การวางข่ายงานคอมพิวเตอร์
การวิเคราะห์เส้นทางวิกฤติ
ปัญหาเส้นทางที่สั้นที่สุด
ฯลฯ
2
Adjacent Vertices
นิยามของกราฟ
3
A B
C D
Vertices/ Vertex
Arc/ Edge
V(G) คอื เซตของ Vertex ที่ไม่ใชเ่ซ็ตว่าง และมีจ านวนจ ากัด
E(G) คอื เซตของ Edge ซึ่งเขียนดว้ยคูข่องเวอรเ์ท็กซ ์
องค์ประกอบโครงสร้างข้อมูลแบบกราฟ
4
V = {1, 2, 3, 4}
E= {(1,2), (1,4), (2,3), (3,4)}
ตัวอย่าง
5
A
C D E
B
V(G) =
EG =
{A, B, C, D, E}
{(A,B), (A,C), (A,D), (A,E), (B,E)}
ประเภทของกราฟ
6
B
A
C D B
A
C D
Undirected Graph Directed Graph
ศัพท์เฉพาะเกี่ยวกับ Graphs
Vertices หรือ Vertex
Node ที่อยู่ภายใน Graph
Arcs/Edges
Arcs เส้นเช่ือมต่อระหว่าง Node บน Directed Graph
Edges เส้นเช่ือมต่อระหว่าง Node บน Undirected Graph
Adjacent Node
โหนดที่มีการเช่ือมโยงกัน
7
Example : Adjacent Node
8
A with B
A with E
E with C
ศัพท์เฉพาะเกี่ยวกับ Graphs
Degree
จ านวนเส้นเข้า (In degree)และออก (Out degree) ของแต่ละโหนด บน Graphs
9
B
A
C D
Node In-degree Out-Degreee A 3 3 B 1 1 C 2 2 D 2 2
B
A
C D
Node In-degree Out-Degreee A 3 1 B 0 1 C 0 2 D 2 1
Undirected Graph Directed Graph
ศัพท์เฉพาะเกี่ยวกับ Graphs
Path
ใชเ้รียกล าดับของ Vertex ที่เช่ือมต่อกันจากจุดหนึ่งไปยังอกีจุดหนึ่ง
10
(A,B)
(A,B,C)
(A,B,C,D,E)
(A,B,E,F)
ศัพท์เฉพาะเกี่ยวกับ Graphs
Cycle
Path ใน Graph แบบ Direct Graph โดย Vertex เริ่มตน้และสิ้นสุดเป็น Vertex เดียวกัน
11
(B,E,C,B)
(B,E,D,C,B)
ศัพท์เฉพาะเกี่ยวกับ Graphs
Loop
Path ใน Graph แบบ Undirect Graph โดย Vertex เริ่มตน้และสิ้นสุดเป็น Vertex เดียวกัน
12
(B,E,C,B)
(B,C,D,E,B)
Graph VS. Tree
Graph เป็น Super Set ของ Tree
Tree ต้องมี Father Node โหนดเดียวเท่านั้น, แต่ Graph ไม่จ าเป็น
บน Graph บาง Vertex อาจไม่มีเส้นเชื่อมได้
13
Graph VS. Tree
14
B
A
F
C
E G
D
(4) Graph
(2) Non binary tree
B D
A
F
C
E G
B
A
C
E G
(1) Binary tree
(3) Graph
B
A
F
C
E G
D
ประโยชน์ของกราฟ (Routing การหาเส้นทาง)
สายการบิน (การเช่ือมต่อของสายการบิน ตารางบิน)
ประโยชน์ของกราฟ (Routing การหาเส้นทาง)
Network (การเช่ือมต่อของอุปกรณ์ Router)
เพ่ือใช้ในการรับส่งข้อมูลในเครือข่าย
ประโยชน์ของกราฟ (Algorithm Design)
Map Coloring คอื วธิกีารระบายสีในแผนที่โดยใช้สีน้อยที่สุด
พื้นที่ตดิกันห้ามใช้สีเดียวกัน
Unweighted Graph
เส้นเชื่อมไม่ระบุข้อมูลหรือค่าบางอย่าง เช่น
ถนนท่ีเช่ือมเมือง 2 เมืองแต่ไมร่ะบุระยะทาง
ผังรถไฟฟ้าใตด้ิน แต่ไม่ระบุราคาค่าโดยสารระหว่างสถาน ี
หรือมองว่าค่าข้อมูลเหล่าน้ันมีค่าเท่ากันหมด
อาจเป็น Directed หรือ Undirected Graph ก็ได้
18
Unweighted & Undirected Graph Unweighted & directed Graph
B
A
F
C
E G
D B
A
F
C
E G
D
Weighted Graph
เส้นเชื่อมระบุข้อมูลหรือค่าบางอย่างท่ีต้องการบ่งช้ี เช่น
ถนนที่เช่ือมเมือง 2 เมืองพรอ้มระบุระยะทางระหว่างเมือง
อาจเป็น Directed หรือ Undirected Graph ก็ได้
19
B
A
Weighted & Undirected Graph
C
D
7 6
6 5 B
A
C
D
Weighted & directed Graph
7 6
6 5
Complete Graph
กราฟที่ทุกโหนดมีเส้นเชื่อมถึงโหนดอ่ืนๆ ทั้งหมด
20
A
C B
E
D
F
G H
จ านวน Edge = N*(N-1)
เช่น 3*(3-1) =6
จ านวน Edge = N*(N-1) 2
เช่น 5*(5-1) / 2 = 10
กราฟมีทิศทาง กราฟไม่มทีิศทาง
Adjacency Matrix ใช้อาร์เรย์ในการเก็บข้อมูล
ก าหนดให้กราฟ G ประกอบด้วย
เซตของ vertices VG โดย |VG| = n (กราฟม ีn vertices เม่ือ n>=1)
เซตของ edge EG
การแทนกราฟด้วยเมตรกิซป์ระชดิ สามารถแทนด้วย vector และ อาร์เรย์ A ที่มีขนาด n x n ซึ่ง
A(i,j) = W ถา้ Vi ประชิดกับ Vj และ Edge มนี้ าหนัก เท่ากับ W (ถ้าเป็น กราฟแบบไมม่ีน ้าหนัก W = 1)
=0 กรณีอ่ืน ๆ
21
Graph Storage Structure
22
Adjacency Matrix ใช้อาร์เรย์ในการเก็บข้อมลู
23
Graph Storage Structure Adjacency List
การแทนกราฟด้วยเมตริกซ์ประชิด จะพบว่า ถ้ากราฟมีจ านวน vertex มาก แต่มี edge น้อย เมตริกซ์ที่ได้จะประกอบด้วยตัวเลข 0 เป็นจ านวนมาก ซ่ึงเปลืองเน้ือท่ีในการจัดเก็บ
ดังนั้นจึงมีการประยุกต์ใช้ลิงค์ลิสต์มาจัดเก็บเพ่ือลดขนาดของการใช้หน่วยความจ า
24
25
Adjacency List
26
27
B
A E
I G
C F
D 3
2
7
8 9 2
4 5
9
3 1
H 6 4
Assignment 1. จากกราฟข้างต้น จงแสดงการจัดเก็บกราฟทัง้แบบ adjacency matrix และ adjacency list (vertex vector, vertex list ให้เรยีงตามล าดับตัวอักษร)
การ Add Vertex
28
A B
D C
E
Add Vertex
A B
D C E
การ Delete Vertex
29
A B
D C
Delete Vertex B
A
D C
B
การ Add edge
A B
D C
Add Edge
{A, B}
A B
D C
A B
D C
Add Edge
{A, B}
A B
D C
การ delete edge
A B
D C
Delete Edge
{A, B}
A B
D C
Delete Edge
{B, D}
A B
D C
A B
D C
การ Find Vertex
A B
D C
Find Vertex B
A
D C
B
Graph Traversal
การเดินท่องเข้าไปในโครงสร้างข้อมูล Graph มี 2 แบบ
Depth-First Traverse -->ใช้ stack ช่วยในการท่องกราฟ
การท่องตามความลึกของเส้นทางจาก vertex ที่มอียู่ในกราฟไปจนกวา่จะไปไม่ได้แล้วในเส้นทางนั้น แล้วจึงเข้าหาเสน้ทางอ่ืนๆ ที่เหลืออยู่โดยจะใช้ความลึกเป็นหลัก ท าไปเร่ือยๆ จนกว่าจะครบทุกเส้นทาง
Breadth-First Traverse -->ใช้ Queue ช่วยในการท่องกราฟ
การเข้าหา Vertex ที่เป็นเพ่ือนบา้นของ vertex ที่ก าหนดไว้จนหมดเสียกอ่น แล้วจึงท าการ visit vertex อ่ืนๆ ที่เหลืออยู่ดว้ยวิธีเดียวกัน
33
Depth-first Traversal
34
ตัวเลข 1 – 8 แสดงล าดับที่ DFS เข้าหา node ต่าง ๆ ที่มีอยู่ในกราฟ
Depth-first Traversal
1. push vertex แรก ลง stack
2. pop vertex และ ประมวลผล
3. push adjacent ทั้งหมดของ vertex ท่ี pop ออกมาจากในข้อ 2 ลง stack
4. ท าซ้ าข้อ 2-3 จนกว่าจะครบทุก vertex และ stack ว่าง
35
36
A X H P E Y M J G
Breath-first Traversal
1. enqueue vertex ลงใน queue
2. dequeue vertex และประมวลผล
3. enqueue adjacent ทั้งหมดของ vertex ท่ี dequeue ออกมาจากในข้อ 2 ลงใน queue
4. ท าซ้ าข้อ 2-3 จนกว่าจะครบทุก vertex และ queue ว่าง
37
38
A X G H P E M Y J
39
B
A
E
C
D G
F
H
I
3
2
7
8
9 2
4
5
9
3
4 1
J 6 4
5
Assignment จากกราฟด้านล่างนี้ จงใช้ในการตอบค าถามข้อ 2 และ 3
40
2 Depth-first traversal , Breath-first traversal โดยเริ่มจาก D
*** ในกรณีน า vertex เข้า stack และ queue ให้เลือกน าเข้าเรียงตามล าดับ
ตัวอักษรจากน้อยไปหามาก (ระหว่าง C และ E ให้เลือก C เข้า stack และ
queue ก่อน E เป็นต้น )
3 Minimum spanning tree , Shortest path โดยเริ่มจาก F
*** ในกรณีพบเส้นทางที่มีน้ าหนักเท่ากนั ให้เลือกจาก vertex เรียง
ตามล าดับตัวอักษรจากน้อยไปหามากเช่นกัน ( path(A,G) และ path(A,I) มี
น้ าหนักเท่ากัน เลือก path(A,G) เป็นต้น )
Assignment
Application of graph
กราฟถูกน าไปประยุกต์ใช้ในการแก้ปัญหาหลายปัญหา ซึ่งในบทเรียนน้ีจะยกตัวอย่างปัญหาง่ายๆ 2 ปัญหา คือ
การหาเส้นทางที่สั้นที่สุดเพ่ือเช่ือมต่อแต่ละโหนดในกราฟนั้น Minimum Spanning Tree
การหาเส้นทางที่สั้นที่สุดระหว่างจุด 2 จุดในกราฟ - Shortest Path
41
Spanning tree
Tree ประกอบไปด้วย Subset ของ Edge ที่สามารถเช่ือมต่อไดก้ับทุก vertex ในกราฟ
ต้นไม้ท่ีประกอบด้วยโหนดทุกโหนดของกราฟ โดยแต่ละคูข่องโหนดจะต้องมีเส้นเช่ือมเพียงเส้นเดียว นั่นคือไม่มี loop หรือ cycle ซึ่งอาจมีไดม้ากกว่า 1 แบบ
Example : Find Spanning Tree of the following graph
42
Spanning Tree
43
แบบที่ 1 แบบที่ 2
แบบที่ 3
แบบ อื่นๆ
Minimum Spanning Tree (MST)
Spanning tree ท่ีมีผลรวมของ weight น้อยท่ีสุด
การสร้าง MST (Prim’s Algorithm)
ขั้น 1 : เริ่มต้นจาก vertex แรก (0)
ขั้น 2 : หา edge ทีม่ีค่าน้อยที่สุดจาก edge m ทุกตัวที่เชื่อมต่อกับ vertex แรก
ขั้น 3 : เก็บ edge นั้นไว้ใน array MST
ขั้น 4 : เริ่มขั้นตอนที่ 1, 2 และ 3 ใหม่จนกว่าจะหมด edge ที่มีอยู่ใน graph โดยเริ่มต้นจาก vertex ที่มีค่าน้อยที่สุดในการค้นหาครั้งก่อน
44
45
จงหา Minimum Spanning Tree โดยก าหนดให้จุด A เป็นจุดเริ่มต้น
ตัวอย่าง
46
Step 1
ขั้น 1
ขั้น 2
ขั้น 3
ค้นหาจาก Vertex A
Step 2
ค้นหาจาก Vertex C
{C,B}, {C,D}, {C,E}, {A,B}
{A,C}
{A,C} {C,B}
{A,C}, {A,B}
ขั้น 1
ขั้น 2
ขั้น 3
{B,C,D,E,F}
{B,D,E,F}
Step 0 Insert first Vertex
47
Step 3
ขั้น 1
ขั้น 2
ขั้น 3
ค้นหาจาก Vertex B
Step 4
ค้นหาจาก Vertex D
{D,E}, {C,E}, {D,F}, {B,D}, {A,B}
{C,D}
ขั้น 1
ขั้น 2
ขั้น 3
{A,C} {C,B}
{C,D} {A,C} {C,B} {D,E}
{C,D}, {C,E}, {B,D}, {A,B}
{D,E,F}
{E,F}
48
Step 5
ขั้น 1
ขั้น 2
ขั้น 3
ค้นหาจาก Vertex E
Total weight = 13
ค้นหาจาก Vertex F
{C,E}, {B,D}, {E,F}, {A,B}
ขั้น 1
ขั้น 2
ขั้น 3 {B,D} {A,C} {C,B} {D,E}
{B,D} {A,C} {C,B} {D,E} {D,F}
{C,E}, {D,F}, {B,D}, {E,F}, {A,B}
{F}
{ }
{D,F}
Step 6
Shortest Path
เส้นทางท่ีสั้นท่ีสุดระหว่าง 2 vertices
การสร้าง Shortest path (Dijkstra Algorithm)
1. ใส่ vertex เริ่มตน้ใน tree
2. เลือก edge จาก vertex ใน tree ไปยัง vertex ที่ไม่อยูใ่น tree และมี ผลรวมของน้ าหนักของ edge จากจุดเริ่มตน้ไปยังจุดนั้นต่ าสุด
3. ท าซ้ าข้อ 2 จนกวา่จะครบทุก vertex
*** ผลลัพธ์ที่ได้จะเป็นเส้นทางที่สั้นที่สุดจาก vertex เริ่มต้นไปยังทุกๆ vertices ในกราฟ
49
50
จงหา Shortest Path จากโหนด A ไปยังโหนดอ่ืน ๆ
ตัวอย่าง
51
52
53
จะได้ว่าระยะทางที่สั้นที่สุดจาก A ไปยังจุดต่างๆ มีค่าเท่ากับ 30 ดังนี ้
A -> B = 5 A -> C = 3
A -> D = 6 A -> E = 7
A -> F = 9 Total weight = 30
ศึกษาเพ่ิมเติมเกีย่วกับอัลกอริธึม
• Vdo 1
• https://www.youtube.com/watch?v=8Ls1RqHCOPw
• Vdo 2
• https://www.youtube.com/watch?v=WN3Rb9wVYDY&t=337s
54
55
Assignment 1. จงแสดงวิธีการ Shortest Path เริ่มต้นจากโหนด B
From B A C E D G F
1
2
3
4
5
6
7