Chương V Đồ thị (phần 2) - 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

Lần lượt thêm vào cây khung cần tìm các cung có trọng số nhỏ nhất có được tại một thời điểm nếu cung đó không tạo thành chu trình trên phần cây khung đang tạm có duyệt theo thứ tự sau ta sẽ được biểu thức hậu tố, 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!

Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 1
Cutrúcd liuvàGiithut
Chương V: Đồ th (phn2)
Cây Rng trong thuyết đồ th
Cây
z Mt đồ th hướng liên
thông
z Không chu trình
Rng
z Mttpcáccâyphân
bit
Cây
Rng
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 2
Cây khung
Cho mt đồ th hướng, liên thông G
z Cây khung trên G là cây chattc các đỉnh trong G
1
2
3
6
5
4
1
2
3
6
5
4
1
2
3
6
5
4
Đồ th
Cây khung
Cây khung
Bài toán tìm cây khung cctiu
z Cho mt đồ th hướng, liên thông trng s
z Giá tr camt cây khung tng trng s cacáccung
trong cây
z Tìm mt cây khung vigiátr nh nhttrênđồ th
5
10
6
2
4
8
9
5
6
2
4
Đồ thịđuvào
Cây khung cctiu
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 3
Giithut Kruskal - MST
z Ý tưởng
Lnlượt thêm vào cây khung cn tìm các cung
trng s nh nhtcóđượctimtthi đimnếu
cung đó không tothànhchutrìnhtrênphncây
khung đang tmcó
Giithut Kruskal-MST
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Đồ th ban đầu
1
2
3
6
5
4
7
Bước1
1
2
3
6
5
4
7
3
Bước2
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 4
Giithut Kruskal MST
1
2
3
6
5
4
7
3
7
1
2
3
6
5
4
7
3
7
7
Bước4Bước3
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Đồ th ban đầu
Giithut Kruskal - MST
1
2
3
6
5
4
7
3
7
7
8
10
Bước6
1
2
3
6
5
4
7
3
7
7
8
Bước5
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Đồ th ban đầu
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 5
Giithut Kruskal - MST
1
2
3
6
5
4
7
3
7
7
8
10
10
Bước7-
Cây khung cctiu
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Đồ th ban đầu
Giithut Kruskal-MST
Algorithm KRUSKAL(G) {đồ thị G có n đỉnh}
1. {Khởi tạo các cụm ban đầu, mỗi cụm chứa 1 đỉnh của đồ thị }
for each vertex v in G do C(v) {v}.
2. Khởi tạo một Queue Q chứa các cung trong G, sắp xếp theo chiều tăng dần của trọng
số.
3. {Khởi tạo cây khung ban đầu rỗng} T ←∅
4. {Lần lượt xét các cung đưa vào trong cây khung cần tìm}
while T chứa ít hơn n-1 cung do begin
Lấy ra từ Q cung (u,v) có trọng số nhỏ nhất
C(v) là cụm chứa v, C(u) là cụm chứa u.
if C(v) C(u) then begin
T = T U {(u,v)}
Nhập C(u) với C(v)
end
end
return T
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 6
GiithutPrim -MST
z Ý tưởng
z Xây dng mt cây khung bt đầut mt đỉnh xutphát
z Thi đim ban đầu, đỉnh xutphátlàđỉnh duy nht
trong mtcmC
z Tng bướcthêmvàocmC mt đỉnh w đang ngoài C
w có nivi1 đỉnh u trong C thông qua mtcung
(u,w) có giá tr nh nhttithi đim đó.
GiithutPrim -MST
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Đỉnh xutphátđượcchn
đỉnh s 2
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Bước1: T 2 có cung (2, 4) , (2,6)
đềucótrng s 10.
Chn (2,4) cho thêm vào cây khung
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 7
GiithutPrim -MST
10
1
2
3
6
5
4
7
7
14
3
7
8
12
10
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
Bước2:
T 2, 4 có các cung (2,6) , (4,7), (4,3)
Chn (2,6) có đưa vào cây khung
Bước3: Chn (6,1)
GiithutPrim -MST
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
16
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
Bước4: Chn (1, 3)
Bước5: Chn (1, 7)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 8
GiithutPrim -MST
1
2
3
6
5
4
7
7
14
3
7
10
8
12
10
Bước6: Chn (7,5). Ttc các đỉnh trong đồ thịđu đã
trong cây khung
GiithutPrim -MST
Algorithm PRIM_MST(G, v)
1. {Khởi tạo cây khung ban đầu , chứa đỉnh v} T {v}
2. Q = V – {v} ; {Q là tập các đỉnh chưa trong cây khung}
3. { Thiết lập một mảng d chứa các giá trị trọng số của các cung để tiến hành chọn cung
giá tr nhỏ nhất nối một đỉnh trong cây với một đỉnh ngoài cây tại từng bước}
d[v] = 0;
for all w ∈ Q do begin
if (tồn tại cung (v,w) ) then d[w] = weight(v,w); else d[w] = ∞;
end
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 9
GiithutPrim -MST
4. {Lần lượt lựa chọn đỉnh đưa vào trong cây khung}
While ( Q ≠ rỗng) do begin
4.1 Xác định đỉnh u trong Q mà d[u] = min{d[w] | w ∈ Q} ;
4.2 Xác định cung (r,u) với r trong T và weight(r,u) = d[u];
4.3 T {(r,u)} ; Q = Q – {u};
{cập nhật lại các g trị được lưu trong mảng d sau khi đã thêm u vào trong cây
khung, mảng d mới s tiếp tục sử dụng trong bước lựa chọn tiếp theo}
4.4 for all w ∈ Q do d[w] = min (d[w], weight(u,w) );
End;
Bài toán tìm đường đingnnht
Tìm đường đingnnhtgia1 cp đỉnh (i,j)
Tìm đường đingnnhtt 1 đỉnh nguntitt
c các đỉnh còn li
Tìm đường đingnnhtgiamicp đỉnh
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 10
Giithut Dijkstra
Đặctrưng
z Giiquyết bài toán tìm đường đingnnhtgia1 cp
đỉnh bài toán tìm đường đingnnhtt mtngun
timi đích
z Ch áp dng trên đồ th trng s dương
Ý tưởng:
z Vimi đỉnh v s duytrìcácthôngs sau
D[v] : Khong cách ngnnhtbiết đượctithi đimhin
titừđnh nguns ti đỉnh v.
P[v] : Đỉnh trướcca đỉnh v trên đường đitừđnh nguns
tiv
Giithut Dijkstra
Thchin
z Duy trì mtcmC chacácđỉnh, cmnàylúcđầucha
đỉnh xutphátđã cho. Dndnthêmcácđỉnh vào trong
cm
z Timibướccagiáithut
xác định đỉnh u chưa trong C có giá tr d[u] nh nht
đưa vào trong C.
Cpnhtligiátr d cacácđỉnh lân cncau.
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 11
Giithut Dijkstra
z Tìm đường đingnnhttừđnh 1 đếncácđỉnh khác
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
Khitocácgiátr d cho ttc các đỉnh
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 12
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
KhitoC
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
9
Cpnht các giá tr d[2] = 9, d[6] = 14, d[7] = 15
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 13
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
33
9
M rng cmC, đường đingnnhtt 1 đến2 cóđộ dài 9
Cpnhtgiátr d cacácđỉnh lân cnca2
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
44
9
M rng cmC, đường đingnnhtt 1 đến6 cóđộ dài 14
Cpnhtgiátr d cacácđỉnh lân cnvi6
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 14
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
35
59
9
M rng cmC, đường đingnnhtt 1 đến7 cóđộ dài 15
Cpnhtgiátr d cacácđỉnh lân cnvi7
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
34
51
9
M rng cmC, đường đingnnhtt 1 đến3 cóđộ dài 32, điqua 6
Cpnhtgiátr d cacácđỉnh lân cnvi3
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 15
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
34
45
50
9
M rng cmC, đường đingnnhtt 1 đến5 cóđộ dài 34, điqua 6,3
Cpnhtgiátr d cacácđỉnh lân cnvi5
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
34
45
50
9
M rng cmC, đường đingnnhtt 1 đến4 cóđộ dài 45, đi qua 6,3,5
Cpnhtgiátr d cacácđỉnh lân cnvi4
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 16
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
34
45
50
9
M rng cmC, đường đingnnhtt 1 đến8 cóđộ dài 50, đi qua 1,6,3,5
Giithut Dijkstra
1
3
8
2
6
7
4
5
24
18
2
9
14
15
5
30
20
44
16
11
6
19
6
0
14
15
32
34
45
50
9
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 17
Giithut Dijkstra
Algorithm Dijkstra(G, s)
{S dng hai mng trung gian D và P gmn phnt. Vin làsốđnh trong đồ th.
D[i] chakhong cách từđnh s đến đỉnh i, P[i] cha đỉnh ngay trước i trong đường
đingnnhtt s đếni timtthi đim. Kếtthúcgiithut, thông tin vềđưng đi
ngnnhttừđnh s đếncácđỉnh khác nm trong P, độ dài các đường đinm trong D}
1. {KhitoD vàP} for each đỉnh v trong G do begin D[v] =
; P[v] = Null; end.
2. D[s] = 0; Q = V ;
3. While (Q rng) do begin
1. Xác định đỉnh u trong Q mà D[u] có giá tr nh nht ; Q= Q – {u};
2. Vilnlượtcácđỉnh w là lân cncau màw cònnmtrongQ
1. temp= D[u] + weight(u,w) ;
2. If (temp < D[w] ) then begin D[w] = temp; P[w] = u; end;
end.
Bài toán bao đóng truyn ng
z Mctiêu:
Xác định xem đường đi nào giacáccp đỉnh trong
đồ th G(V,E) cho trước hay không
z Hướng giiquyết:
S dng ma trnlâncn
Xác định ma trn đường đi
z Giithut: Floyd-Washall
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 18
Bài toán bao đóng truyn ng
z Ma trn đường đicamt đồ th
Ma trn đường đi P có kích thướcnxn, đượcxácđịnh s dng
công thc
z NếuP
ij
= 1 thì tntimt đường đitừđnh i đến đỉnh j
z NếuP
ij
= 0 thì không tntibtk mt đường đi nào t i
đếnj trongđồ th G(V,E)
Ma trn đường đi P là ma trnlâncncamt đồ th G
trong
đómi cung trong G
ch ra rng mtmiquanh liên thông
gia2 đỉnh.
G
gilàbao đóng truyn ng caG
)()3()2(
...
n
AAAAP =
Bài toán bao đóng truyn ng
z Giithutxácđịnh ma trn đường đicamt đồ th
Procedure FLOYD-WARSHALL(A,P,n)
1. P:= A;
2. for k:= 1 to n do
for i:=1 to n do
for j:=1 to n do
P[i,j] := P[i,j] OR (P[i,k] AND P[k,j]);
3. return
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 19
Bài toán bao đóng truyn ng
z d: Cho đồ th G và ma trnlâncnA
12
34
=
0110
0001
0110
1010
A
==
0111
1010
0111
0110
)2(
AAA
==
1111
0110
1111
0111
)2()3(
AAA
Bài toán bao đóng truyn ng
==
1111
0111
1111
1111
)3()4(
AAA
=
1111
1111
1111
1111
P
Ma trn đường điP ch cha các giá tr 1, chng t trong ma trn đã
cho, gia2 đỉnh btkỳđutnti đường đi
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 20
Bài toán spxếp Topo
z Th t b phn (Partial Order) là mtquanh 3 tính
chtsau
Tính bccu: x<y và y<z thì x<z
Tính không đốixng: x<y thì không tntiy<x
Tính không phnx: không tntix<x
z MttpS cócácphnt giacácphnt mt
th t b phnthìS đượcgilàTpcóth t b phn
Bài toán spxếp Topo
z Spxếptôpôlàbàitoánđặtratrênmttpcóth t
b phn
Mc đích: Spxếp các phnt trong tp đã cho theo mt
th t tuyếntínhsaochoth t b phnvn đảmbo
| 1/23

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
Chương V: Đồ thị (phần 2)
Cây và Rừng trong lý thuyết đồ thị – Cây
z Một đồ thị vô hướng liên thông z Không có chu trình Cây – Rừng z Một tập các cây phân biệt Rừng
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 1
Cấu trúc dữ liệu và Giải thuật Cây khung
– Cho một đồ thị vô hướng, liên thông G
z Cây khung trên G là cây có chứa tất cả các đỉnh trong G 1 1 1 2 3 2 2 3 3 6 6 6 4 4 4 5 5 5 Đồ thị Cây khung Cây khung
Bài toán tìm cây khung cực tiểu
z Cho một đồ thị vô hướng, liên thông có trọng số
z Giá trị của một cây khung là tổng trọng số của các cung trong cây
z Tìm một cây khung với giá trị nhỏ nhất trên đồ thị 6 6 5 5 9 2 8 2 10 4 4 Đồ thị đầu vào Cây khung cực tiểu
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 2
Cấu trúc dữ liệu và Giải thuật
Giải thuật Kruskal - MST z Ý tưởng
– Lần lượt thêm vào cây khung cần tìm các cung có
trọng số nhỏ nhất có được tại một thời điểm nếu
cung đó không tạo thành chu trình trên phần cây khung đang tạm có
Giải thuật Kruskal-MST 1 1 1 7 10 2 8 3 2 2 3 3 3 3 10 14 4 6 4 6 6 4 12 16 7 7 7 7 5 5 5 Đồ thị ban đầu Bước 1 Bước 2
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 3
Cấu trúc dữ liệu và Giải thuật
Giải thuật Kruskal – MST 1 1 1 7 7 10 8 2 2 2 3 3 3 3 3 3 10 14 6 4 6 4 6 4 12 16 7 7 7 7 7 7 5 5 5 Đồ thị ban đầu Bước 3 Bước 4
Giải thuật Kruskal - MST 1 1 1 7 7 7 10 8 2 3 2 3 2 3 3 3 3 8 8 10 14 10 6 4 6 4 6 4 12 16 7 7 7 7 7 7 5 5 5 Bước 6 Đồ thị ban đầu Bước 5
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 4
Cấu trúc dữ liệu và Giải thuật
Giải thuật Kruskal - MST 1 1 7 7 10 10 2 3 8 2 3 3 3 8 10 10 14 6 4 6 4 12 16 7 7 7 7 5 5 Bước 7- Đồ thị ban đầu Cây khung cực tiểu
Giải thuật Kruskal-MST
Algorithm KRUSKAL(G) {đồ thị G có n đỉnh}
1. {Khởi tạo các cụm ban đầu, mỗi cụm chứa 1 đỉnh của đồ thị }
for each vertex v in G do C(v) ← {v}.
2. Khởi tạo một Queue Q chứa các cung trong G, sắp xếp theo chiều tăng dần của trọng số.
3. {Khởi tạo cây khung ban đầu rỗng} T ← ∅
4. {Lần lượt xét các cung đưa vào trong cây khung cần tìm}
while T chứa ít hơn n-1 cung do begin
Lấy ra từ Q cung (u,v) có trọng số nhỏ nhất
C(v) là cụm chứa v, C(u) là cụm chứa u. if C(v) ≠ C(u) then begin T = T U {(u,v)} Nhập C(u) với C(v) end end return T
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 5
Cấu trúc dữ liệu và Giải thuật
Giải thuật Prim - MST z Ý tưởng
z Xây dựng một cây khung bắt đầu từ một đỉnh xuất phát
z Thời điểm ban đầu, đỉnh xuất phát là đỉnh duy nhất trong một cụm C
z Từng bước thêm vào cụm C một đỉnh w đang ở ngoài C
mà w có nối với 1 đỉnh u trong C thông qua một cung
(u,w) có giá trị nhỏ nhất tại thời điểm đó.
Giải thuật Prim - MST 1 1 7 7 10 10 8 2 3 8 3 2 3 3 10 14 10 14 6 4 12 6 4 16 12 16 7 7 7 7 5 5
Đỉnh xuất phát được chọn
Bước 1: Từ 2 có cung (2, 4) , (2,6) Là đỉnh số 2 đều có trọng số 10.
Chọn (2,4) cho thêm vào cây khung
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 6
Cấu trúc dữ liệu và Giải thuật
Giải thuật Prim - MST 1 1 7 7 10 10 8 2 8 3 2 3 3 3 10 14 10 14 6 4 6 4 12 12 16 7 7 7 7 5 5 Bước 2: Bước 3: Chọn (6,1)
Từ 2, 4 có các cung (2,6) , (4,7), (4,3)
Chọn (2,6) có đưa vào cây khung
Giải thuật Prim - MST 1 1 7 7 10 10 8 2 8 3 2 3 3 3 10 14 10 14 6 4 6 4 12 12 16 7 7 7 7 5 5 Bước 4: Chọn (1, 3) Bước 5: Chọn (1, 7)
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 7
Cấu trúc dữ liệu và Giải thuật
Giải thuật Prim - MST 1 7 10 8 2 3 3 10 14 6 4 12 7 7 5
Bước 6: Chọn (7,5). Tất cả các đỉnh trong đồ thị đều đã có trong cây khung
Giải thuật Prim - MST Algorithm PRIM_MST(G, v)
1. {Khởi tạo cây khung ban đầu , chứa đỉnh v} T ← {v}
2. Q = V – {v} ; {Q là tập các đỉnh chưa ở trong cây khung}
3. { Thiết lập một mảng d chứa các giá trị trọng số của các cung để tiến hành chọn cung
có giá trị nhỏ nhất nối một đỉnh trong cây với một đỉnh ngoài cây tại từng bước} d[v] = 0; for all w ∈ Q do begin
if (tồn tại cung (v,w) ) then d[w] = weight(v,w); else d[w] = ∞; end
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 8
Cấu trúc dữ liệu và Giải thuật
Giải thuật Prim - MST
4. {Lần lượt lựa chọn đỉnh đưa vào trong cây khung}
While ( Q ≠ rỗng) do begin
4.1 Xác định đỉnh u trong Q mà d[u] = min{d[w] | w ∈ Q} ;
4.2 Xác định cung (r,u) với r trong T và weight(r,u) = d[u];
4.3 T ← {(r,u)} ; Q = Q – {u};
{cập nhật lại các giá trị được lưu trong mảng d sau khi đã thêm u vào trong cây
khung, mảng d mới sẽ tiếp tục sử dụng trong bước lựa chọn tiếp theo}
4.4 for all w ∈ Q do d[w] = min (d[w], weight(u,w) ); End;
Bài toán tìm đường đi ngắn nhất
– Tìm đường đi ngắn nhất giữa 1 cặp đỉnh (i,j)
– Tìm đường đi ngắn nhất từ 1 đỉnh nguồn tới tất cả các đỉnh còn lại
– Tìm đường đi ngắn nhất giữa mọi cặp đỉnh
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 9
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra – Đặc trưng
z Giải quyết bài toán tìm đường đi ngắn nhất giữa 1 cặp
đỉnh và bài toán tìm đường đi ngắn nhất từ một nguồn tới mọi đích
z Chỉ áp dụng trên đồ thị có trọng số dương – Ý tưởng:
z Với mỗi đỉnh v sẽ duy trì các thông số sau
– D[v] : Khoảng cách ngắn nhất biết được tại thời điểm hiện
tại từ đỉnh nguồn s tới đỉnh v.
– P[v] : Đỉnh trước của đỉnh v trên đường đi từ đỉnh nguồn s tới v Giải thuật Dijkstra – Thực hiện
z Duy trì một cụm C chứa các đỉnh, cụm này lúc đầu chứa
đỉnh xuất phát đã cho. Dần dần thêm các đỉnh vào trong cụm
z Tại mỗi bước của giái thuật
– xác định đỉnh u chưa ở trong C có giá trị d[u] nhỏ nhất đưa vào trong C.
– Cập nhật lại giá trị d của các đỉnh lân cận của u.
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 10
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra
z Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh khác 2 24 3 9 1 18 14 2 6 6 30 11 4 19 15 5 5 6 20 16 8 7 44 Giải thuật Dijkstra ∞ ∞ 2 24 3 9 0 1 18 14 ∞ 2 6 6 ∞ 30 ∞ 11 4 19 15 5 5 6 20 16 8 7 44 ∞ ∞
Khởi tạo các giá trị d cho tất cả các đỉnh
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 11
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra ∞ ∞ 2 24 3 9 0 1 18 14 ∞ 2 6 6 ∞ Khởi tạo C 30 ∞ 11 4 19 15 5 5 6 20 16 8 7 44 ∞ ∞ Giải thuật Dijkstra 9 ∞ 2 24 3 9 0 1 18 14 14 2 6 6 ∞ 30 ∞ 11 4 19 15 5 5 6 20 16 8 7 44 15
Cập nhật các giá trị d[2] = 9, d[6] = 14, d[7] = 15
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 12
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 33 2 24 3 9 0 1 18 14 14 2 6 6 ∞ 30 ∞ 11 4 19 15 5 5 6 20 16 8 7 44 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 2 có độ dài 9
Cập nhật giá trị d của các đỉnh lân cận của 2 Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 ∞ 30 44 11 4 19 15 5 5 6 20 16 8 7 44 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 6 có độ dài 14
Cập nhật giá trị d của các đỉnh lân cận với 6
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 13
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 ∞ 30 35 11 4 19 15 5 5 6 20 16 8 7 44 59 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 7 có độ dài 15
Cập nhật giá trị d của các đỉnh lân cận với 7 Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 ∞ 30 34 11 4 19 15 5 5 6 20 16 8 7 44 51 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 3 có độ dài 32, đi qua 6
Cập nhật giá trị d của các đỉnh lân cận với 3
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 14
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 45 30 34 11 4 19 15 5 5 6 20 16 8 7 44 50 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 5 có độ dài 34, đi qua 6,3
Cập nhật giá trị d của các đỉnh lân cận với 5 Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 45 30 34 11 4 19 15 5 5 6 20 16 8 7 44 50 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 4 có độ dài 45, đi qua 6,3,5
Cập nhật giá trị d của các đỉnh lân cận với 4
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 15
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 45 30 34 11 4 19 15 5 5 6 20 16 8 7 44 50 15
Mở rộng cụm C, đường đi ngắn nhất từ 1 đến 8 có độ dài 50, đi qua 1,6,3,5 Giải thuật Dijkstra 9 32 2 24 3 9 0 1 18 14 14 2 6 6 45 30 34 11 4 19 15 5 5 6 20 16 8 7 44 50 15
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 16
Cấu trúc dữ liệu và Giải thuật Giải thuật Dijkstra Algorithm Dijkstra(G, s)
{Sử dụng hai mảng trung gian D và P gồm n phần tử. Với n là số đỉnh trong đồ thị.
D[i] chứa khoảng cách từ đỉnh s đến đỉnh i, P[i] chứa đỉnh ngay trước i trong đường
đi ngắn nhất từ s đến i tại một thời điểm. Kết thúc giải thuật, thông tin về đường đi
ngắn nhất từ đỉnh s đến các đỉnh khác nằm trong P, độ dài các đường đi nằm trong D}
1. {Khởi tạo D và P} for each đỉnh v trong G do begin D[v] = ∞; P[v] = Null; end. 2. D[s] = 0; Q = V ;
3. While (Q ≠ rỗng) do begin

1. Xác định đỉnh u trong Q mà D[u] có giá trị nhỏ nhất ; Q= Q – {u};
2. Với lần lượt các đỉnh w là lân cận của u mà w còn nằm trong Q

1. temp= D[u] + weight(u,w) ;
2. If (temp < D[w] ) then begin D[w] = temp; P[w] = u; end;
end.
Bài toán bao đóng truyền ứng z Mục tiêu:
– Xác định xem có đường đi nào giữa các cặp đỉnh trong
đồ thị G(V,E) cho trước hay không z Hướng giải quyết:
– Sử dụng ma trận lân cận
– Xác định ma trận đường đi
z Giải thuật: Floyd-Washall
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 17
Cấu trúc dữ liệu và Giải thuật
Bài toán bao đóng truyền ứng
z Ma trận đường đi của một đồ thị
– Ma trận đường đi P có kích thước nxn, được xác định sử dụng công thức ( 2 ) ( 3) ( )
P = A AA ∨ ... nA
z Nếu P = 1 thì tồn tại một đường đi từ đỉnh i đến đỉnh j ij
z Nếu P = 0 thì không tồn tại bất kỳ một đường đi nào từ i ij
đến j trong đồ thị G(V,E)
– Ma trận đường đi P là ma trận lân cận của một đồ thị G’ trong
đó mỗi cung trong G’ chỉ ra rằng có một mối quan hệ liên thông giữa 2 đỉnh.
– G’ gọi là bao đóng truyền ứng của G
Bài toán bao đóng truyền ứng
z Giải thuật xác định ma trận đường đi của một đồ thị
Procedure FLOYD-WARSHALL(A,P,n) 1. P:= A; 2. for k:= 1 to n do for i:=1 to n do for j:=1 to n do
P[i,j] := P[i,j] OR (P[i,k] AND P[k,j]); 3. return
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 18
Cấu trúc dữ liệu và Giải thuật
Bài toán bao đóng truyền ứng
z Ví dụ: Cho đồ thị G và ma trận lân cận A 1 2 ⎡0 1 0 1 ⎤ ⎢ ⎥ 0 1 1 0 A = ⎢ ⎥ ⎢1 0 0 0⎥ 3 4 ⎢ ⎥ ⎣0 1 1 0 ⎦ ⎡0 1 1 0⎤ ⎡1 1 1 0 ⎤ ⎢ ⎥ 1 1 1 0 ⎢ ⎥ 1 1 1 1 (2) A = A A = ⎢ ⎥ (3) (2) ⎢ ⎥ A = A A = ⎢0 1 0 ⎥ 1 ⎢0 1 1 0⎥ ⎢ ⎥ ⎢ ⎥ ⎣1 1 1 0 ⎦ ⎣1 1 1 1 ⎦
Bài toán bao đóng truyền ứng ⎡1 1 1 1⎤ ⎡1 1 1 1⎤ ⎢ ⎥ ⎢ ⎥ 1 1 1 1 (4) (3) ⎢1 1 1 1⎥ ⎢ ⎥ A = A A = P = ⎢1 1 1 0⎥ ⎢1 1 1 1⎥ ⎢ ⎥ ⎢ ⎥ ⎣1 1 1 1⎦ ⎣1 1 1 1⎦
Ma trận đường đi P chỉ chứa các giá trị 1, chứng tỏ trong ma trận đã
cho, giữa 2 đỉnh bất kỳ đều tồn tại đường đi
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 19
Cấu trúc dữ liệu và Giải thuật
Bài toán sắp xếp Topo
z Thứ tự bộ phận (Partial Order) là một quan hệ có 3 tính chất sau
– Tính bắc cầu: x– Tính không đối xứng: x– Tính không phản xạ: không tồn tại xz Một tập S có các phần tử mà giữa các phần tử có một
thứ tự bộ phận thì S được gọi là Tập có thứ tự bộ phận
Bài toán sắp xếp Topo
z Sắp xếp tô pô là bài toán đặt ra trên một tập có thứ tự bộ phận
– Mục đích: Sắp xếp các phần tử trong tập đã cho theo một
thứ tự tuyến tính sao cho thứ tự bộ phận vẫn đảm bảo
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 20