Ch
ng 1
ươ
BI U DI N BÀI TOÁN
Ể
Ễ
TRONG KHÔNG GIAN TR NG THÁI
Ạ
1. Đ t v n đ ặ ấ ề.
Khi gi i quy t bài toán b ng ph ng pháp tìm ki m, tr c h t ta ph i xác ả ế ằ ươ ế ướ ế ả
t c các đ i t đ nh ị không gian tìm ki mế bao g m t ồ ấ ả ố ượ ệ ng trên đó th c hi n ự
vi c tìm ki m. ế ệ
M t ph ộ ươ ệ ng pháp bi u di n v n đ phù h p là s d ng các khái ni m ử ụ ể ễ ề ấ ợ
tr ng thái ạ (state) và toán tử (operator).
Ph ng pháp gi i quy t v n đ d a trên khái ni m tr ng thái và toán t ươ ả ế ấ ề ự ệ ạ ử
đ c g i là cách ti p c n gi i quy t v n đ nh không gian tr ng thái. ượ ọ ế ậ ả ế ấ ề ạ ờ
2. Mô t tr ng thái ả ạ
Gi i bài toán trong không gian tr ng thái, tr c h t ph i xác đ nh d ng mô ả ạ ướ ế ả ạ ị
t ả ạ ấ tr ng thái bài toán sao cho bài toán tr nên đ n gi n h n, phù h p b n ch t ở ả ả ơ ơ ợ
v t lý c a bài toán (Có th s d ng các xâu ký hi u, véct ể ử ụ ậ ủ ệ ơ ề , m ng hai chi u, ả
cây, danh sách).
ầ M i tr ng thái chính là m i hình tr ng c a bài toán, các tình tr ng ban đ u ỗ ạ ủ ạ ạ ỗ
và tình tr ng cu i c a bài toán g i là tr ng thái đ u và tr ng thái cu i. ố ủ ạ ạ ầ ạ ọ ố
Ví d 1.ụ Bài toán đong n cướ
Cho 2 bình có dung tích l n l t là m và n (lit). V i ngu n n c không ầ ượ ớ ồ ướ
c. Không m t tính t ng quát có th h n ch , dùng 2 bình trên đ đong k lit n ạ ể ế ướ ấ ổ ể
gi thi t k <= min(m,n). ả ế
T i m i th i đi m xác đ nh, l ng n ể ạ ỗ ờ ị ượ ướ ả c hi n có trong m i bình ph n ệ ỗ
ánh b n ch t hình tr ng c a bài toán ủ ả ấ ạ ở ờ th i đi m đó. ể
- G i x là l ng n c hi n có trong bình dung tích m và y là l ọ ượ ướ ệ ượ ng
n c hi n có trong bình dung tích n. Nh v y b có th t (x,y) có th xem là ướ ư ậ ứ ự ệ ộ ể
thái c a bài toán. V i cách mô t t c a bài tr ng ạ ủ ớ ả ư ậ nh v y, các tr ng thái đ c bi ạ ặ ệ ủ
toán s là:ẽ
12
- Tr ng thái đ u: (0,0) ạ ầ
- Tr ng thái cu i: (x,k) ho c (k,y), 0
£ x £ m , 0 £ y £ n ạ ặ ố
Ví d 2.ụ Bài toán trò ch i 8 s ố ơ
ạ Trong b ng ô vuông 3 hàng, 3 c t , m i ô ch a m t s n m trong ph m ộ ố ằ ứ ả ộ ỗ
vi t ừ ị ố 1 đ n 8 sao cho không có 2 ô có cùng giá tr , có m t ô trong b ng b tr ng ế ả ộ ị
m t s p x p nào đó các s trong (không ch a giá tr nào c . Xu t phát t ị ứ ả ấ ừ ộ ắ ế ố
b ng, hãy d ch chuy n ô tr ng sang ph i, sang trái, lên trên ho c xu ng d ả ể ả ặ ố ố ị ướ i
(n u có th đ c) đ đ a v b ng ban đ u v b ng qui c tr ể ượ ế ể ư ề ả ề ả ầ ướ ướ ẳ c. Ch ng
h n Hình 1. d ạ ướ ự i đây là b ng xu t phát và Hình 2. là b ng mà ta ph i th c ả ấ ả ả
hi n các b c di chuy n ô tr ng đ đ t đ c. ệ ướ ể ạ ượ ể ố
8 6
3 2 4 1 5 7 Hình 1.
2
3 1 4 8 7 5 6 Hình 2.
Giá tr các ph n t trong b ng xác đ nh tr ng thái bài toán. Vì v y có ầ ử ị ả ạ ậ ị
3*3= (aij) , aij˛ {0..8}, aij <
th mô t tr ng thái c a bài toán b ng m t ma tr n A ể ả ạ ủ ằ ậ ộ
> akl, " i<>k, j<> l
- Tr ng thái đ u c a bài toán là ma tr n ậ ầ ủ ạ
382
461
507
(cid:246) (cid:230) (cid:247) (cid:231) (cid:247) (cid:231) (cid:247) (cid:231) ł Ł
- Tr ng thái cu i là ma tr n ậ ạ ố
321
408
567
(cid:246) (cid:230) (cid:247) (cid:231) (cid:247) (cid:231) (cid:247) (cid:231) ł Ł
13
Có th phát bi u d ng t ng quát c a bài toán này (Trò ch i n ủ ể ể ạ ổ ơ 2-1 s )ố
Ví d 3.ụ Bài toán tháp Hà N i ộ
c c 1 ban đ u có n đĩa s p x p theo th t to d n t Cho ba c c 1, 2, 3. ọ Ở ọ ứ ự ế ầ ắ ầ ừ
d i lên trên. Hãy d ch chuy n n đĩa đó sang c c th 3 sao cho: ướ ứ ể ọ ị
- M i l n ch chuy n m t đĩa. ỗ ầ ể ộ ỉ
- Trong m i c c không cho phép đĩa to n m trên đĩa nh h n. ỗ ọ ỏ ơ ằ
Bài toán xác đ nh khi bi c t ng đĩa đang n m c c nào. Hay nói cách t đ ị ế ượ ừ ằ ở ọ
khác, có hai cách xác đ nh: ị
1- C c 1 hi n đang ch a nh ng đĩa nào? C c 2 hi n đang ch a nh ng đĩa ữ ứ ứ ữ ệ ệ ọ ọ
nào? Và c c 3 đang ch a nh ng đĩa nào. ữ ứ ọ
2- Đĩa l n th i hi n đang nàm c c nào? ( i = 1 .. n ) ứ ệ ớ ở ọ
Nh v y cách mô t tr ng thái bài toán không duy nh t, v n đ là ch n cách ư ậ ả ạ ề ấ ấ ọ
mô t nào đ đ t đ ả ể ạ ượ c m c đích d dàng nh t. ễ ụ ấ
ỗ Theo trên, v i cách th nh t ta ph i dùng 3 danh sách đ ng vì s đĩa trên m i ứ ấ ả ớ ố ộ
c c là khác nhau trong t ng th i đi m khác nhau. ừ ọ ể ờ
Cách th hai, nhìn qua thì khó mô t nh ng d a vào khái ni m v b có th ứ ả ề ộ ự ư ệ ứ
i˛ {1, 2, 3}, i˛ {1 ..n}. Khi đó b có th t
trong toán h c, cách này mô t t ự ọ ả bài toán hi u qu h n. Th t v y, n u g i x ọ i ậ ậ ả ơ ệ ế
là c c ch a đĩa l n th i, trong đó x ớ ứ ứ ọ ứ ự ộ
(x1, x2, . . ,xn) có th dùng làm d ng mô t ể ạ ả ạ ớ tr ng thái đang xét c a bài toán. V i ủ
cách mô t này, ả
Tr ng thái đ u là (1,1,. . .,1) ầ ạ
Tr ng thái cu i là (3,3,. . .,3) ố ạ
3. Toán t chuy n tr ng thái. ử ể ạ
Toán t tr ng thái ử chuy n tr ng thái th c ch t là các phép bi n đ i đ a t ấ ổ ư ừ ạ ự ể ế ạ
này sang tr ng thái khác. Có hai cách dùng đ bi u di n các toán t ể ể ễ ạ : ử
- Bi u di n nh m t hàm xác đ nh trên t p các tr ng thái và nh n giá tr ư ộ ể ễ ậ ạ ậ ị ị
cũng trong t p này. ậ
- Bi u di n d ễ ể ướ ạ i d ng các quy t c s n xu t S? A có nghĩa là n u có ấ ế ắ ả
14
tr ng thái S thì có th đ a đ n tr ng thái A. ể ư ế ạ ạ
Ví d 1.ụ Bài toán đong n cướ
Các thao tác s d ng đ chuy n tr ng thái này sang tr ng thái khác ử ụ ể ể ạ ạ
g m: ồ
Đ đ y m t bình, đ h t n c trong m t bình ra ngoài, đ n c t bình này ổ ế ướ ổ ầ ộ ổ ướ ừ ộ
sang bình khác. Nh v y, n u tr ng thái đang xét là (x,y) thì các tr ng thái k ư ậ ế ạ ạ ế
ti p có th chuy n đ n s là: ế ẽ ể ể ế
(m,y)
(x,n)
(0,y)
(x,0)
(x,y) (0, x+ y) nếu x+y < = n
(x+y -n,n) n u x+y > n ế
(x+ y,0) n u x+y < = m ế
(m, x+y-m) n u x+y > m ế
Ví d 2.ụ Trò ch i 8 s ơ ố
Các thao tác đ chuy n tr ng thái t ng ng v i vi c chuy n ô tr ng sang ể ể ạ ươ ứ ệ ể ớ ố
- Bi u di n theo quy t c s n xu t:
ph i, sang trái, lên, xu ng n u có th đ c. ể ượ ế ả ố
13254876
13425876
13425876
13425687
ắ ả ể ễ ấ
- Bi u di n theo m t hàm ễ ể ộ
u là hàm bi u di n cho toán t
G i hàm f chuy n ô tr ng lên trên; g i B (B= ọ ễ ể ử ể ố ọ
ij)) lên trên,
15
(bij)) là tr ng thái sau khi di chuy n ô tr ng tr ng thái A (A= (a ể ạ ố ở ạ
0, j0) (hay nói cách khác ai0 j0 =
nghĩa là: B= fu(A), gi v trí (i ả ử s ô tr ng đang ố ở ị
0) thì hàm f đ c xác đ nh nh sau: ượ ư ị
0 = 1
" aij (i, j) n u iế
„ fu(aij) = (i0-1, j0) và (i, j) „ (i0, j0) và i0 >1 aij n u (i, j) ế
0, j0), i0 >1
ai0-1, j0 n u (i, j) = (i ế
0-1, j0), i0 >1
ai0, j0 n u (i, j) = (i ế
T ng t , có th xác đ nh các phép chuy n ô tr ng xu ng d i f ươ ự ể ể ố ố ị ướ d, qua trái fl,
qua ph i fả r nh sau: ư
0 = 3
" aij (i, j) n u iế
„ fd(aij) = (i0+1, j0) và (i, j) „ (i0, j0) và i0 <3 aij n u (i, j) ế
0, j0), i0 <3
ai0-1, j0 n u (i, j) = (i ế
0+1, j0), i0 <3
ai0, j0 n u (i, j) = (i ế
0 = 1
" aij (i, j) n u jế
„ aij fl(aij) = (i0, j0-1) và (i, j) „ (i0, j0) và j0 > 1 n u (i, j) ế
0, j0), j0 > 1
ai0-1, j0 n u (i, j) = (i ế
0, j0-1), j0 > 1
ai0, j0 n u (i, j) = (i ế
0 = 3
" aij (i, j) n u jế
„ aij fr(aij) = (i0, j0+1) và (i, j) „ (i0, j0) và j0 < 3 n u (i, j) ế
0, j0), j0 < 3
ai0-1, j0 n u (i, j) = (i ế
0, j0+1), j0 < 3
ai0, j0 n u (i, j) = (i ế
Ví d 3.ụ Bài toán Tháp Hà N i v i n=3. ộ ớ
ng h p nh sau: M i tr ng thái là m t b ba (i, j, k). Có các tr ộ ộ ỗ ạ ườ ư ợ
- Ba đĩa cùng n m trên m t c c: (i, i, i) ộ ọ ằ
- Hai đĩa cùng n m trên m t c c: (i, i, j), (i, j, i), (j, i, i) ộ ọ ằ
16
- Ba đĩa n m trên ba c c phân bi t: (i, j, k) ằ ọ ệ
(i, i, i) (i, i, j)
(i, i, k)
(i, i, j) (i, i, k)
(i, k, j)
(i, i, i)
(i, j, i) (i, j, k)
(i, j, j)
(i, k, i)
(j, i, i) (j, i, j)
(j, i, k)
(k, i, i)
(i, j, k) (i, i, k)
(i, j, j)
(i, j, i)
4 Kkhông gian tr ng thái là t p t
4. Không gian tr ng thái c a bài toán. ủ ạ
t c các tr ng thái có th có và t p các toán ậ ấ ả ể ạ ậ ạ
c a bài toán. t ử ủ
Không gian tr ng thái là m t b b n, Ký hi u: K= (T, S, G, F). Trong ộ ộ ố ệ ạ
đó,
T: t p t t c các tr ng thái có th có c a bài toán ậ ấ ả ủ ể ạ
S: tr ng thái đ u ầ ạ
G: t p các tr ng thái đích ạ ậ
F: t p các toán t ậ ử
hông gian tr ng thái c a bài toán đong n c là b b n T, S, G, F Ví d 1. Kụ ủ ạ ướ ộ ố
xác đinh nh sau: ư
4 T = { (x,y) / 0 <= x <= m; 0 <= y <= n }
5 S = (0,0)
17
6 G = { (x,k) ho c (k,y) / 0 <= x <= m; 0 <= y <= n} ặ
7 F = T p các thao tác đong đ y, đ ra ho c đ sang bình khác th c hi n trên ặ ổ ự ệ ậ ầ ổ
m t bình. ộ
ộ ớ
Ví d 2. ụ Không gian tr ng thái c a bài toán Tháp Hà n i v i n = 3: ạ ủ T = { (x1, x2, x3)/ xi ˛ {1, 2, 3} }
S = (1, 1, 1)
G = {(3, 3, 3)}
ầ F = T p các kh năng có th chuy n đĩa đã xác đ nh trong ph n ể ể ậ ả ị
tr c.ướ
Ví d 3.ụ Không gian tr ng thái c a bài toán trò ch i 8 s : ố ủ ạ ơ
T = { (aij)3x3 / 0<= aij <= 8 và aij <> akl v i i<> j ho c k <> l} ặ ớ
S = Ma tr n xu t phát c a bài toán, ủ ậ ấ
G = Ma tr n cu i cùng c a bài toán (các s n m theo v trí yêu ố ằ ủ ậ ố ị
c u)ầ
F = {fl, fr, fu, fd}
Tìm ki m l i gi i trong không gian tr ng thái là quá trình tìm ki m xu t phát ế ờ ả ế ấ ạ
t ừ ạ tr ng thái ban đ u, d a vào toán t ầ ự ử ạ chuy n tr ng thái đ xác đ nh các tr ng ể ể ạ ị
thái ti p theo cho đ n khi g p đ c tr ng thái đích. ặ ượ ế ế ạ
5. Bi u di n không gian tr ng thái d ể ễ ạ ướ ạ i d ng đ th ồ ị
5.1. Các khái ni mệ
• Đ th G = (V,E) trong đó V:t p đ nh, E: t p cung (E
(cid:204) V*V) ồ ị ậ ậ ỉ
- G là đ th vô h
Chú ý
ng thì (i, j) là m t c nh cũng nh là (j, i) (t c là:(i, j) ˛ E ồ ị ướ ộ ạ ư ứ
thì (j,i)˛ E)
2
- N u G là đ th có h ng thì cung (i, j) hoàn toàn khác v i cung (j, i). ồ ị ế ướ ớ
1 và đ th có h ướ ồ ị 1
ng G ng G Ví d ụ xét d th vô h ướ
2
4
2
4
3
3
18
ồ ị 1
G1 G2
• T p đ nh k : ề ỉ ậ
" n˛ V, T(n)={m˛ V/ (n,m) ˛ E}đ c g i là t p các đ nh k c a n ượ ọ ề ủ ậ ỉ
• Đ ng đi: ườ
1 fi
i ˛ V, "
p = (n1,...,nk) đ c g i là đ ng đi t đ nh n i=1,k ; ượ ọ ườ ừ ỉ nk n u nế
• Cây là đ th có đ nh g c n
(ni, ni+1)˛ E " i=1, k -1
ồ ị ố 0˛ V tho : ả ỉ
0˛ V có nh ng tính ch t ấ ữ
M t đ th G=(V, E) g i là cây n u t n t ộ ồ ị ế ồ ạ ọ i m t đ nh n ộ ỉ
sau:
-
(cid:217) (cid:217)
-
" n˛ V, n˛ T(n0), trong đó T(n0): t p các đ nh thu c dòng dõi c a n ậ ủ 0 (n0 là tổ ộ ỉ
tiên c a n)ủ " n˛ V, $! m˛ V sao cho n˛ T(m); m đ c g i là cha c a n. ượ ọ ủ
5.2. Bi u di n không gian tr ng thái b ng đ th ồ ị ể ễ ạ ằ
Theo ngôn ng đ th , không gian tr ng thái t ữ ồ ị ạ ươ ng ng v i m t đ th ớ ộ ồ ị ứ
ng trong đó: Các tr ng thái t đ nh h ị ướ ạ ươ ồ ị ế ng ng v i các đ nh trong đ th , n u ứ ớ ỉ
i toán t chuy n tr ng thái thì có cung (s, t) t n t ồ ạ ử ể ạ
Đ th y rõ m i t ng quan, ta có b ng sau ể ấ ố ươ ả
KGTT Đ thồ ị
Tr ng thái Đ nhỉ ạ
Cung Toán tử
Đ ng đi Dãy các tr ng thái liên ạ ườ
ti pế
5.3. Bi u di n đ th ễ ồ ị ể
Cho đ th G = (V,E) , gi s V={1, 2,....,n}. Có hai cách th ng dùng ồ ị ả ử ườ
đ bi u di n đ th G l u tr trong máy tính. ể ể ồ ị ữ ư ễ
i) Bi u di n b ng ma tr n k ằ ậ ề ể ễ
ij)nxn, v i n là s đ nh c a đ
Đ th G đ c bi u di n b i ma tr n k A=(a ồ ị ượ ể ễ ề ậ ở ủ ồ ố ỉ ớ
19
th , trong đó: ị
aij= 1 ˛ E n u (i, j) ế
0 trong tr i ườ ng h p ng ợ c l ượ ạ
N u G là đ th vô h ng thì ma tr n k A là ma tr n đ i x ng. ồ ị ế ướ ố ứ ề ậ ậ
2
1 và đ th có h ồ ị
ng G ng G Ví dụ V i đ th vô h ớ ồ ị ướ ướ ở ậ trên ta có các ma tr n
k sau: ề
0 1 1 1
1 0 1 1
1 1 0 0
1 1 0 0
0 1 0 0
1 0 0 0
0 1 0 1
1 1 0 0
G1: G2:
ii) Bi u di n b ng danh sách k . ề ằ ể ễ
V i m i đ nh i c a đ th , ta có m t danh sách t ủ ồ ị ỗ ỉ ớ ộ ấ ả ề ớ t c các đ nh k v i i, ỉ
ợ ta ký hi u là List(i). Đ th hi n List(i) ta có th dùng m ng, ki u t p h p ể ể ệ ể ậ ể ệ ả
hay ki u con tr . Ví d v i đ th G1, ta có List(1)= [2, 3, 4] ụ ớ ồ ị ể ỏ
c m=3, n=2, k=1 Ví d 1.ụ Bài toán đong n ướ
(0,0)
(3,0)
(0,2)
(1,2)
(3,2)
(2,0)
(1,0)
(0,1)
(2,2)
(3,1)
111
Ví d 2.ụ Tháp Hà N i v i n = 3 ộ ớ
(112)
(111) (113)
112
(132)
(123)
(133)
(131)
(121)
(122)
(233)
(322)
(231)
(232)
(323)
(321)
(221)
(212)
(313)
(331)
(222)
(223)
(213)
(211)
(311)
(312)
(332)
(333)
20
21
6. BÀI T PẬ
Xây d ng không gian tr ng thái đ i v i các bài toán sau: ố ớ ự ạ
6.1. Cho n thành ph đánh s t 1 đ n n. Giao thông đ ng b gi a hai thành ố ừ ố ế ườ ộ ữ
ij nh sau: a
ij = -1 có nghĩa là không có đ
ph i và j đ ố ượ c cho b i giá tr a ở ị ư ngườ
ij = 1 n u có đ ế
thành ph i sang thành ph j và a b đi t ộ ừ ố ố ườ ng đi tr c ti p t ự ế ừ
thành ph i sang thành ph j. Tìm đ ng đi t thành ph i ố ố ườ ừ ố 0 sang thành ph jố 0.
k viên s i, đ
n
1 viên, đ ng th 2 có a
6.2. Cho k và n là 2 s nguyên d ng. Có 2 ố ươ ỏ ượ c phân b trong n ố
2 viên, …, đ ng th n có a ố
đ ng, đ ng th nh t có a ố ứ ấ ố ứ ố ứ
1+ a2 + …+ an = 2k. Ng
viên và t t nhiên a i ta c n san s l ng s i t các ấ ườ ẻ ượ ầ ỏ ừ
ụ đ ng đ d n s i tr v 1 đ ng. Quy t c san s i nh sau: m i l n san áp d ng ắ ố ể ồ ỏ ở ề ỗ ầ ư ố ỏ
cho 2 đ ng s i, gi ố ỏ ả ử ả s 1 đ ng có a viên và đ ng kia có b viên (không gi m ố ố
‡ thi t a b) thì san s i t đ ng có a viên sang đ ng có b t ng quát, có th gi ổ ể ả ế ỏ ừ ố ố
viên đ thành m t đ ng có a-b viên và đ ng kia 2*b viên. ộ ố ể ố
H ng d n: ẫ Tr ng thái c a bài toán ph i xác đ nh đ ướ ủ ạ ả ị ượ ố ỏ c s s i hi n có trong ệ
m i đ ng. ỗ ố
1, a2, …, an đ
6.3. M t dãy các s nguyên d ng a c g i là h p lý n u tho ộ ố ươ ượ ế ợ ọ ả
-
mãn hai đi u ki n: ệ ề
-
i
an là s nguyên t . ố ố
ai+1 = ai +1 ho c 2*a ặ
1, a2, …, an.
Cho tr c s a ướ ố 1, hãy tìm dãy h p lý a ợ
6.4 Bài toán ng i đ a hàng. ườ ư
Ng i đ a hàng c n ph i xác đ nh đ ườ ư ầ ả ị ượ c hành trình ng n nh t sao cho ắ ấ
m i thành ph đi đ n đúng m t l n và quay tr l i thành ph xu t phát. Gi ộ ầ ở ạ ế ố ỗ ấ ố ả
t c n thành ph đánh s t s thành ph xu t phát là thành ph 1, có t ử ấ ố ố ấ ả ố ừ ố ế 1 đ n
22
n.
H ng d n ướ ẫ :
- M i tr ng thái cho b i danh sách các thành ph đã đi qua cho đ n th i ờ ế ạ ỗ ở ố
đi m hi n t i, trong đó không cho phép m t thành ph nào đ ệ ạ ể ộ ố ượ ệ c xu t hi n ấ
nhi u h n m t l n tr thành ph 1 sau khi đã li t kê t t c các thành ph ộ ầ ừ ề ơ ố ệ ấ ả ố
còn l i.ạ
- Các toán t ng ng v i các hành đ ng t ử ươ ứ ớ ộ
1- đi t i thành ph 1 ớ ố
2- đi t i thành ph 2 ớ ố
3- đi t i thành ph 3. ớ ố
. . .
6.5. Bài toán phân tích cú pháp.
ế Văn ph m G là b b n G = (N, T, P, S), N là t p ký hi u không k t ộ ố ệ ạ ậ
˛ thúc, T là t p ký hi u k t thúc, S N là ký hi u đ u và P là t p s n xu t có ế ệ ậ ậ ả ệ ầ ấ
a a fi b , đây , b ˛ (NUT). Ngôn ng sinh ra b i văn ph m G đ d ng ạ ở ữ ạ ở ượ c
ở
1, …, w
n ˛
˛ đ nh nghĩa b i:\ ị L(G) = { w w T | S (cid:222) }, S (cid:222) w có nghĩa là $ w (NUT) sao cho
i (cid:222)
i+1, w
1 = S và w
n = w
w w .
Bài toán phân tích cú pháp đ ượ c phát bi u : ch tr ể ướ ớ c văn ph m G v i ạ
23
w xâu w ˛ T đã cho hãy xác đ nh xem ˛ L(G) hay không ? ị