Giáo trình Thiết kế & Đánh giá thuật toán - Bài giảng 12: Đồ thị - Lê Nguyên Khôi
G = (V, E) là đồ thị định hướng không chu trình
Sắp xếp các đỉnh đồ thị thành một danh sách
Sao cho nếu có cung (u,v) thì u cần đứng trước v trong danh sách đó
Sắp xếp topo dựa trên DFS
Thực hiện DFS trên đồ thị
Khi kết thúc quá trình DFS trên một đỉnh u
thì thêm u vào cuối danh sách
Kết thúc DFS trên toàn đồ thị, đảo ngược
danh sách, được sắp xếp topo
22 trang |
Chia sẻ: thucuc2301 | Lượt xem: 706 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Thiết kế & Đánh giá thuật toán - Bài giảng 12: Đồ thị - Lê Nguyên Khôi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
Nội Dung
Định nghĩa
Biểu diễn
Tìm kiếm
Sắp xếp topo
1
Định Nghĩa
Đồ thị = (, ) bao gồm
Tập các đỉnh
Tập ⊆ × cạnh
Đồ thị vô hướng
Cặp cạnh không có thứ tự
, = (,
)
Đồ thị định hướng
Cặp cạnh có thứ tự
, ≠ ,
Cả hai trường hợp, ∈ ( )
Nếu liên thông, ≥ − 1
⟹ log = log
2
Biểu Diễn
Danh sách liền kề
Mảng 1 chiều danh sách
Mỗi danh sách cho một đỉnh
bao gồm
Các đỉnh sao cho
, ∈
Ma trận liền kề
Mảng 2 chiều ×
Đỉnh được đánh số 1, 2, ,
Giá trị 1 thể hiện có cạnh , ∈
3
Biểu Diễn – Danh Sách
Danh sách liền kề
Mảng 1 chiều danh sách
Mỗi danh sách cho một đỉnh
bao gồm
Các đỉnh sao cho
, ∈
1 2, 3
2! "3#
3! "#
4! "3#
4
Biểu Diễn – Ma Trận
Ma trận liền kề
Mảng 2 chiều ×
Đỉnh được đánh số 1, 2, ,
Giá trị 1 thể hiện có cạnh , ∈
5
Biểu Diễn – So Sánh
Danh sách liền kề
Sử dụng khi đồ thị thưa
nhỏ hơn nhiều so với
Xác định danh sách đỉnh đi được từ
Ma trận liền kề
Sử dụng khi đồ thị dầy
gần bằng
Xác định có cạnh
, ∈
Sử dụng cho cả đồ thị vô hướng và có hướng
6
Tìm Kiếm
Xác định cấu trúc của đồ thị
Thăm tất cả các đỉnh của
Mỗi đỉnh thăm một lần
Sử dụng các cạnh trong
02 phương pháp
Theo bề rộng (Breath First Search – BFS)
Theo bề sâu (Depth First Search – DFS)
7
Tìm Kiếm – BFS
Từ
lần lượt thăm tất cả các liền kề
mà chưa được thăm
Sau đó, đỉnh nào được thăm trước thì
các đỉnh kề nó cũng sẽ được thăm trước
Tiếp tục cho tới khi không thể thăm đỉnh
nào nữa
8
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 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
Tìm Kiếm – BFS – Phân Tích
Thao tác trên hàng đợi: ( )
Đỉnh thêm/bớt ở hàng đợi 1 lần duy nhất
Duyệt danh sách liền kề: ( )
Khi đỉnh bị loại khỏi hàng đợi
Một lần duy nhất
Độ dài danh sách
Khởi tạo: ( )
Đánh dấu các đỉnh chưa thăm
Tổng thời gian: ( + )
11
Tìm Kiếm – BFS – Ứng Dụng
Xác định có đường đi từ
đến không
Kiểm tra tính liên thông
Xác định thành phần liên thông
12
Tìm Kiếm – DFS
Từ
thăm liền kề
Từ thăm & liền kề
Cứ thể tiếp tục khi có thể được
Khi tới mà tại không thăm tiếp được,
quay lại
trước đó, thăm ′ khác của
Tiếp tục cho tới khi không thể thăm đỉnh
nào nữa
13
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
Tìm Kiếm – DFS – Ứng Dụng
Phân lớp cung
Phát hiện chu trình
16
Sắp Xếp Topo
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
Quan hệ thứ tự bộ phận
Quan hệ thứ tự thời gian giữa các nhiệm vụ
trong đề án
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 – Ví Dụ
18
CTDL
>
Trí tuệ
nhân
tạo
LTHĐT
LTTT
LTNC Toán
cao
cấp
Sắp Xếp Topo
= (, ) là đồ thị định hướng không chu trình
Sắp xếp các đỉnh đồ thị thành một danh sách
Sao cho nếu có cung
, thì
cần đứng
trước trong danh sách đó
19
d
a
e
c
f
b
(a, c, b, d, e, f)
hoặc
(a, b, d, c, e, f)
Sắp Xếp Topo
Sắp xếp topo dựa trên DFS
Thực hiện DFS trên đồ thị
Khi kết thúc quá trình DFS trên một đỉnh
thì thêm
vào cuối danh sách
Kết thúc DFS trên toàn đồ thị, đảo ngược
danh sách, được sắp xếp topo
20
Sắp Xếp Topo – Ví Dụ
21
d
a
e
c
f
b
DFS(a)
DFS(c)
DFS(e)
L = (e)
L = (e, c)
DFS(d)
DFS(f)
L = (e, c, f)
L = (e, c, f, d)
L = (e, c, f, d, a)
DFS(b)
L = (e, c, f, d, a, b)
L = (b, a, d, f, c, e)
Các file đính kèm theo tài liệu này:
- thiet_ke_danh_gia_thuat_toanbaigiang12_dothi_4053_2032099.pdf