Thiết Kế & Đánh Giá Thuật Toán Đồ Thị
TS. Lê Nguyên Khôi Trường Đại Học Công Nghệ - ĐHQGHN
(cid:1) Định nghĩa (cid:1) Biểu diễn (cid:1) Tìm kiếm (cid:1) Sắp xếp topo
1
Nội Dung
Đồ thị (cid:1) = ((cid:4), (cid:6)) bao gồm (cid:1) Tập (cid:4) các đỉnh (cid:1) Tập (cid:6) ⊆ (cid:4) × (cid:4) cạnh (cid:1) Đồ thị vô hướng
(cid:1) Cặp cạnh không có thứ tự (cid:10), (cid:11) = ((cid:11), (cid:10))
(cid:1) Đồ thị định hướng
(cid:1) Cặp cạnh có thứ tự (cid:10), (cid:11) ≠ (cid:11), (cid:10) Cả hai trường hợp, (cid:6) ∈ (cid:14)( (cid:4) (cid:15)) Nếu (cid:1) liên thông, (cid:6) ≥ (cid:4) − 1
⟹ log (cid:6) = (cid:23) log (cid:4)
2
Định Nghĩa
(cid:1) Danh sách liền kề
(cid:1) Mảng 1 chiều (cid:4) danh sách (cid:1) Mỗi danh sách cho một đỉnh (cid:10) bao gồm
(cid:1)Các đỉnh (cid:11) sao cho (cid:10), (cid:11) ∈ (cid:6)
(cid:1) Ma trận liền kề
(cid:1) Mảng 2 chiều (cid:4) × (cid:4) (cid:1) Đỉnh được đánh số 1, 2, … , (cid:4)
(cid:1)Giá trị 1 thể hiện có cạnh (cid:26), (cid:27) ∈ (cid:6)
3
Biểu Diễn
(cid:1) Danh sách liền kề
(cid:1) Mảng 1 chiều (cid:4) danh sách (cid:1) Mỗi danh sách cho một đỉnh (cid:10) bao gồm
(cid:1)Các đỉnh (cid:11) sao cho (cid:10), (cid:11) ∈ (cid:6)
Biểu Diễn – Danh Sách
4
(cid:28)(cid:29)(cid:27) 1 (cid:2) 2, 3 (cid:28)(cid:29)(cid:27) 2! (cid:2) "3# (cid:28)(cid:29)(cid:27) 3! (cid:2) "# (cid:28)(cid:29)(cid:27) 4! (cid:2) "3#
(cid:1) Ma trận liền kề
(cid:1) Mảng 2 chiều (cid:4) × (cid:4) (cid:1) Đỉnh được đánh số 1, 2, … , (cid:4)
(cid:1)Giá trị 1 thể hiện có cạnh (cid:26), (cid:27) ∈ (cid:6)
5
Biểu Diễn – Ma Trận
(cid:1) Danh sách liền kề
(cid:1) Sử dụng khi đồ thị thưa (cid:1) (cid:6) nhỏ hơn nhiều so với (cid:4) (cid:15) (cid:1) Xác định danh sách đỉnh đi được từ (cid:10)
(cid:1) Ma trận liền kề
(cid:1) Sử dụng khi đồ thị dầy (cid:1) (cid:6) gần bằng (cid:4) (cid:15) (cid:1) Xác định có cạnh (cid:10), (cid:11) ∈ (cid:6)
(cid:1) Sử dụng cho cả đồ thị vô hướng và có hướng
6
Biểu Diễn – So Sánh
(cid:1) Xác định cấu trúc của đồ thị (cid:1) Thăm tất cả các đỉnh của (cid:4) (cid:1) Mỗi đỉnh thăm một lần (cid:1) Sử dụng các cạnh trong (cid:6)
(cid:1) 02 phương pháp
(cid:1) Theo bề rộng (Breath First Search – BFS) (cid:1) Theo bề sâu (Depth First Search – DFS)
7
Tìm Kiếm
(cid:1) Từ (cid:10) lần lượt thăm tất cả các (cid:11) liền kề (cid:10)
Tìm Kiếm – BFS
(cid:1) Sau đó, đỉnh nào được thăm trước thì
mà (cid:11) chưa được thăm
các đỉnh kề nó cũng sẽ được thăm trước (cid:1) Tiếp tục cho tới khi không thể thăm đỉnh
8
nào nữa
Tìm Kiếm – BFS – Ví Dụ
1 2 3 4 5 7 8 6 9 10 11 12 13
9
Tìm Kiếm – BFS – Mã Giả
Algorithm BFS(u) Input: Đỉnh u chưa được thăm Khởi tạo hàng đợi Q rỗng Đánh dấu đỉnh u đã được thăm Q.enqueue(u) while Q.empty() ≠ TRUE v (cid:2)(cid:2)(cid:2)(cid:2) Q.dequeue() for (mỗi đỉnh w kề v)
if (w chưa được thăm)
Đánh dấu w đã được thăm Q.enqueue(w)
10
(cid:1) Thao tác trên hàng đợi: (cid:14)( (cid:4) )
(cid:1) Đỉnh thêm/bớt ở hàng đợi 1 lần duy nhất
(cid:1) Duyệt danh sách liền kề: (cid:14)( (cid:6) ) (cid:1) Khi đỉnh bị loại khỏi hàng đợi (cid:1) Một lần duy nhất (cid:1) Độ dài danh sách (cid:23) (cid:6)
(cid:1) Khởi tạo: (cid:14)( (cid:4) )
(cid:1) Đánh dấu các đỉnh chưa thăm
(cid:1) Tổng thời gian: (cid:14)( (cid:4) + (cid:6) )
11
Tìm Kiếm – BFS – Phân Tích
(cid:1) Xác định có đường đi từ (cid:10) đến (cid:11) không (cid:1) Kiểm tra tính liên thông (cid:1) Xác định thành phần liên thông
12
Tìm Kiếm – BFS – Ứng Dụng
(cid:1) Từ (cid:10) thăm (cid:11) liền kề (cid:10) (cid:1) Từ (cid:11) thăm & liền kề (cid:11) (cid:1) Cứ thể tiếp tục khi có thể được (cid:1) Khi tới (cid:11) mà tại (cid:11) không thăm tiếp được, quay lại (cid:10) trước đó, thăm (cid:11)′ khác của (cid:10) (cid:1) Tiếp tục cho tới khi không thể thăm đỉnh
Tìm Kiếm – DFS
13
nào nữa
Tìm Kiếm – DFS – Ví Dụ
1 2 3 5 4 6 7 8 9 10 11 12 13
14
Tìm Kiếm – DFS – Mã Giả
Algorithm DFS(u) Input: Đỉnh v chưa được thăm Đánh dấu đỉnh u đã được thăm for (mỗi đỉnh v kề u)
if (v chưa được thăm)
Đánh dấu v đã được thăm DFS(v)
15
(cid:1) Phân lớp cung (cid:1) Phát hiện chu trình
16
Tìm Kiếm – DFS – Ứng Dụng
(cid:1) Nhiều danh quan hệ trên tập đối tượng có thể biểu diễn bới đồ thị định hướng không chu trình (cid:1) Quan hệ thứ tự bộ phận (cid:1) Quan hệ thứ tự thời gian giữa các nhiệm vụ
trong đề án
(cid:1) Quan hệ thứ tự thời gian giữa các môn học
trong một chương trình học
17
Sắp Xếp Topo
Sắp Xếp Topo – Ví Dụ
LTNC
Toán cao cấp
LTHĐT
CTDL >
LTTT
Trí tuệ nhân tạo
18
(cid:1) (cid:1) = ((cid:4), (cid:6)) là đồ thị định hướng không chu trình (cid:1) Sắp xếp các đỉnh đồ thị thành một danh sách (cid:1) Sao cho nếu có cung (cid:10), (cid:11) thì (cid:10) cần đứng
trước (cid:11) trong danh sách đó
Sắp Xếp Topo
a
b
c
d
(a, c, b, d, e, f) hoặc (a, b, d, c, e, f) …
e
f
19
(cid:1) Sắp xếp topo dựa trên DFS (cid:1) Thực hiện DFS trên đồ thị (cid:1) Khi kết thúc quá trình DFS trên một đỉnh
Sắp Xếp Topo
(cid:1) Kết thúc DFS trên toàn đồ thị, đảo ngược
(cid:10) thì thêm (cid:10) vào cuối danh sách
20
danh sách, được sắp xếp topo
DFS(a)
DFS(c)
Sắp Xếp Topo – Ví Dụ
a
b
DFS(e)
L = (e) L = (e, c)
DFS(d)
DFS(f)
c
d
L = (e, c, f) L = (e, c, f, d) L = (e, c, f, d, a)
DFS(b)
e
f
L = (e, c, f, d, a, b)
L = (b, a, d, f, c, e)
21