GIỚI THIỆU
• Đồ thị là một cấu trúc dữ liệu trừu tượng dựa trên các khái niệm
toán học về đồ thị.
• Đồ thị được xem là tổng qt hóa của cấu trúc cây. Tuy nhiên,
đồ thị có mối quan hệ phức tạp hơn là quan hệ cha-con trong
cấu trúc cây.
• Đồ thị được sử dụng trong nhiều ứng dụng như cây gia phả,
mạng quản lý chuyến bay v.v…
KHOA CÔNG NGHỆ THÔNG TIN
3
GIỚI THIỆU
• Một đồ thị G là một tập hợp khơng có thứ tự (V, E), trong đó
V : là các đỉnh của đồ thị
E : là các cạnh (cung) biểu diễn mối quan hệ giữa các đỉnh
A
D
B
E
KHOA CÔNG NGHỆ THÔNG TIN
C
V(G) = {A, B, C, D, E}
E(G) = {(A, B), (A, D), (B, C}, (B, D),
(C, E), (D, E)}
4
GIỚI THIỆU
• Một đồ thị G có thể có hướng hoặc vơ hướng.
• Nếu đồ thị có hướng thì cạnh nối hai đỉnh có mũi tên đại diện
cho hướng nối.
Đồ thị có hướng
Đồ thị vơ hướng
A
D
B
E
KHOA CƠNG NGHỆ THƠNG TIN
C
A
D
B
C
E
5
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
1. SỬ DỤNG MA TRẬN KỀ
• Hai đỉnh kề nhau nếu có cạnh nối giữa chúng
• Ta dùng một ma trận với dịng, cột biểu diễn cho các đỉnh của
đồ thị.
• Biểu diễn cạnh trên ma trận kề
1
Nếu đỉnh i kề đỉnh j
0
Ngược lại
𝑎𝑖𝑗 =
KHOA CÔNG NGHỆ THÔNG TIN
6
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
1. SỬ DỤNG MA TRẬN KỀ
A
B
D
C
E
A
B
D
A
B
C
D
E
A
0
1
0
1
0
B
1
0
1
1
C
0
1
0
D
1
1
E
0
0
C
E
A
B
C
D
E
A
0
1
0
1
0
0
B
0
0
0
1
0
0
1
C
0
1
0
0
0
0
0
1
D
0
0
0
0
1
1
1
0
E
0
0
1
0
0
KHOA CÔNG NGHỆ THÔNG TIN
7
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
1. SỬ DỤNG MA TRẬN KỀ
Đồ thị có trọng số là đồ thị
mà có gán dữ liệu trên mỗi
cạnh.
4
A
5
C
2
7
1
D
Biểu diễn đồ thị có trọng số
KHOA CÔNG NGHỆ THÔNG TIN
B
E
3
A
B
C
D
E
A
0
4
0
2
0
B
0
0
0
7
0
C
0
5
0
0
0
D
0
0
0
0
3
E
0
0
1
0
0
8
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
1. SỬ DỤNG MA TRẬN KỀ
• Đối với đồ thị đơn (khơng có vịng),
ma trận kề có đường chéo chính
mang giá trị 0
4
A
5
B
C
2
7
1
• Ma trận kề đồ thị vơ hướng thì đối
xứng
• Bộ nhớ của ma trận kề là O(n2), n là
số đỉnh của đồ thị.
KHOA CÔNG NGHỆ THÔNG TIN
D
E
3
A
B
C
D
E
A
0
4
0
2
0
B
0
0
0
7
0
C
0
5
0
0
0
D
0
0
0
0
3
E
0
0
1
0
0
9
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
2. SỬ DỤNG DANH SÁCH KỀ
• Danh sách kề gồm các đỉnh của đồ thị V(G).
• Mỗi đỉnh vi là một danh sách liên kết lưu trữ những đỉnh vj , vj+1,
… nối tới vi
• Thường dùng để lưu đồ thị nhỏ và vừa.
• Biểu diễn đồ thị thưa (có ít cạnh nối) trong bộ nhớ máy tính.
KHOA CƠNG NGHỆ THƠNG TIN
10
BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
2. SỬ DỤNG DANH SÁCH KỀ
• Danh sách kề biểu diễn đồ thị vơ hướng.
A
D
B
E
KHOA CÔNG NGHỆ THÔNG TIN
A
B
D
NULL
B
A
C
NULL
C
B
E
NULL
D
A
B
NULL
E
C
D
NULL
C
11
THUẬT TỐN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
• Duyệt theo chiều rộng (Breadth-First Search) đồ thị vô hướng.
A
D
B
C
Xuất phát từ đỉnh A
E
KHOA CÔNG NGHỆ THÔNG TIN
12
THUẬT TỐN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
• Duyệt theo chiều rộng (Breadth-First Search) đồ thị vô hướng.
A
B
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B, D
D
KHOA CÔNG NGHỆ THÔNG TIN
13
THUẬT TỐN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
• Duyệt theo chiều rộng (Breadth-First Search) đồ thị vơ hướng.
A
B
D
KHOA CƠNG NGHỆ THÔNG TIN
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B, D
B3: Xuất phát từ đỉnh B
B4: Đi qua đỉnh C
14
THUẬT TỐN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
• Duyệt theo chiều rộng (Breadth-First Search) đồ thị vơ hướng.
A
B
D
KHOA CƠNG NGHỆ THÔNG TIN
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B, D
B3: Xuất phát từ đỉnh B
B4: Đi qua đỉnh C
B5: Xuất phát từ đỉnh D
15
THUẬT TỐN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
• Duyệt theo chiều rộng (Breadth-First Search) đồ thị vô hướng.
A
B
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B, D
B3: Xuất phát từ đỉnh B
D
E
B4: Đi qua đỉnh C
B5: Xuất phát từ đỉnh D
B6: Đi qua đỉnh E
Dừng thuật tốn
KHOA CƠNG NGHỆ THÔNG TIN
16
THUẬT TOÁN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
GIẢI THUẬT : Duyệt theo chiều rộng (BFS)
procedure BFS(G: đồ thị với các đỉnh v1, v2, …, vn)
T := cây chỉ chứa một đỉnh ban đầu v1
L := danh sách rỗng dùng để chứa các đỉnh đã đi qua
Đặt đỉnh v1 vào danh sách L
while L không rỗng
remove đỉnh v1 từ L
for mỗi đỉnh kề w với đỉnh v1 do
if w không có trong L and khơng có trong T then
add w vào L
add w and cạnh {v1, w} vào T
KHOA CÔNG NGHỆ THÔNG TIN
17
THUẬT TOÁN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
Độ phức tạp khơng gian
• Tất cả các đỉnh tại mức đang xét sẽ được lưu cho đến khi các
đỉnh kề được đi qua.
• Độ phức tạp khơng gian tỉ lệ thuận với số đỉnh ở mức sâu nhất
của đồ thị.
• Cho đồ thị có b là số đỉnh kề của mỗi đỉnh và chiều sâu d. Độ
phức tạp không gian là số đỉnh ở mức sâu nhất O(bd).
KHOA CÔNG NGHỆ THÔNG TIN
18
THUẬT TOÁN DUYỆT ĐỒ THỊ
1. DUYỆT THEO CHIỀU RỘNG
Độ phức tạp thời gian
Trường hợp xấu nhất, BFS phải duyệt tất cả đường đi tới các
đỉnh. Độ phức tạp thời gian xấp xỉ O(bd)
Tính đầy đủ
BFS có tính đầy đủ vì nó sẽ tìm tất cả các đỉnh khơng phân biệt
loại đồ thị (vơ hướng, có hướng, có trọng số…).
KHOA CƠNG NGHỆ THÔNG TIN
19
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
Duyệt theo chiều sâu (Depth-First Search) đồ thị vô hướng.
A
D
B
C
Xuất phát từ đỉnh A
E
KHOA CÔNG NGHỆ THÔNG TIN
20
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
Duyệt theo chiều sâu (Depth-First Search) đồ thị vô hướng.
A
B
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B
KHOA CÔNG NGHỆ THÔNG TIN
21
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
Duyệt theo chiều sâu (Depth-First Search) đồ thị vô hướng.
A
B
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B
B3: Đi qua đỉnh C
KHOA CÔNG NGHỆ THÔNG TIN
22
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
Duyệt theo chiều sâu (Depth-First Search) đồ thị vô hướng.
A
B
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B
B3: Đi qua đỉnh C
E
KHOA CÔNG NGHỆ THÔNG TIN
B4: Đi qua E
23
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
Duyệt theo chiều sâu (Depth-First Search) đồ thị vô hướng.
A
B
C
B1: Xuất phát từ đỉnh A
B2: Đi qua đỉnh B
B3: Đi qua đỉnh C
D
E
B4: Đi qua E
B5: Đi qua D
KHOA CÔNG NGHỆ THÔNG TIN
24
THUẬT TOÁN DUYỆT ĐỒ THỊ
2. DUYỆT THEO CHIỀU SÂU
THUẬT TOÁN : Duyệt theo chiều sâu (DFS)
procedure DFS(G: đồ thị với các đỉnh v1, v2, …, vn)
T := cây chứa một đỉnh ban đầu v1
visit(v1)
procedure visit(v: đỉnh của G)
for mỗi đỉnh w kề v và không trong T do
add đỉnh w và cạnh {v, w} vào T
visit(w)
KHOA CÔNG NGHỆ THÔNG TIN
25