[r]
(1)Chương 2
CÁC PHƯƠNG PHÁP TÌM KI M L I GI I TRONG Ế Ờ Ả
KHƠNG GIAN TR NG THÁIẠ
Q trình tìm ki m l i gi i c a toán đế ả ủ ược bi u di n không gianể ễ
tr ng thái đạ ược xem nh q trình dị tìm đ th , xu t phát t tr ng tháiư ị ấ
ban đ u, thơng qua tốn t chuy n tr ng thái, l n lầ ể ầ ượ ết đ n tr ng tháiạ
ti p theo cho đ n g p đế ế ặ ược tr ng thái đích ho c khơng cịn tr ng thái nàoạ ặ
có th ti p t c để ế ụ ược n a Khi áp d ng phữ ụ ương pháp tìm ki m khơngế
gian tr ng thái , ngạ ười ta thường quan tâm đ n v n đ sau:ế ấ ề
• K thu t tìm ki m l i gi iỹ ậ ế ả
• Phương pháp lu n c a vi c tìm ki mậ ủ ệ ế
• Cách th hiên nút trình tìm ki m (mơ t tr ng thái tốn)ể ế ả
• Vi c ch n tốn t chuy n tr ng thái đ áp dung có kh sệ ọ ể ể ả
d ng phụ ương pháp may r i trình tìm ki m.ủ ế
Tuy nhiên, khơng ph i phả ương pháp có th áp d ng cho t t c cácể ụ ấ ả
bài toán ph c t p mà cho t ng l p toán Vi c ch n chi n lứ ệ ọ ế ược tìm ki mế
cho tốn c th ph thu c nhi u vào đ c tr ng c a toán.ụ ể ụ ộ ề ặ ủ
Các th t c tìm ki m n hình bao g m:ủ ụ ế ể
- Tìm ki m theo chi u r ng (Breadth – First Search)ế ề ộ
- Tìm ki m theo chi u sâu (Depth – First Search)ế ề
- Tìm ki m sâu d n (Depthwise Search)ế ầ
- Tìm ki m c c ti u hố giá thành (Cost minimization Search).ế ự ể
- Tìm ki m v i tri th c b sung (Heuristic Search).ế ứ ổ
1 Phương pháp tìm ki m theo chi u r ng.ế ề ộ
(2)K thu t tìm ki m rơng tìm ki m t t c nút c a m t m cỹ ậ ế ế ấ ả ủ ộ ứ
trong khơng gian tốn trước chuy n sang nút c a m c ti pể ủ ứ ế
theo
K thu t tìm ki m r ng b t đ u t m c th nh t c a không gian bàiỹ ậ ế ộ ắ ầ ứ ứ ấ ủ
toán, theo hướng d n c a lu t tr ng tài, ch ng h n “đi t trái sangẫ ủ ậ ọ ẳ
ph i” N u không th y l i gi i t i m c này, chuy n xu ng m c sauả ế ấ ả ứ ể ố ứ
đ ti p t c … đ n đ nh v để ế ụ ế ị ị ượ ờc l i gi i n u có.ả ế
1.2 Gi i thu t.ả ậ
Input:
Cây/Đ th G = (V,E) v i đ nh g c nồ ị ỉ ố (tr ng thái đ u)ạ ầ
T p đích Goalsậ
Output:
M t độ ường p t nừ đ n m t đ nh nế ộ ỉ * ∈ Goals
Method:
S d ng hai danh sách ho t đ ng theo nguyên t c FIFO (queue) MO vàử ụ ộ ắ
DONG
Procedure BrFS; (Breadth First Search)
Begin
Append(MO,no) DONG=null;
While MO <> null begin
n:= Take(MO);
if n∈ DICH then exit; Append(DONG, n);
(3)Write (‘Khơng có l i gi i’);ờ ả
End;
Chú ý: Th t c Append(MO,nủ ụ 0) b sung m t ph n t vào queue MO.ổ ộ ầ
Hàm Take(MO) l y m t ph n t queue MO ấ ộ ầ
• N u G khơng c n dùng danh sách DONG.ế ầ
1.3 Đánh giá đ ph c t p c a gi i thu t tìm ki m r ng.ộ ứ ạ ủ ả ậ ế ộ
Gi s r ng, m i tr ng thái đả ằ ỗ ược xét s sinh k tr ng thái k ti p.ẽ ế ế
Khi ta g i k nhân t nhánh N u tốn tìm đọ ố ế ược nghi m theo phệ ương pháp tìm ki m r ng có đ dài d Nh v y, đ nh đích s n m m c d+1, đóế ộ ộ ậ ỉ ẽ ằ ứ
s đ nh c n xét l n nh t là:ố ỉ ầ ấ
1 + k + k2 + + kd.
Nh v y đ ph c t p th i gian c a gi i thu t O(kư ậ ộ ứ ủ ả ậ d) Đ ph c t pộ ứ ạ khơng gian O(kd), t t c đ nh c a tìm ki m m c d+1 đêuấ ả ỉ ủ ế ứ ph i l u vào danh sách.ả
1.4. Ưu nhược m c a phể ủ ương pháp tìm ki m r ng.ế ộ
1.4.1. Ưu m.ể
• K thu t tìm ki m r ng k thu t vét c n không gian tr ng thái bàiỹ ậ ế ộ ỹ ậ ạ
tốn v y s tìm đậ ẽ ượ ờc l i gi i n u có.ả ế
• Đường tìm qua đ nh nh t.ỉ ấ
1.4.2 Nhược m.ể
• Tìm ki m l i gi i theo thu t toán đ nh trế ả ậ ị ước, v y tìm ki m m tậ ế ộ
cách máy móc; khơng có thơng tin h tr cho q trình tìm ki m,ổ ợ ế
không nh n l i gi i.ậ ả
• Khơng phù h p v i khơng gian ốn kích thợ ướ ớc l n Đ i v i lo i bàiố
tốn này, phương pháp tìm r ng đ i m t v i nhu c u:ộ ố ặ ầ
(4)- C n nhi u công s c x lý nút, nh t nhánh dài, sầ ề ứ ấ ố
nút tăng
- D th c hi n thao tác khơng thích h p, th a, đ a đ n vi c tăngễ ự ệ ợ ế ệ
đáng k s nút ph i x lý.ể ố ả
• Khơng hi u q a n u l i gi i sâu Phệ ủ ế ả ương pháp không phù h pợ
cho trường h p có nhi u đợ ề ường d n đ n k t qu nh ng đ u sâu.ẫ ế ế ả ề
• Giao ti p v i ngế ười dùng không thân thi n Do t qua t t c nút,ệ ệ ấ ả
vi c tìm ki m khơng t p trung vào m t ch đ ệ ế ậ ộ ủ ề
1.5 Các ví d ụ
Ví d ụ Bài tốn đong nước v i m = 5, n= 4, k =3ớ
M c 1: Tr ng thái đ u (0;0)ứ ầ
M c 2: Các tr ng thái (5;0), (0;4), M c 3: (5;4), (1;4), (4,0)ứ ứ
M c 4: (1;0), (4;4)ứ M c 5: (0;1), (5;3)ứ
m c ta g p tr ng thái đích (5;3) v y có đ c l i gi i nh sau:
Ở ứ ặ ậ ượ ả
(0;0)→ (0;4) → (4;0) → (4;4) → (5;3)
Đ có để ượ ờc l i gi i ta ph i l u l i v t c a đả ả ế ủ ường đi, có th trình bày qể
trình tìm ki m dế ướ ại d ng b ng sau:ả
i T(i) ↑MO ↓ DONG
(0;0)
(0;0) (5;0) (0;4) (5;0) (0;4) (0;0) (5;0) (5;4) (0;0) (1;4) (0;4) (5;4)
(1;4)
(0;0) (5;0)
(0;4) (5;4) (0;0) (4;0) (5;4) (1;4) (4;0)
(0;0) (5;0) (0;4) (5;4) (0;4) (5;0) (1;4) (4;0) (0;0) (5;0) (0;4) (5;4) (1;4) (5;4) (0;4) (1;0)
(5;0)
(4;0) (1;0) (0;0) (5;0) (0;4) (5;4) (1;4)
(4;0) (5;0) (4;4) (0;0)
(0;4)
(5)(5;3) (1;0) (4;4) (0;1) (5;1) (0;4) (0;0)
(1;0)
(5;3) (5;1) (0;0) (5;0) (0;4) (5;4) (1;4) (4;0) (1;0) (0;1)
(6)for j:=1 to n begin
if i< m then
if ph[i,j] <> ph[i+1,j] then begin
tg:= S[ph[i,j]] + S[ph[i+1,j]]; if tg >= max then
begin hang :=i; cot:=j;
huong:= 'nam'; max:= tg; end;
end; if j<n then
if ph[i,j]<> ph[i,j+1] then begin
tg:= S[ph[i,j]] + S[ph[i,j+1]]; if tg >= max then
begin hang:=i; cot:=j;
huong:= 'dong'; max:= tg; end;
(7)procedure inkq;
var
i,j: size; f: text; begin
assign(f,'out.pas'); rewrite(f);
writeln(f,so); writeln(f,dt);
writeln(f,hang,' ',cot,' ',huong); close(f);
end;