Tải bản đầy đủ (.pdf) (51 trang)

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 6 Graph

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.11 MB, 51 trang )

Chương 6
Đồ thị


Nội dung chính
 Định nghĩa.

 Các khái niệm.
 Biểu diễn đồ thị trên máy tính.
 Các thuật toán tìm kiếm trên đồ thị
 Bài toán tìm đường đi ngắnnhất trên đồ thị.
 Duyệt đồ thị.


Định nghĩa
 G=< V, E>
V là tập các đỉnh ( vertices)
E là tập các cạnh ( Edges) - tập các cặp
(u,v) mà u,v là hai đỉnh thuộc V.


Biểu diễn đồ thị


Biểu diễn đồ thị
 Danh sách kề.

 Ma trận kề.
 Ma trận trọng số.
 Ma trận liên thuộc.



1. Biểu diễn đồ thị
1.1 Danh sách liền kề
- Danh sách liền kề là một cách biểu diễn đồ thị không có
cạnh bội bằng cách liệt kê tất cả các đỉnh nối với mỗi
đỉnh của đồ thị


1. Biểu diễn đồ thị
1.1 Danh sách liền kề
Ví dụ: Danh sách liền kề của đồ thị vô hướng G
Đỉnh

Đỉnh liền kề

1

3,2

2

1,3,5

3

1,2,4

4

3,5,6


5

2,4,6

6

4,5


1. Biểu diễn đồ thị
1.1 Danh sách liền kề
Ví dụ: Danh sách liền kề của đồ thị có hướng G1
Đỉnh đầu

Đỉnh cuối

1

2,3

2
3

2

4

3


5

4,6

6

5


1. Biểu diễn đồ thị
1.2 Ma trận liền kề
Xét đơn đồ thị vô hướng G=(V,E), với tập đỉnh
V={v1, v2, ...,vn } và tập cạnh E = {e1, e2, ..., em }.
Ma trận liền kề AG của đồ thị G là ma trận 0-1
vuông cấp nxn.
AG = (aij), trong đó:
aij =

1, nếu (vi,vj) là một cạnh của G

0,nếu không có cạnh nối đỉnh vi với vj


1. Biểu diễn đồ thị
1.2 Ma trận liền kề
Ví dụ: Ma trận liền kề của đơn đồ thị vô hướng G
3

1


5

1

6

2

4

2

3

4

5 6

1

0 1

1 0

1

0

2


1 0

1 1

0

0

3

1 1

0 0

1

0

4

0 1

0 0

1

1

5


1 0

1 1

0

1

6

0 0

0 1

1

0

1- Dòng, cột đối xứng qua đường chéo
2- Tổng giá trị trên một dòng (cột) bằng số bậc của đỉnh i.


1. Biểu diễn đồ thị
1.2 Ma trận liền kề
Ví dụ: Ma trận liền kề của đa đồ thị vô hướng G
3

1

5


1

6

2

4

2

3

4

5 6

1

0 1

1 0

0

0

2

1 0


2 2

0

0

3

1 2

0 0

1

0

4

0 2

0 0

1

1

5

0 0


1 1

0

3

6

0 0

0 1

3

0

aij = k - tổng số cạnh nối hai đỉnh


1. Biểu diễn đồ thị
1.2 Ma trận liền kề
Ví dụ: Ma trận liền kề của đơn đồ thị có hướng G*
1

2

3

4


5

1

0

1

1

0

0

2

0

0

0

1

1

3

0


0

0

1

0

4

0

0

0

0

0

5

1

0

0

0


0

2

1

3

4

5

Ma trận liền kề của đơn đồ thị có hướng G không có dòng, cột đối xứng


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
 Bài toán: đi từ điểm A đến địa điểm B trong thành phố:


Chọn đường đi ngắn nhất (xét đến độ dài).



Chọn đường đi nhanh nhất (xét đến thời gian)



Chọn đường đi có chi phí thấp nhất, v.v...


 Mỗi cạnh được gán một giá trị số thực dương  đồ thị
có trọng số.

 Có thể xem đồ thị G bất kỳ là đồ thị có trọng số mà tất cả
các cạnh có trọng số bằng 1.


1. Biểu diễn đồ thị
1.2 Ma trận trọng số


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
Đồ thị G = (V,E) gọi là đồ thị có trọng số: Mỗi cạnh (hay
cung) e được gán với một số thực w(e), gọi là trọng số của
e (hay chiều dài, trọng lượng của cạnh e).
v2

6

v4

5

3
v1

6


v6

8

7

9
v3

3

v5


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
- Mỗi đường đi m(u,v) từ đỉnh u đến đỉnh v, có trọng số
bằng tổng trọng số các cạnh mà nó đi qua.
- Khoảng cách d(u,v) giữa hai đỉnh u và v là đường đi
có trọng số nhỏ nhất trong các đường đi từ u đến v.

d(u,v)=min(m(u,v))


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
Ma trận trọng số D= d(ij) , xác định như sau:

0, khi đỉnh trùng


dij =

w(i,j), trọng số của cạnh nối giữa hai đỉnh

, nếu

không có cạnh nối giữa hai đỉnh


1. Biểu diễn đồ thị
1.3 Ma trận trọng số
Ví dụ: Vẽ ma trận trọng số biểu diễn đồ thị vô hướng G
v2

6

v1 v2 v3 v4 v5 v6

v4
5

3
v1

6

v6

8


7

9
v3

3

v5

v1

0 3

7  



v2

3 0

6 6





v3

7 6


0  3



v4

 6

 0

8

5

v5

 

3 8

0

9

v6

 

 5


9

0


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
Ví dụ:
Lập ma trận
trọng số
biểu diễn
đồ thị
có hướng G


1. Biểu diễn đồ thị
1.2 Ma trận trọng số
Ví dụ:
0




D  







5
0
26

70



31
27
0





40

8
0





73
49

0

23
10



25
16

0



 
38 


9

12 
0 


1. Biểu diễn đồ thị
1.3 Ma trận liên thuộc
Ma trận liên thuộc biểu diễn quan hệ giữa cạnh liên thuộc
và đỉnh kề.
Ma trận M=

mij =


(mij), xác định như sau:
1 nếu cạnh ej nối với đỉnh vi
0 nếu cạnh ej không nối với đỉnh vi


1. Biểu diễn đồ thị
1.3 Ma trận liên thuộc
Ví dụ: Xây dựng ma trận liên thuộc cho đồ thị G dưới đây
e1 e2
v1
v2
v3
v4
v5

e3

e4 e5 e6


2. Bài toán đường đi ngắn nhất
2.1 Giới thiệu bài toán
Cho đơn đồ thị liên thông, có trọng số dương G=(V,E).
Bài toán 1:
Tìm đường đi ngắn nhất từ một đỉnh u đến mỗi đỉnh v
của đồ thị G.
Bài toán 2:
Tìm đường đi ngắn nhất giữa mỗi cặp đỉnh của đồ thị G.
B


1
A

5

D

Z

2

8

1

6

2

3
C

10

E


2. Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
- Tìm đường đi ngắn nhất từ đỉnh u đến mỗi đỉnh v của G

- Nhà toán học người Hà Lan E. Dijkstra (1959).
- Thuật toán thực hiện theo cách gán nhãn tại mỗi đỉnh.
Thuật ngữ:
w(x,y) : trọng số dương của cạnh (x,y);
w(x,y) là  (vô cùng lớn) nếu hai đỉnh không kề nhau.
d(v) : độ dài đường đi từ đỉnh xuất phát tới đỉnh v.
p(v) : đỉnh đứng ngay trước đỉnh v trên đường đi từ đỉnh
xuất phát đến đỉnh v.
Nhãn của đỉnh v : gồm cặp (d(v), p(v))
T : Tập các nút mà đường đi ngắn nhất đã được xác định.


2. Bài toán đường đi ngắn nhất
2.2 Thuật toán Dijkstra
Gán T = ø; p(v) = NULL với mọi đỉnh v
d(a)=0; /* a là đỉnh xuất phát
Với mỗi đỉnh v còn lại thì d(v) = ∞;
Repeat
u =(uT | d(u) là bé nhất);
T = T ∪ {u};
for ((v là đỉnh kề của u) và vT)
if d(v) > d(u) + w(u,v) then
d(v) = d(u) + w(u,v)
p(v) = u

Until (T=V)


×