PHÂN TÍCH ĐỘ PHỨC TẠP
CÁC GIẢI THUẬT ĐỒ THỊ
1
CHƯƠNG 4
Nội dung
Định nghĩa đồ thị
Các giải thuật duyệt đồ thị
Giải thuật trên đồ thị có trọng số
Giải thuật trên đồ thị có hướng
2
Định nghĩa đồ thị
3
Phân loại đồ thị
4
Biểu diễn đồ thị trên máy tính
5
Biểu diễn đồ thị trên máy tính
6
Biểu diễn đồ thị trên máy tính
7
Biểu diễn đồ thị trên máy tính
8
Biểu diễn đồ thị trên máy tính
9
Biểu diễn đồ thị trên máy tính
10
Biểu diễn đồ thị trên máy tính
11
Biểu diễn đồ thị trên máy tính
12
Biểu diễn đồ thị trên máy tính
13
Biểu diễn đồ thị trên máy tính
14
Các giải thuật duyệt đồ thị
Tìm kiếm theo chiều rộng
Tìm kiếm theo chiều sâu
Tìm cây bao trùm nhỏ nhất
Tìm đường đi ngắn nhất
15
Nội dung bài toán tìm kiếm
Cho đồ thị G=(V,E) và một đỉnh s. Xuất phát từ
đỉnh s, hãy duyệt qua tất cả các đỉnh của đồ thị
Kí hiệu:
V(G)=tập các đỉnh của G, E(G)=tập các cạnh của
G.
Hàm Color(u) chỉ trạng thái các đỉnh trong quá
trình tìm kiếm. Color(u) nhận một trong 3 giá trị
: WHITE, GRAY, BLACK. Lúc đầu,
Color(u)=WHITE nghĩa là chưa được xét, với
những đỉnh u bắt đầu xét, Color(u)=GRAY, khi
u đã xét xong Color(u)=BLACK
Tìm kiếm theo chiều rộng
Ý tưởng thuật toán
Bắt đầu tìm kiếm từ đỉnh s cho trước tuỳ ý
Tại thời điểm đã tìm thấy u, thuật toán tiếp tục
tìm kiếm tập tất cả các đỉnh kề với u
Thực hiện quá trình này cho các đỉnh còn lại
17
Tìm kiếm theo chiều rộng
Ý tưởng thuật toán
Dùng một hàng đợi để duy trì trật tự tìm kiếm
theo chiều rộng
Dùng các màu để không lặp lại các đỉnh tìm kiếm
Dùng một mảng để xác định đường đi ngắn nhất
từ s đến các đỉnh đã được tìm kiếm
Dùng một mảng để lưu trữ đỉnh đi trước của đỉnh
được tìm kiếm
18
Tìm kiếm theo chiều rộng
19
Procedure BFS(G,s)
1. for each u ∈V[G] do
2. color[u]:= WHITE;Prev(u)=Null;
color[s]:=GRAY;
3. Q:= {s}
4. While Q # ∅ do
5. u:= Head(Q); /*lấy u là phần tử đứng đầu
hàng đợi để xét*/
6. For each v ∈ Adj(u)
7. if color(v)= WHITE then
8. color(v):=GRAY; Prev(v):= u;
9. ENQUEUE(Q,v);/*đặt v vào cuối hàng đợi*/
10. DeQueue(Q,u);/* Gỡ u khỏi hàng đợi */
11. Color(u):= BLACK;
Ví dụ:
BFS(A)
A
D
C
B
E
F
Queue v
Adj(v)∩
Trắng
Đỉnh trắng Đỉnh
đen
A A B,C,D,E B,C,D,E,F A
B,C,D,E B F B
C,D,E C F F C
D,E,F D D
E,F E E
F F F
Rỗng
Tìm kiếm theo chiều rộng
Q=B,C,D
,E
A
D
C
B
E
F
A
D
C
B
E
F
Ví dụ:
BFS(A)
Q=C,D,E
A
D
C
B
E
F
Q=E,F
A
D
C
B
E
F
A
D
C
B
E
F
Q=D,E,F
Q=F
A
D
C
B
E
F
A
D
C
B
E
F
Q=Rỗng
Tìm kiếm theo chiều rộng
![]()
Phân tích thuật toán BFS
Tổng phí khởi tạo là O(V)
Mỗi thao tác trên hàng đợi là O(1), vì vậy tổng
thời gian cho thao tác trên hàng đợi là O(V)
Tổng thời gian chi phí cho quét các danh sách kề
là O(E)
Tổng thời gian chạy của BFS là O(V+E)
24
Tìm kiếm ưu tiên chiều sâu
Ý tưởng thuật toán
Bắt đầu tìm kiếm từ một đỉnh u nào đó
Chọn đỉnh kề v tùy ý của u để tiếp tục quá trình tìm
kiếm và lặp lại quá trình tìm kiếm này đối với v
Dùng các màu để không lặp lại các đỉnh tìm kiếm
Dùng các biến thời gian để xác định các thời điểm
phát hiện và hoàn thành tìm kiếm của một đỉnh
Dùng một mảng để lưu trữ đỉnh đi trước của đỉnh
được tìm kiếm