Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 Lý thuyết đồ thị, cung cấp cho người học những kiến thức như: giới thiệu đồ thị; biểu diễn đồ thị; thuật toán duyệt đồ thị; bài toán tìm đường ngắn nhất. Mời các bạn cùng tham khảo!
Trang 3GIỚ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 quát 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…
Trang 5GIỚ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
Trang 6BIỂ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
Trang 7BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
Trang 8BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
7 2
Trang 9BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
7 2
Trang 10BIỂ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
Trang 11BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
Trang 12THUẬT TOÁ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
Xuất phát từ đỉnh A
Trang 13THUẬT TOÁ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
D
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B, D
Trang 14THUẬT TOÁ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
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B, D
B3: Xuất phát từ đỉnh BB4: Đi qua đỉnh C
D
Trang 15THUẬT TOÁ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
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B, D
B3: Xuất phát từ đỉnh BB4: Đi qua đỉnh C
B5: Xuất phát từ đỉnh D
D
Trang 16THUẬT TOÁ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
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 B6: Đi qua đỉnh E
Dừng thuật toán
Trang 17THUẬ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
Trang 18THUẬ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)
Trang 19THUẬ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ố…)
Trang 20THUẬ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
Xuất phát từ đỉnh A
Trang 21THUẬ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
B2: Đi qua đỉnh B
Trang 22THUẬ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
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B
B3: Đi qua đỉnh C
Trang 23THUẬ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
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B
B3: Đi qua đỉnh CB4: Đi qua E
E
Trang 24THUẬ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
B1: Xuất phát từ đỉnh AB2: Đi qua đỉnh B
B3: Đi qua đỉnh CB4: Đi qua E
B5: Đi qua D
Trang 25THUẬ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 Tvisit(w)
Trang 26THUẬT TOÁN DUYỆT ĐỒ THỊ
2 DUYỆT THEO CHIỀU SÂU
Độ phức tạp không gian
Độ phức tạp không gian của DFS thấp hơn BFS
Độ phức tạp thời gian
Tỉ lệ thuận với số đỉnh và số cạnh trong đồ thị đã được duyệt Độ
phức tạp thời gian là O(|V| + |E|)
Tính đầy đủ
DFS 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ố…)
Trang 27THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
1 CÂY KHUNG TỐI THIỂU
Giới thiệu cây khung tối thiểu
• Cây khung của đồ thị G là cây kết nối tất cả các đỉnh
• Cây khung tối thiểu là cây có tổng trọng số của các cạnh nhỏ nhất
Trang 28THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2 THUẬT TOÁN PRIM
B1: Xuất phát đỉnh T: {A}
Trang 29THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2 THUẬT TOÁN PRIM
Trang 30THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2 THUẬT TOÁN PRIM
B1: Xuất phát đỉnh T:= {A}
B2: chọn đỉnh B vì có trọng số nhỏ
trong những đỉnh kề với AB3: Từ tập {A, B} xét các đỉnh kềVới chúng {C, D}, chọn đỉnh C
3
Trang 31THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2 THUẬT TOÁN PRIM
B1: Xuất phát đỉnh T: = {A}
B2: chọn đỉnh B vì có trọng số nhỏ
trong những đỉnh kề với AB3: Từ tập {A, B} xét các đỉnh kềVới chúng {C, D}, chọn đỉnh CB4: Chọn D
Trang 32THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2 THUẬT TOÁN PRIM
GIẢI THUẬT : PRIM
procedure Prim(G: đồ thị gồm các đỉnh v1, v2, …, vn)
T := {v1}
for i := 0 to n – 2 do
e := chọn cạnh có trọng số nhỏ nhất nối tớiđỉnh trong T và không tạo chu trình trong T
T := T U e
return T
Trang 33THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
3 THUẬT TOÁN KRUSKAL
B1: Chọn cạnh có trọng số nhỏ nhất
CD = 2 và thêm vào T := {(C, D)}
Trang 34THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
3 THUẬT TOÁN KRUSKAL
Trang 35THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
3 THUẬT TOÁN KRUSKAL
Trang 36THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
3 THUẬT TOÁN KRUSKAL
THUẬT TOÁN : KRUSKAL
procedure Kruskal(G: đồ thị gồm các đỉnh v1, v2, …, vn)
T := ∅
for i := 1 to n – 1 do
e := chọn bất kỳ cạnh trong G có trọng số nhỏnhất nhưng không tạo chu trình trong T
T := T U e
return T
Trang 37THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
• Tìm đường đi ngắn nhất giữa 2 đỉnh trong một đồ thị
• Chỉ thực hiện trên trọng số dương
• Áp dụng cho đồ thị vô hướng và có hướng
Trang 38THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
Trang 39THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
Trang 40THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
d(f) = min d f , d a + w a, f =min ∞, 0 + 2 = 2
d(c) = ∞d(e) = ∞
Trang 41THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
Trang 42THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
d(e) = min(5, d(b)+w(b, e)) =min(5, 4 + 3) = 5
Trang 43THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
d(c) = 7d(e) = 5d(d) = min ∞, 𝑑 𝑒 + 𝑤 𝑒, 𝑑 =min ∞, 5 + 1 = 6
Trang 44THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
d(c) = min(7, d(d) + w(d, c))=min(7, 6 + 2) = 7
d(e) = 5 (đã đi qua)
Trang 45THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
Trang 46THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
e
c b
Trang 47THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
4 THUẬT TOÁN DIJKSTRA
THUẬT TOÁN DIJKSTRA
Trang 493 2
2
4
5
1 3
2