Professional Documents
Culture Documents
Ch12 Graph STD
Ch12 Graph STD
Overview of Graph
ELEMENTARY GRAPH ALGORITHMS 1 แนะนําโครงสร้างข้อมูลกราฟ
02204231 Data Structures and Algorithms I Representation of a Graph
2 การแทนกราฟในหน่วยความจํา
Graph Traversal Algorithms
3 การท่องไปในกราฟ
Graph Applications
4 การประยุกต์ใช้กราฟ
C 3 3
2 2
&
& &
E
# %
(
I
Undirected Graph Directed Graph
(
·
2
%
C
2 ·
7 · 8
2 2
E
·
#
%
Overview of Graph Overview of Graph
Types of graphs Types of graphs
ไ
ประเภทกราฟตามการกําหนดค่าของเส้นเชื่อม แบ่งเป็น 2 ลักษณะดังนี้ Unweighted
o กราฟแบบไม่มีน้ําหนัก (Unweighted Graph) & Undirected Graph
ไม่ ศ
ไ
กราฟที่ไม่มีการระบุข้อมูลหรือค่าบางอย่างของเส้นเชื่อมระหว่างโหนดใดๆ Unweighted
หรือ คิดว่าข้อมูลเหล่านั้นมีค่าเท่ากัน เช่น กราฟแผนการเรียนในหลักสูตร & Directed Graph
o กราฟแบบมีน้ําหนัก (Weighted/labeled Graph) ห นา ท ศท
Weighted
กราฟที่มีการระบุข้อมูลหรือค่าบางอย่างของเส้นเชื่อมระหว่างโหนดใดๆ เช่น & Directed Graph
ไม้ ศท
ถนนที่เชื่อมเมือง 2 เมืองพร้อมระบุระยะทางระหว่างเมือง ม
b a c Adjacency
c d a b List
(1) Binary tree (2) Tree d a c
(3) Graph
11 12
มี
มีน้
มีนี้
ทิ
มี
ม่
ม่
ำ
มี
ทิ
ม่
มี
น้
น้
ที
ำ
ทิ
ทิ
Representation of a Graph Representation of a Graph
Adjacency Matrix 1 2 Adjacency Matrix
การแทนกราฟด้วยเมตริกซ์ประชิด a b
1 2 3 4
เก็บข้อมูลความสัมพันธ์ของโหนด ในอาเรย์ 2 มิติ A ขนาด V * V (เมื่อ 1 0 1 1 1
พื้นที่หน่วยความจําที่ใช้:
V คือ จํานวนโหนด) โดยค่าของสมาชิกแต่ละตัวในอาเรย์ Aij เก็บค่าดังนี้ c d4 2 0 0 1 0
3 Unweighted
3 0 0 0 1 (V2)
A[i][j] = 0 เมื่อโหนด vi ไม่ประชิดกับโหนด vj & directed Graph 4 0 0 0 0 เค้อโหน
1 2
1 2 3 4
= w เมื่อโหนด vi ประชิดกับโหนด vj a b
1 0 1 1 1 เมตริกซ์สมมาตร
2 1 0 1 0 A = AT
กราฟแบบไม่มีน้ําหนัก w มีค่าเป็น 1 c d
3 1 1 0 1
กราฟแบบมีน้ําหนัก w เท่ากับค่าของเส้นเชื่อมระหว่างโหนด 3
Unweighted
4 4 1 0 1 0
13 14
& Undirected Graph
423
A E
-
A · 100 · อ
% I 0 ⑧
10 1
&
1 อ 1 1 อ
·
·10 1 0
& + 1 1 8 1
#
· ·. 7
A- B
Weighted
& Undirected Graph
จะหาว่ามีเส้นเชื่อมระหว่าง B -E
โดยการอ้างอาเรย์ที่ A[i][j] B- A
การแทนกราฟด้วยรายการประชิด
A * อ
· ·
&
& I
·
·
&
1
·
ใช้โครงสร้างของลิงค์ลิสต์มาเก็บข้อมูลความสัมพันธ์ของกราฟ
· · ·
· & 1 0
o ใช้อาเรย์ของลิงค์ลิสต์ในการเก็บข้อมูล โดยสมาชิกแต่ละตัวใน
1 ·อ ·.
Eอ · 0 1 0/
อาเรย์ V[i] จะเก็บพอยน์เตอร์ที่อ้างอิงไปยังลิงค์ลิสต์สําหรับเก็บ
#
& · · · ·
โหนดประชิดของแต่ละโหนดในกราฟ 0
1
แต่ละโหนดมี หนึ่งลิงค์ลิสต์
2
V-1
17 18
c d
b c
พื้นที่หน่วยความจําที่ใช้:
Unweighted c d (V+E)
& directed Graph d
a b a b d c
a c
b
c d c d a b
Unweighted
& Undirected Graph
d a c
19 20
Quick Check3 Representation of a Graph
จงแทนกราฟต่อไปนี้ด้วยรายการประชิด Adjacency Matrix vs Adjacency List
-htEpntertainerAt
A
พื้นที่หน่วยความจําที่ใช้ (Usage Space)
o Adjacency Matrix: (V2)
เหมาะกับกราฟที่มีเส้นเชื่อมจํานวนมาก (dense graph), |E| |V |2
-L
o Adjacency List: (V+E)
เหมาะกับกราฟที่มีเส้นเชื่อมจํานวนน้อยๆ (sparse graph), |E| << |V |2
21 22
/ Adjacency List
i h / i
j
1
1
o Adjacency List: O(degree (vi))
j i /
โดยการท่องไปลิงค์ลิสต์ของโหนด ที่ต้องการตรวจสอบ
ด
- อ
แราว ต
23 24
ดู
สั
Representation of a Graph Representation of a Graph
Adjacency Matrix vs Adjacency List Adjacency Matrix vs Adjacency List
เวลาในการเพิ่ม/ลบโหนด (Insert/Remove vertex) เวลาในการเพิ่ม/ลบเส้นเชื่อมระหว่างโหนด (Insert/Remove edge)
o Adjacency Matrix: o Adjacency Matrix:
- เพิ่มท้ายแถว และท้ายคอลัมภ์ในอาเรย์ และให้ค่าเริ่มต้นเป็น 0 ·Cr กําหนดค่าสมาชิกในอาเรย์ A[i][j] ให้เท่ากับ w (การเพิ่ม)/เท่ากับ 0 (การลบ)
- ลบแถวและคอลัมภ์ในอาเรย์ (มีการเลื่อนแถว/คอลัมภ์อื่นมาแทน) ·Cut
o Adjacency List:
o Adjacency List: - เพิ่มโหนดประชิด (Node j) ที่……….ลิงค์ลิสต์
- เพิ่มโหนดท้าย อาเรย์ของลิงค์ลิสต์ 0C1) ของโหนดต้นทาง (Node i)
- ลบอาเรย์ของลิงค์ลิสต์ (มีการเลื่อนโหนดอื่นมาแทน) - ท่องไปในลิงค์ลิสต์ของโหนดที่ต้องการลบ (Node i)
และการจัดการพอยน์เตอร์ เพื่อค้นหาโหนดที่จะลบเส้นเชื่อม (Node j) และทําการลบลิงค์ลิสต์
1 1 · I + 1 °
↓
· -
-ออ
25 26
·'อ
" ·
%
·
ว
·ออ
Step 1: Push the starting node on the stack and set its STATUS = 2 Status: 1
3
2 1
2 1 1 1 1 1 1 1
(waiting state)
Step 2: while stack is not empty
2.1 Pop the top node N.
Process it and set its STATUS = 3 (processed state)
2.2 Push on the stack all the adjacency nodes of N that are in Push โหนด A ในสแตค Pop โหนด A ออกจากสแตค A
the ready state (whose STATUS = 1) and set their STATUS = 2 Push โหนดประชิดของ A (status=1) ลงสแตค
(waiting state) X
↓
31 32
⑤
Ant
Graph Traversal Algorithms Graph Traversal Algorithms
Depth-first Traversal Depth-first Traversal
A X H P E Y M J G A X H P E Y M J G
Status: 3 3
2 1
2 1 1 1 1 1 12 Status: 3 3 2
3 1
23 1
2 1 1 1 2
Y,,J
Pop โหนด E ออกจากสแตค H,Y,M Pop โหนด M ออกจากสแตค
A-X-H-P-E -Y A-X-H-P-E-Y-M -J -G
Push โหนดประชิดของ E (status=1) ลงสแตค Push โหนดประชิดของ M (status=1) ลงสแตค
Pop โหนด Y ออกจากสแตค E, M Pop โหนด J ออกจากสแตค M
Push โหนดประชิดของ Y (status=1) ลงสแตค Push โหนดประชิดของ J (status=1) ลงสแตค
35 36
Graph Traversal Algorithms Graph Traversal Algorithms
Breath-first Traversal Breath-first Traversal
การท่องกราฟแนวกว้างก่อน: วิธีนี้ทําโดยเลือกโหนดที่เป็นจุดเริ่มต้น ขั้นตอนหลัก
ต่อมาให้เยือนโหนดประชิดกับโหนดเริ่มต้นทีละตัวจนครบ แล้วจึงมาตั้ง 0. กําหนด status เริ่มต้นของทุกโหนดให้มีค่าเป็น 1
ต้นที่โหนดประชิดแรกที่เยือนไปแล้วเพื่อเริ่มเยือนโหนดประชิดของโหนด 1. Enqueue โหนดเริ่มต้นในคิว และ เปลี่ยน status เป็น 2
นั้นในลักษณะเดิมอีก การท่องในแบบนี้จึงเป็นเสมือนกับการกวาดเยือน 2. Dequeue โหนดออกจากคิว
โหนดในแนวกว้างตามชื่อวิธีการท่อง มาประมวลผล และเปลี่ยน status เป็น 3
A
A–B–C–D–E–F–G–H–I-J 3. Enqueue โหนดประชิดทั้งหมดของ โหนดในข้อ 2 ที่มี status=1
B C D
ในคิว และ เปลี่ยน status เป็น 2
4. ทําซ้ําข้อ 2-3 จนกว่าจะครบทุกโหนดและคิวว่าง
E F G H I J
37 38
Step 1: Enqueue the starting node and set its STATUS = 2 Status: 1
3
2 3
1
2 12 1 1 1 1 1 1
2
(waiting state)
Step 2: while Queue is not empty A -X
2.1 Dequeue a node N.
Process it and set its STATUS = 3 (processed state)
2.2 Enqueue all the adjacency nodes of N that are in the ready Enqueue โหนด A X G,H
state (whose STATUS = 1) and set their STATUS = 2 Dequeue ,Enqueue โหนดประชิดของ A (status=1) ในคิว
(waiting state) Dequeue ,Enqueue โหนดประชิดของ X
39
(status=1) ในคิว 40
Graph Traversal Algorithms Graph Traversal Algorithms
Breath-first Traversal Breath-first Traversal
A X H P E Y M J G A X H P E Y M J G
Status: 3 3 3
2 1
2 1
2 1 1 1 3
2 Status: 3 3 3 2
3 3
2 1
2 1
2 1 3
A-X-G -H A-X-G-H -P -E
X,H,P G,H
H,M,Y
Dequeue ,Enqueue โหนดประชิดของ G (status=1) ในคิว X,G,P,E Dequeue ,Enqueue โหนดประชิดของ P (status=1) ในคิว
Dequeue ,Enqueue โหนดประชิดของ H Dequeue ,Enqueue โหนดประชิดของ E
(status=1) ในคิว (status=1) ในคิว
41 42
A-X-G-H-P-E -M -Y -J
หาโหนดประชิดของแต่ละโหนดในกราฟ จํานวนเส้นเชือ่ ม
E,Y,J
Dequeue ,Enqueue โหนดประชิดของ M (status=1) ในคิว E,M ทั้งหมดในกราฟ
Dequeue ,Enqueue โหนดประชิดของ Y การดําเนินการ push/pop stack หรือ enqueue/dequeue
(status=1) ในคิว = …………..
OC1
43 44
หู
Graph Applications Summary
กราฟถูกนําไปประยุกต์ใช้ในการแก้ปัญหาหลายปัญหา กราฟ (Graph) เป็นโครงสร้างในการเก็บข้อมูลแบบไม่เป็นเชิงเส้น
o การหาเส้นทางที่สั้นที่สุดระหว่างจุด 2 จุดในกราฟ (Shortest Path) o กราฟเป็นโครงสร้างที่เก็บการเชื่อมความสัมพันธ์ระหว่างสองโหนด
Dijkstra’s algorithm การเชื่อมต่อของสายการบิน o กราฟแบ่งตามทิศทางของเส้นเชื่อม ได้แก่ มีทิศทาง และไม่มีทิศทาง
การแทนกราฟในคอมพิวเตอร์ มี 2 วิธี
o การหาเส้นทางที่สั้นที่สุดเพื่อเชื่อมต่อแต่ละโหนด
o Adjacency Matrix เหมาะกับ dense graph
ในกราฟ (Minimum Spanning Tree)
Prim’s algorithm o Adjacency List เหมาะกับ sparse graph
Kruskal’s algorithm การท่องไปในกราฟ มี 2 วิธี
การนําไปใช้ เช่น การเดินสายเชื่อมต่อระบบ o Depth-first transversal - ใช้ Stack ช่วยในการท่องกราฟ
เครือข่ายคอมพิวเตอร์ หรือการเดินสายโทรศัพท์ o Breath-first transversal - ใช้ Queue ช่วยในการท่องกราฟ
45 46