Chương VIII Cấu trúc Đồ thị - Giáo trình Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Dữ liệu: Một tập không rỗng các đỉnh chứa các phần tử có kiểu nhất định, một tập không rỗng các cung có thể biểu diễn các phần tử có kiểu nhất định Các thao tác cơ bản duyệt theo thứ tự giữa ta được biểu thức tiền tố. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Thông tin:
13 trang 4 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Chương VIII Cấu trúc Đồ thị - Giáo trình Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Dữ liệu: Một tập không rỗng các đỉnh chứa các phần tử có kiểu nhất định, một tập không rỗng các cung có thể biểu diễn các phần tử có kiểu nhất định Các thao tác cơ bản duyệt theo thứ tự giữa ta được biểu thức tiền tố. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

20 10 lượt tải Tải xuống
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 1
Đỗ Bích Dip - Khoa CNTT
Cutrúcd liuvàGiithut
Chương VIII: CutrúcĐồ th
ORD
DFW
SFO
LAX
8
0
2
1
7
4
1
8
4
3
12
33
3
3
7
Đỗ Bích Dip - Khoa CNTT
Chương VIII: Đồ th
z Ni dung
1. Các khái nimcơ bn
2. Biudin đồ th
1. Ma trnlâncn
2. Danh sách lân cn
3. Duyt đồ th
4. Bàitoápdng
1. Tìm cây khung cctiu
2. Tìm đường đingnnht
3. Bài toán bao đóng truyn ng
4. Bài toán spxếptôpô
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 2
Đỗ Bích Dip - Khoa CNTT
Đồ th
Mt đồ th G = (V, E) trong đó
z V: tpcácđỉnh (vertices)
z E: tp các cung (edges) nicácđỉnh trong V
Mt cung e = (u,v) là mtcp đỉnh
d:
a b
d
c
e
V= {a,b,c,d,e}
E=
{(a,b),(a,c),(a,d),
(b,e),(c,d),(c,e),
(d,e)}
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
Đồ th hướng Đồ th hướng
12
34
12
3
4
5
Trong mt cung, th t ca
các đỉnh quan trng
Cung (u,v) khác vi cung (v,u)
Trong mt cung, th t ca
các đỉnh không quan trng
Cung (u,v) cũng ging như cung (v,u
)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 3
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
z Bccamt đỉnh (Degree): Là s cung k vi đỉnh
Trong mt đồ th hướng, mt đỉnh th
z Bc trong (in-degree)
z Bc ngoài (out-degree)
d:
z Đỉnh 1 có bc3
z Đỉnh 1 có bc trong 1 và bc ngoài 2
12
34
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
z Đỉnh lân cn (Adjacent vertices)
Trong đồ th
z 1, 2 là lân cncanhau
z 1,3 là lân cncanhau
z ….
z Cung k (Incident edges)
Nếu cung (u,v) thì cung này cung k ca hai đỉnh u
v
12
34
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 4
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
z Đường đi
Dãy các đỉnh v
1
,v
2
,. . .v
k
tnti cung (v
i
, v
i+1
) trong đồ
th ( i = 1 .. k-1)
z Đường đi đơn
Đường đivicácđỉnh không lpli
z Chu trình
Đường đi đơnvi đỉnh đầuvàcui
trùng nhau
z Độ dài đường đi
S cung trên đường đi
z Đồ th con
12
34
Path : 1, 2, 4, 3, 1, 4
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
z Đồ th liên thông (Connected Graph)
12
3
4
5
12
34
Đồ th liên thông
12
3
12
3
4
5
Đồ th không liên thông
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 5
Đỗ Bích Dip - Khoa CNTT
Các khái nim liên quan
z Đồ th trng s (Weight Graph)
12
34
5
60
100100
110
140
Đỗ Bích Dip - Khoa CNTT
Kiud liutrutượng Đồ th
z D liu: Mttp không rng các đỉnh chacácphnt
kiunht định, mttp không rng các cung th
biudincácphnt kiunht định
z Các thao tác cơ bn
Graph create()
insertVertex( o)
insertEdge(u, v, o)
removeVertex(v)
removeEdge(e )
endVertices(e)
opposite(v, e)
areAdjacent(v, w)
adjacentVertices(v)
incidentEdges(v)
vertices()
edges()
numVertices()
numEdges()
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 6
Đỗ Bích Dip - Khoa CNTT
Mts tính chtca đồ th
1. Nếumt đồ th G có m cung thì tng bcca
các đỉnh trong G s 2m
2. Nếumt đồ th hướng m cung thì tng bc
trong cacácđỉnh , tng bc ngoài cacácđỉnh
đềulàm
3. Nếu đồ th G là đồ thịđơngin, G có n đỉnh
m cung thì
1. NếuG làđồ th hướng m n(n-1)/2
2. NếuG làđồ th hướng thì m n(n-1)
Đỗ Bích Dip - Khoa CNTT
Biudin đồ th
Biudinbng ma trnlâncn
z Đánh s các đỉnh trong tpV t 1 đếnn
z Ma trnbiudin đồ th A (n x n)
A
ij
= 1 nếu trong G tnti cung (i,j)
A
j
= 0 nếu trong G không tnti cung đó
z Vi đồ th hướng thì nếuA
ij
= 1 thì A
ji
= 1
z A đượcgilàma trnlâncncaG
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 7
Đỗ Bích Dip - Khoa CNTT
Biudin đồ th bng ma trnlâncn
z d
12
34
0110
0011
1000
1010
12
3
4
5
01001
10100
01011
00101
10110
Đỗ Bích Dip - Khoa CNTT
Biudin đồ th bng danh sách lân cn
Biudinbng danh sách lân cn
z Mi đỉnh trong đồ th sẽứng vimt danh sách móc nicha
các đỉnh lân cncanó
z Mi nút trong danh sách quy cách
VERTEX chagiátr tương ng vis th t ca đỉnh lân cn
LINK cha con tr tr ti nút tiếp theo trong danh sách
z Midanhsáchnhư vycómtnútđầudanhsách
z Các nút đầunàylàcácphnt camt vector V có kích
thướcn. Phnt V[i] ng vi danh sách lân cncanútth i
LINKVERTEX
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 8
Đỗ Bích Dip - Khoa CNTT
Biudin đồ th bng danh sách lân cn
z d
z 1: (2,4)
2: (4)
3: (1, 2)
4: (2, 3)
12
34
V[1]
V[2]
V[3]
V[4]
24
4
12
2
3
Đỗ Bích Dip - Khoa CNTT
Biudin đồ th bng danh sách lân cn
z 1: (2,3,5)
2: (1,3)
3: (1,2,4)
4: (3,5)
5: (1,4)
12
3
4
5
2 3 5
1
1
3
1
2
3
5
4
4
V[1]
V[2]
V[3]
V[4]
V[5]
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 9
Đỗ Bích Dip - Khoa CNTT
Phép duyt đồ th
z Cho mt đồ th G(V,E) và mt đỉnh v thucV. Duyt
đồ th thămmi đỉnh liên thông viv
2 phương pháp
z Phương pháp duyttheochiu sâu (Depth First Search)
z Phương pháp duyttheochiurng ( Breadth First Search)
Đỗ Bích Dip - Khoa CNTT
Duyt theo chiu sâu
Algorithm DFS(G, v)
Input đồ th G đỉnh bt đầu duyt v trong G
Output đánh du các cung trong G trong phn đồ th liênthôngvi đỉnh v
thành hai loi cung khám phá (discovery edges) và cung quay lui (back
edges)
setLabel(v, VISITED) // đỉnh v đã đượcthăm
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
DFS(G, w)
else
setLabel(e, BACK)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 10
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiu sâu
DB
A
C
E
D
B
A
C
E
D
B
A
C
E
Cung khám phá
Cung quay lui
A
Đỉnh đãthăm
A
Đỉnh chưathăm
Cung chưathăm
Bt đầuxutphátt A
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiu sâu
DB
A
C
E
DB
A
C
E
DB
A
C
E
D
B
A
C
E
Ttc các cung
k caD đãduyt
Xét tiếpcáccung
k ca đỉnh C
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 11
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiu sâu
z Duyt theo chiu sâu trên đồ th hướng
Đi theo chiuca các cung trên đồ th
A
B
D
C
E
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiurng
Algorithm BFS(G, s)
Q = mt queue rng
Q.enqueue(s)
setLabel(s, VISITED)
while not Q.isEmpty()
v = Q.dequeue()
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
setLabel(w, VISITED)
Q.enqueue(w)
else
setLabel(e, BACK)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 12
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiurng
C
B
A
E
D
Cung khám phá
Cung quay lui
A
Đỉnh đãthăm
A
Đỉnh chưathăm
Cung chưathăm
L
0
L
1
F
CB
A
E
D
L
0
L
1
F
CB
A
E
D
L
0
L
1
F
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiurng
CB
A
E
D
L
0
L
1
F
CB
A
E
D
L
0
L
1
F
L
2
CB
A
E
D
L
0
L
1
F
L
2
CB
A
E
D
L
0
L
1
F
L
2
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBK
HN 13
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiurng
CB
A
E
D
L
0
L
1
F
L
2
CB
A
E
D
L
0
L
1
F
L
2
CB
A
E
D
L
0
L
1
F
L
2
Đỗ Bích Dip - Khoa CNTT
Duyt đồ th theo chiu sâu
z Duyt đồ th theo chiurng trên đồ th hướng
A
B
D
C
E
| 1/13

Preview text:

Cấu trúc dữ liệu và Giải thuật
Cấu trúc dữ liệu và Giải thuật 1843 ORD SFO 3 802 37 174 LAX 1233 DFW
Chương VIII: Cấu trúc Đồ thị
Đỗ Bích Diệp - Khoa CNTT
Chương VIII: Đồ thị z Nội dung 1. Các khái niệm cơ bản 2. Biểu diễn đồ thị 1. Ma trận lân cận 2. Danh sách lân cận 3. Duyệt đồ thị 4. Bài toán áp dụng 1. Tìm cây khung cực tiểu 2.
Tìm đường đi ngắn nhất 3.
Bài toán bao đóng truyền ứng 4. Bài toán sắp xếp tô pô
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 1
Cấu trúc dữ liệu và Giải thuật Đồ thị
– Một đồ thị G = (V, E) trong đó
z V: tập các đỉnh (vertices)
z E: tập các cung (edges) nối các đỉnh trong V
– Một cung e = (u,v) là một cặp đỉnh – Ví dụ: a b V= {a,b,c,d,e} c E= {(a,b),(a,c),(a,d), (b,e),(c,d),(c,e), d e (d,e)}
Đỗ Bích Diệp - Khoa CNTT
Các khái niệm liên quan
– Đồ thị có hướng và Đồ thị vô hướng 1 2 1 2 5 3 4 3 4
Trong một cung, thứ tự của
Trong một cung, thứ tự của các đỉnh là quan trọng
các đỉnh là không quan trọng
Cung (u,v) khác với cung (v,u)
Cung (u,v) cũng giống như cung (v,u)
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 2
Cấu trúc dữ liệu và Giải thuật
Các khái niệm liên quan
z Bậc của một đỉnh (Degree): Là số cung kề với đỉnh
– Trong một đồ thị có hướng, một đỉnh có thể có z Bậc trong (in-degree) z Bậc ngoài (out-degree) – Ví dụ: z Đỉnh 1 có bậc 3
z Đỉnh 1 có bậc trong là 1 và bậc ngoài là 2 1 2 3 4
Đỗ Bích Diệp - Khoa CNTT
Các khái niệm liên quan
z Đỉnh lân cận (Adjacent vertices) 1 2 – Trong đồ thị
z 1, 2 là lân cận của nhau
z 1,3 là lân cận của nhau 3 4 z …. z Cung kề (Incident edges)
– Nếu có cung (u,v) thì cung này là cung kề của hai đỉnh u và v
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 3
Cấu trúc dữ liệu và Giải thuật
Các khái niệm liên quan z Đường đi
– Dãy các đỉnh v ,v ,. . .v mà tồn tại cung (v , v ) trong đồ 1 2 k i i+1 thị ( i = 1 .. k-1) 1 2 z Đường đi đơn
– Đường đi với các đỉnh không lặp lại z Chu trình 3 4
– Đường đi đơn với đỉnh đầu và cuối trùng nhau z Độ dài đường đi Path : 1, 2, 4, 3, 1, 4
– Số cung trên đường đi z Đồ thị con
Đỗ Bích Diệp - Khoa CNTT
Các khái niệm liên quan
z Đồ thị liên thông (Connected Graph) 1 2 1 2 5 3 4 3 4 5 Đồ thị liên thông 1 2 1 2 3 3 4
Đồ thị không liên thông
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 4
Cấu trúc dữ liệu và Giải thuật
Các khái niệm liên quan
z Đồ thị trọng số (Weight Graph) 5 60 1 2 140 100 100 3 4 110
Đỗ Bích Diệp - Khoa CNTT
Kiểu dữ liệu trừu tượng Đồ thị
z Dữ liệu: Một tập không rỗng các đỉnh chứa các phần tử
có kiểu nhất định, một tập không rỗng các cung có thể
biểu diễn các phần tử có kiểu nhất định z Các thao tác cơ bản – Graph create() – endVertices(e) – insertVertex( o) – opposite(v, e) – insertEdge(u, v, o) – areAdjacent(v, w) – removeVertex(v) – adjacentVertices(v) – removeEdge(e ) – incidentEdges(v) – vertices() – edges() – numVertices() – numEdges()
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 5
Cấu trúc dữ liệu và Giải thuật
Một số tính chất của đồ thị 1.
Nếu một đồ thị G có m cung thì tổng bậc của
các đỉnh trong G sẽ là 2m 2.
Nếu một đồ thị có hướng có m cung thì tổng bậc
trong của các đỉnh , tổng bậc ngoài của các đỉnh đều là m 3.
Nếu đồ thị G là đồ thị đơn giản, G có n đỉnh và m cung thì 1.
Nếu G là đồ thị vô hướng m ≤ n(n-1)/2 2.
Nếu G là đồ thị có hướng thì m ≤ n(n-1)
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn đồ thị
– Biểu diễn bằng ma trận lân cận
z Đánh số các đỉnh trong tập V từ 1 đến n
z Ma trận biểu diễn đồ thị A (n x n)
– A = 1 nếu trong G tồn tại cung (i,j) ij
– A = 0 nếu trong G không tồn tại cung đó ịj
z Với đồ thị vô hướng thì nếu A = 1 thì A = 1 ij ji
z A được gọi là ma trận lân cận của G
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 6
Cấu trúc dữ liệu và Giải thuật
Biểu diễn đồ thị bằng ma trận lân cận z Ví dụ ⎡0 1 0 1⎤ 1 2 ⎢ ⎥ ⎢0 0 0 ⎥ 1 ⎢1 1 0 0 ⎥ 3 4 ⎢ ⎥ ⎣0 1 1 0 ⎦ ⎡0 1 1 0 1⎤ ⎢ ⎥ 1 2 ⎢1 0 1 0 0⎥ ⎢1 1 0 1 0 ⎥ 5 ⎢ ⎥ ⎢0 0 1 0 ⎥ 1 3 4 ⎢1 0 0 1 0⎥ ⎣ ⎦
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn đồ thị bằng danh sách lân cận
– Biểu diễn bằng danh sách lân cận
z Mỗi đỉnh trong đồ thị sẽ ứng với một danh sách móc nối chứa
các đỉnh lân cận của nó
z Mỗi nút trong danh sách có quy cách VERTEX LINK
– VERTEX chứa giá trị tương ứng với số thứ tự của đỉnh lân cận
– LINK chứa con trỏ trỏ tới nút tiếp theo trong danh sách
z Mỗi danh sách như vậy có một nút đầu danh sách
z Các nút đầu này là các phần tử của một vector V có kích
thước n. Phần tử V[i] ứng với danh sách lân cận của nút thứ i
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 7
Cấu trúc dữ liệu và Giải thuật
Biểu diễn đồ thị bằng danh sách lân cận z Ví dụ 1 2 V[1] 2 4 V[2] 4 V[3] 1 2 3 4 V[4] 2 3 z 1: (2,4) 2: (4) 3: (1, 2) 4: (2, 3)
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn đồ thị bằng danh sách lân cận V[1] 2 3 5 1 2 V[2] 1 3 5 V[3] 1 2 4 3 4 V[4] 3 5 V[5] 1 4 z 1: (2,3,5) 2: (1,3) 3: (1,2,4) 4: (3,5) 5: (1,4)
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 8
Cấu trúc dữ liệu và Giải thuật
Phép duyệt đồ thị
z Cho một đồ thị G(V,E) và một đỉnh v thuộc V. Duyệt
đồ thị là thăm mọi đỉnh liên thông với v – Có 2 phương pháp
z Phương pháp duyệt theo chiều sâu (Depth First Search)
z Phương pháp duyệt theo chiều rộng ( Breadth First Search)
Đỗ Bích Diệp - Khoa CNTT
Duyệt theo chiều sâu
Algorithm DFS(G, v)
Input đồ thị G và đỉnh bắt đầu duyệt v trong G
Output đánh dấu các cung trong G trong phần đồ thị liên thông với đỉnh v
thành hai loại cung khám phá (discovery edges) và cung quay lui (back edges)
setLabel(v, VISITED) // đỉnh v đã được thăm
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
DFS(G, w) else
setLabel(e, BACK)
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 9
Cấu trúc dữ liệu và Giải thuật
Duyệt đồ thị theo chiều sâu A A Đỉnh chưa thăm A Đỉnh đã thăm B D E Cung chưa thăm Cung khám phá C Cung quay lui A A B D E B D E C C
Bắt đầu xuất phát từ A
Đỗ Bích Diệp - Khoa CNTT
Duyệt đồ thị theo chiều sâu A A B D E B D E C C Tất cả các cung kề của D đã duyệt Xét tiếp các cung kề của đỉnh C A A B D E B D E C C
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 10
Cấu trúc dữ liệu và Giải thuật
Duyệt đồ thị theo chiều sâu
z Duyệt theo chiều sâu trên đồ thị có hướng
– Đi theo chiều của các cung trên đồ thị D E B C A
Đỗ Bích Diệp - Khoa CNTT
Duyệt đồ thị theo chiều rộng
Algorithm BFS(G, s)
Q = một queue rỗng Q.enqueue(s)
setLabel
(s, VISITED)
while not Q.isEmpty() v = Q.dequeue()
for all e G.incidentEdges(v)
if getLabel(e) = UNEXPLORED
w opposite(v,e)
if getLabel(w) = UNEXPLORED
setLabel(e, DISCOVERY)
setLabel(w, VISITED) Q.enqueue(w) else
setLabel(e, BACK)
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 11
Cấu trúc dữ liệu và Giải thuật
Duyệt đồ thị theo chiều rộng L A Đỉnh chưa thăm 0 A A Đỉnh đã thăm L1 Cung chưa thăm B C D Cung khám phá E F Cung quay lui L L 0 A 0 A L L 1 B C D 1 B C D E F E F
Đỗ Bích Diệp - Khoa CNTT
Duyệt đồ thị theo chiều rộng L L 0 A 0 A L L 1 B C D 1 B C D L E F 2 E F L L 0 A 0 A L L 1 B C D 1 B C D L L 2 E F 2 E F
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 12
Cấu trúc dữ liệu và Giải thuật
Duyệt đồ thị theo chiều rộng L L 0 A 0 A L L 1 B C D 1 B C D L L 2 E F 2 E F L0 A L1 B C D L2 E F
Đỗ Bích Diệp - Khoa CNTT
Duyệt đồ thị theo chiều sâu
z Duyệt đồ thị theo chiều rộng trên đồ thị có hướng D E B C A
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 13