You are on page 1of 40

Thuật toán và cấu trúc dữ liệu

Chương 10: Đồ thị

Giảng viên: Lê Thị Hoàng Anh


Email: anhlth@nuce.edu.vn
1
Đồ thị
• Đồ thị là một cấu trúc rời rạc được tạo
thành từ tập hợp các đỉnh và được nối với
nhau bởi các cạnh.
• Ký hiệu G=(V,E) trong đó
– V={v1,v2,…vn} là tập hợp các đỉnh(nút).
– E={e1,e2,…,em} là tập hợp các cạnh nối hai
đỉnh nào đó với nhau.
• Tùy theo từng ứng dụng mà các cạnh có
thể có hướng hoặc vô hướng.
2
Đồ thị
• Ví dụ:

3
Đồ thị

• Ví dụ:

4
Nội dung

1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
4. Các chiến lược cài đặt đồ thị
5. Duyệt đồ thị

GV: Lê Thị Hoàng Anh 5


Đồ thị vô hướng

6
Đồ thị vô hướng
• Ví dụ:

a. Đơn đồ thị b. Đa đồ thị c. Đa đồ thị


vô hướng vô hướng vô hướng

7
Nội dung

1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
4. Các chiến lược cài đặt đồ thị
5. Duyệt đồ thị

GV: Lê Thị Hoàng Anh 8


Đồ thị có hướng

9
Đồ thị có hướng
• Ví dụ:

10
Nội dung

1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
4. Các chiến lược cài đặt đồ thị
5. Duyệt đồ thị

GV: Lê Thị Hoàng Anh 11


Đồ thị có trọng số
• Đồ thị có trọng số (weighted graph) hay
còn gọi là network:
– Là một đồ thị với trọng số được gắn vào mỗi
cạnh.
– Trọng số của đường đi trên đồ thị có trọng số
là tổng trọng số của các cạnh trên đường đi.
– Đồ thị có trọng số có thể là đồ thị có hướng
hoặc vô hướng.
– Ứng dụng của đồ thị có trọng số như là tìm
đường đi ngắn nhất…
12
Đồ thị có trọng số
• Ví dụ: Đồ thị có trọng số là khoảng cách
đường đi giữa các thành phố

13
Nội dung

1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
4. Các chiến lược cài đặt đồ thị
5. Duyệt đồ thị

GV: Lê Thị Hoàng Anh 14


Chiến lược cài đặt đồ thị
• Tại sao phải biểu diễn đồ thị trên máy tính?
– Lý thuyết đồ thị ngày càng được ứng dụng
rộng rãi.
– Để xây dựng được các ứng dụng của đồ thị
trên máy tính thì cần phải biểu diễn được đồ
thị trên máy tính một cách thích hợp.
– Máy tính không thể hiểu được đồ thị bằng các
hình vẽ thông thường.

15
Chiến lược cài đặt đồ thị
• Tiêu chuẩn để lựa chọn cách thức biểu
diễn đồ thị trên máy tính:
– Cấu trúc dữ liệu phải đơn giản, phù hợp với
từng bài toán ứng dụng.
– Dễ biểu diễn, dễ cài đặt các ứng dụng trên đó
– Sử dụng bộ nhớ tối ưu.
• Hai phương pháp biểu diễn:
– Ma trận kề
– Danh sách kề

16
Chiến lược cài đặt đồ thị
• Ma trận kề:
– Cho đồ thị G=(V,E), với V= {v1,v2,…vn}. Ma
trận kề biểu diễn G là một ma trận vuông A,
kích thước n*n được xác định như sau:

17
Chiến lược cài đặt đồ thị
• Ma trận kề:
– Ví dụ:

18
Chiến lược cài đặt đồ thị

19
Chiến lược cài đặt đồ thị

20
Chiến lược cài đặt đồ thị
• Danh sách kề:
– Cho đồ thị G=(V,E) có n đỉnh. Đồ thị G có thể
được biểu diễn bằng n danh sách liên kết.
Mỗi danh sách liên kết thứ i sẽ biểu diễn các
đỉnh kề với đỉnh vi

21
Chiến lược cài đặt đồ thị
• Ưu điểm của danh sách kề:
– Việc duyệt qua đỉnh kề với một đỉnh v cho
trước rất đơn giản, chỉ cần duyệt một danh
sách.
– Việc duyệt qua các cạnh cũng đơn giản vì
một cạnh là nối giữa đỉnh với đỉnh khác kề nó.
• Nhược điểm của danh sách kề
– Để kiểm tra một cạnh nối hai đỉnh (u,v) hay
không ta phải tốn thời gian duyệt toàn bộ
danh sách của đỉnh u hay đỉnh v.
22
Nội dung

1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
4. Các chiến lược cài đặt đồ thị
5. Duyệt đồ thị

GV: Lê Thị Hoàng Anh 23


Duyệt đồ thị
• Duyệt đồ thị là việc duyệt qua tất cả các
đỉnh của đồ thị theo một cách có hệ thống.
Có hai phương pháp phổ biến:
– Duyệt theo chiều sâu:
• Tương tự như phương pháp duyệt theo tiền tố của
một cây
– Duyệt theo chiều rộng:
• Tương tự như phép duyệt cây theo mức

24
Duyệt đồ thị
• Duyệt theo chiều sâu (Depth first search-
DFS)
– Trong giải thuật sử dụng một stack để ghi nhớ
đỉnh liền kề để bắt đầu việc tìm kiếm khi
không gặp được đỉnh liền kề nào trong lúc
duyệt (gặp điểm chết/ngõ cụt) trong vòng lặp.

25
Duyệt đồ thị
• Ý tưởng thuật toán duyệt theo chiều sâu:
– Quy tắc 1: Duyệt tiếp tới đỉnh liền kề mà chưa
được duyệt. Đánh dấu đỉnh đã được duyệt.
Hiển thị đỉnh đó và đẩy vào trong một ngăn
xếp (stack).
– QT2: Nếu không tìm thấy đỉnh liền kề nào với
đỉnh đang duyệt, thì ta lấy ra một đỉnh trong
ngăn xếp và tiếp tục duyệt tới đỉnh liền kề với
đỉnh mà ta vừa lấy ra.
– QT3: Lặp lại QT1,QT2 cho đến khi ngăn xếp
rỗng.
26
Duyệt đồ thị
• Ví dụ minh họa duyệt theo chiều sâu:

27
Duyệt đồ thị

28
Duyệt đồ thị

29
Duyệt đồ thị

• Vì đỉnh C không có đỉnh kề nào mà chưa được


duyệt ta lấy C ra khỏi stack.
• Tương tự với đỉnh D, rồi đến đỉnh A và tiếp đến
đỉnh S.
• Thuật toán dừng khi stack rỗng.
• Thứ tự đã duyệt: S,A,D,B,C 30
Duyệt đồ thị
• Code thuật toán DFS

31
Duyệt đồ thị
• Duyệt theo chiều rộng (Breadth First
Search - BFS)
– Trong giải thuật sử dụng một queue để ghi
nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi
không gặp được đỉnh liền kề nào trong lúc
duyệt (gặp điểm chết/ngõ cụt) trong vòng lặp.

32
Duyệt đồ thị

• Ý tưởng thuật toán duyệt theo chiều rộng:


– QT1: Duyệt tiếp tới các đỉnh liền kề mà chưa
được duyệt. Đánh dấu đỉnh đã được duyệt.
Hiển thị đỉnh đó và đẩy vào trong hàng đợi
(queue).
– QT2: Nếu không tìm thấy đỉnh liền kề nào với
đỉnh đang xét thì lấy ra đỉnh đầu tiên khỏi
hàng đợi và tiếp tục duyệt tới các đỉnh liền kề
với đỉnh mà ta vừa lấy ra.
– QT3: Lặp lại QT1,QT2 cho đến khi hàng đợi
rỗng.
33
Duyệt đồ thị
• Ví dụ minh họa duyệt theo chiều rộng

34
Duyệt đồ thị

35
Duyệt đồ thị

36
Duyệt đồ thị

• Vì đỉnh B không có đỉnh kề nào mà chưa


được duyệt ta lấy B ra khỏi queue.
• Tương tự với đỉnh C, rồi đến đỉnh D.
• Thuật toán dừng khi queue rỗng.
• Thứ tự đã duyệt: S,A,B,C,D
37
Duyệt đồ thị
• Code thuật toán BFS

38
Duyệt đồ thị
• Kết quả

39
GV: Lê Thị Hoàng Anh 40

You might also like