Bài 6: Các thut toán tìm kiếm trên đồ th và mt s ng dng
v1.0 133
BÀI 6: CÁC THUT TOÁN TÌM KIM TRÊN ĐỒ TH
VÀ MT S NG DNG
Ni dung
Gii thiu bài toán tìm kiếm trên đồ th
Thut toán tìm kiếm theo chiu rng
Thut toán tìm kiếm theo chiu sâu
Mt s ng dng
Gii thiu
Bài toán tìm kiếm trên đồ th được phát biu chung cho c đồ th có hướng hay vô hướng vi ý
nghĩa mt cnh vô hướng xem như đi theo chiu nào cũng được. Có th nói, trong vic gii
quyết nhiu bài toán ng dng trên đồ th, thao tác tìm kiếm được dùng như là mt trong
nhng thao tác cơ bn, đến mc vai trò ca nó trong ng dng đồ th cũng ging như vai trò
ca các phép cng, tr, ... trong tính toán s hc.
Mc tiêu
Sau khi hc bài này, các bn có th:
Hiu thế nào là bài toán tìm kiếm trên đồ th.
S dng các thut toán:
Tìm kiếm theo chiu rng
Tìm kiếm theo chiu sâu
vào vic gii quyết bài toán tìm kiếm trên đồ th.
Minh ha mt s kết qung dng ca bài toán tìm kiếm trên đồ th qua vic nghiên cu
mt s ng dng c th.
Thi lượng
6 tiết
Bài 6: Các thut toán tìm kiếm trên đồ th và mt s ng dng
134 v1.0
TÌNH HUNG DN NHP
Tình hung: Truyn tin
Mt lp gm N hc viên, mi hc viên cho biết nhng bn mà hc viên đó có th liên lc được
(chú ý liên lc này là liên lc mt chiu, ví d : Bn An có th gi tin ti Bn Vinh nhưng Bn
Vinh thì chưa chc đã có th gi tin ti Bn An).
Thy ch nhim đang có mt thông tin rt quan trng cn thông báo ti tt c các hc viên ca
lp (tin này phi được truyn trc tiếp). Để tiết kim thi gian, thy ch nhn tin ti 1 s hc
viên ri sau đó nh các hc viên này nhn li cho tt c các bn mà các hc viên đó có th liên
lc được, và c ln lượt như thế làm sao cho tt c các hc viên trong lp đều nhn được tin .
Câu hi
Có phương án nào giúp thy ch nhim vi mt s ít nht các hc viên mà thy ch nhim
cn nhn?
Bài 6: Các thut toán tìm kiếm trên đồ th và mt s ng dng
v1.0 135
6.1. Phát biu bài toán tìm kiếm trên đồ th
Cho trước mt đồ th mt đỉnh s cho trước, cn duyt tt c các đỉnh, có đường đi
t s đến nó, sao cho mi đỉnh được duyt đúng mt ln. Thao tác va nói, được gi là
thao tác tìm kiếm các đỉnh trên đồ th bt đầu t đỉnh s.
Có th nói, trong rt nhiu li gii ca các ng dng trên đồ th, thao tác tìm kiếm
được dùng như là mt trong nhng thao tác cơ bn, đến mc vai trò ca nó trong ng
dng đồ th cũng ging như vai trò ca các phép cng, tr, ... trong tính toán s hc.
Chú ý rng, trong phát biu va nêu, hai điu kin cơ bn ca thao tác tìm kiếm là
không b sótkhông trùng lp còn th t tìm kiếm là không được tính đến. Chúng
có th khác nhau tùy các chiến lược tìm kiếm khác nhau trong nhng mc tiêu ng
dng khác nhau.
Bài toán tìm kiếm trên đồ th được phát biu chung cho c đồ th có hướng hay vô
hướng vi ý nghĩa mt cnh vô hướng xem như đi theo chiu nào cũng được. Ngoài
ra, vic có nhiu cnh ni cùng mt cp đỉnh cũng không có gì khác ch có mt cnh
ni cp đỉnh này, vì thế trong bài toán tìm kiếm, mt đa đồ th cũng ging như mt
đơn đồ th.
Thao tác tìm kiếm các đỉnh trên đồ th bt đầu t đỉnh s còn được gi là thao tác duyt
các đỉnh hay đi thăm các đỉnh bt đầu t đỉnh s. Các đỉnh được tìm kiếm được gi là
các đỉnh được duyt hay được thăm t đỉnh s.
Có hai thut toán cơ bn thc hin vic tìm kiếm các đỉnh trên đồ th bt đầu t mt
đỉnh là tìm kiếm theo chiu rngtìm kiếm theo chiu sâu được trình bày trong các
mc dưới đây.
6.2. Tìm kiếm theo chiu rng
Vic tìm kiếm theo chiu rng bt đầu t đỉnh s, được tiến hành đồng thi theo mi
hướng và phát trin theo tng mc: “gn” s thăm trước, “xa” s thăm sau. Để đo độ
gn, xa ca các đỉnh được thăm so vi s, ta đánh “mc” ca các đỉnh như sau. Đỉnh s
đỉnh có mc 0 (đỉnh xut phát). Nhng đỉnh k vi s được đánh mc 1. Nhng đỉnh
k vi đỉnh mc 1 mà chưa được xét được đánh mc 2, ...
Chú ý: mi đỉnh ch được đánh mc đúng mt ln vì thế quá trình đánh mc s kết
thúc, khi đó các đỉnh đã được đánh mc là nhng đỉnh được thăm, trong đó nhng
đỉnh có mc thp hơn được thăm trước, nhng đỉnh có mc cao hơn được thăm sau,
nhng đỉnh cùng mc xem như được thăm đồng thi vi ý nghĩa theo th t nào cũng
được. T quy tc đánh mc ta cũng thy rng, mc ca đỉnh được thăm là độ dài (tính
theo s cnh) ca đường đi ngn nht t đỉnh s đến đỉnh đó. V trc giác, ta có th
hình dung rng, vic tìm kiếm các đỉnh theo chiu rng được tiến hành theo các vòng
tròn đồng tâm (vi tâm đim là đỉnh xut phát) vi bán kính tăng dn (các đỉnh trên
cùng mt vòng tròn là nhng đỉnh cùng mc) cho đến khi không tăng được na, nó
ging như vic nh mt git du trên mt nước, vết du s loang rng ra xung quanh.
Cũng chính vì vy, tên gi ca thut toán này là tìm kiếm theo chiu rng và nó cũng
có mt tên gi khác là vết du loang.
Để t chc vic tìm kiếm theo chiu rng, các đỉnh được xét thăm cn được lưu tr
dn trong mt danh sách, trong đó đỉnh được thăm được ly ra khi danh sách (xem
Bài 6: Các thut toán tìm kiếm trên đồ th và mt s ng dng
136 v1.0
như đã xét), đồng thi các đỉnh k vi đỉnh này và chưa được xét thăm, s được np
vào danh sách. Vì vic đi thăm phi tuân theo th t “gn” trước, “xa” sau nên các
đỉnh được ly ra phi mt đầu ca danh sách (gi là đầu danh sách), còn các đỉnh
được np vào phi đầu kia ca danh sách (gi là cui danh sách). Mt danh sách
hot động theo cơ chế vào trước, ra trước như vy được gi là mt hàng đợi (queue –
xem trong các giáo trình v cu trúc d liu và gii thut). Rõ ràng lúc ban đầu, hàng
đợi cn cha mt phn tđỉnh xut phát. Quá trình tìm kiếm theo chiu rng xut
phát t đỉnh s, nh hàng đợi Q, có th mô t qua sơ đồ khi sau:
Để cài đặt, hàng đợi Q có th t chc như mt mng (đánh s t 1) vi s phn t ti
đa là s đỉnh và giá tr khi động là Q1 = s. Để kim soát các v trí đầu, cui ca Q, có
th dùng hai biến nguyên dau, cuoi vi giá tr khi động là 1. Phn t u được ly ra là
Qdau và mi khi ly ra cn tăng biến dau lên mt đơn v. Mi khi np v vào Q cn tăng
biến cuoi lên mt đơn v và gán Qcuoi bng v. Để kim soát mt đỉnh đã được xét thăm
hay chưa, cn t chc mt mng lôgic B có các ch s chy trên tp đỉnh. Ban đầu B
được khi gán Bu := TRUE vi mi đỉnh u, tr Bs := FALSE (đỉnh xut phát được
thăm đầu tiên, các đỉnh còn li chưa được thăm). Điu kin np v vào Q khi đó sv
k vi u và Bv. Mi khi np v vào Q cn gán li Bv := FALSE (đỉnh v đã được xét
thăm) để đảm bo không xét li v ln th hai. Du hiu Q rng (cũng là du hiu kết
thúc vòng lp) là các biến dau, cuoi ln đầu tiên tha mãn bt đẳng thc dau > cuoi.
Khi kết thúc, các đỉnh được thăm t s theo th t s là Q1, Q2, ..., Qcuoi.
Ví d. Cho đồ th (có hướng) dưới đây:
Hãy đi thăm các đỉnh bt đầu t A.
Bài 6: Các thut toán tìm kiếm trên đồ th và mt s ng dng
v1.0 137
Gii. Bng dưới đây cho biết trng thái ca hàng đợi Q, đỉnh ly ra, đỉnh đưa vào
trong tng bước theo thut toán đã nêu:
Hàng đợi Q Đỉnh ly ra Đỉnh đưa vào
A A B, C
B, C B
C C D, E
D, E D F
E, F E
F F
rng
Kết qu cho thy các đỉnh được thăm bt đầu t A theo th t là A, B, C, D, E, F. Có
th gii li thí d này vi các đỉnh xut phát khác nhau, chng hn nếu xut phát t C,
các đỉnh đều được thăm ngoi tr đỉnh A (D, E có mc 1, B, F có mc 2), còn nếu
xut phát t F thì không có đỉnh nào được thăm c, ngoi tr chính nó.
Chú ý
Các đỉnh được thăm theo th t mc: mc thp thăm trước, mc cao thăm sau. Trong thí
d trên, A (đỉnh xut phát) có mc 0 được thăm đầu tiên, tiếp theo là các đỉnh B, C có
mc 1, sau đó là các đỉnh D, E có mc 2 và cui cùng là đỉnh F có mc 3.
Các đỉnh cùng mc được thăm theo th t nào cũng được. Như vy, vic thăm theo
chiu rng ch xác định th t theo mc các đỉnh, còn th t theo các đỉnh cùng mc là
không duy nht, tùy theo tng cài đặt x lý th t này. Trong thí d trên, nhng đỉnh
cùng mc được x lý theo th t t đin ca tên đỉnh, nếu x lý theo th t ngược t
đin, trình t đi thăm s là A, C, B, E, D, F (vn đảm bo th t theo mc).
Mc cao nht đạt được là độ dài ca đường đi ngn nht (tính theo s cnh) t đỉnh xut
phát đến đỉnh “xa” nó nht (nhng đỉnh “xa” đỉnh xut phát nht là nhng đỉnh đạt được
mc cao nht này). Trong thí d trên, đỉnh F có mc 3 là đỉnh “xa” A nht, và 3 là độ dài
đường đi ngn nht t A đến F.
6.3. Tìm kiếm theo chiu sâu
Quá trình tìm kiếm theo chiu sâu được tiến hành theo mt hướng: t đỉnh xut phát s
(xem như đã thăm), chn mt đỉnh u bt k k vi s để thăm u, sau đó t đỉnh u, chn
mt đỉnh v bt k k vi u và chưa được thăm để thăm v, ... Quá trình đi thăm được
phát trin theo mt hướng như vy cho đến khi không phát trin được na (chú ý
không thăm đỉnh đã thăm ri), khi đó cn lùi li đỉnh trước để phát trin theo hướng
khác. Chính vì vic tìm kiếm ch phát trin theo mt hướng cho đến tn cùng như vy,
nên thut toán này có tên gi là tìm kiếm theo chiu sâu.
Để tiến hành tìm kiếm theo chiu sâu, các đỉnh được thăm cn được lưu tr vào mt
danh sách sao cho đỉnh được np sau cùng s được lùi ra đầu tiên. Vi cơ chế vào sau,
ra trước như vy, danh sách ch có mt đầu, va là nơi ly ra va là nơi np vào các
phn t. Mt danh sách như thế được gi là mt ngăn xếp (stack – xem các giáo trình
v cu trúc d liu và gii thut).