THIT K GII THUT
Ni dung ca chương này trình bày hai chiến lược thiết kế thut gii thông
dng là vét cn và tham lam. Ni dung ca chương, ngoài phn trình bày v các
phương pháp còn có nhng ví d c th, c thut gii và cài đặt, để người đọc có
mt cái nhìn chi tiết v vic t thut toán đến chương trình.
1. Vét cn (Exhausted search)
Vét cn, duyt, quay lui… là mt s tên gi tuy không đồng nghĩa nhưng
cùng ch mt phương pháp rt đơn gin trong tin hc: tìm nghim ca mt bài
toán bng cách xem xét tt c các phương án có th. Đối vi con người phương
pháp này thường là không kh thi vì s phương án cn kim tra quá ln. Tuy nhiên
đối vi máy tính, nh tc độ x lí nhanh, máy tính có th gii rt nhiu bài toán
bng phương pháp vét cn.
Ưu đim ln nht ca phương pháp vét cn là luôn đảm bo tìm ra nghim
chính xác. Ngoài ra phương pháp vét cn còn có mt s ưu đim so vi các
phương pháp khác là đòi hi rt ít b nh và cài đặt đơn gin. Hn chế duy nht
ca phương pháp này là thi gian thc thi rt ln, độ phc tp thường bc mũ.
Do đó vét cn thường ch áp dng tt vi các bài toán có kích thước nh.
1.1. Bài toán tìm cu hình t hp
Thường nhng bài toán trong Tin hc có yêu cu dng: tìm các đối tượng x
tho mãn nhng điu kin nht định trong mt tp S các đối tượng cho trước. Bài
toán tìm cu hình t hp là bài toán yêu cu tìm các đối tượng x có dng là mt
vector tho mãn các điu kin sau:
1. Đối tượng x gm n phn t: x = (x1,x2,…xn).
2. Mi phn t xi có th nhn mt trong các giá tr ri rc a1, a2, … am.
3. x tho mãn các ràng buc có th cho bi hàm logic G(x).
Tu tng trường hp mà bài toán có th yêu cu: tìm mt nghim, tìm tt c
nghim hoc đếm s nghim.
Trước hết chúng ta nhc li mt s cu hình t hp cơ bn.
a) T hp
Mt t hp chp k ca n là mt tp con k phn t ca tp n phn t.
Chng hn tp {1,2,3,4} có các t hp chp 2 là: {1,2}, {1,3, {1,4, {2,3}, {2,4},
{3,4}. Vì trong tp hp các phn t không phân bit th t nên tp {1,2} cũng là
tp {2,1} và do đó, ta coi chúng ch là mt t hp.
Bài toán đặt ra cho chúng ta là hãy xác định tt c các t hp châp k ca
tp n phn t. Để đơn gin ta ch xét bài toán tìm các t hp ca tp các s
nguyên t 1 đến n. Đối vi mt tp hu hn bt kì, bng cách đánh s th t ca
các phn t, ta cũng đưa được v bài toán đối vi tp các s nguyên t 1 đến n.
Nghim cn tìm ca bài toán tìm các t hp chp k ca n phn t phi tho mãn
các điu kin sau:
1. Là mt vector x =(x1,x2,…xk)
2. xi ly giá tr trong tp {1,2,…n}
3. Ràng buc: xi<xi+1 vi mi giá tr i t 1 đến k-1.
Có ràng buc 3 là vì tp hp không phân bit th t phn t nên ta sp xếp các
phn t theo th t tăng dn.
b) Chnh hp lp
Chnh hp lp chp k ca n là mt dãy k thành phn, mi thành phn là mt
phn t ca tp n phn t, có xét đến th t và không yêu cu các thành phn khác
nhau.
Mt ví d d thy nht ca chnh hp lp là các dãy nh phân. Mt dãy nh
phân độ dài m là mt chnh hp lp chp m ca tp 2 phn t {0,1}. Chng hn
101 là mt dãy nh phân độ dài 3. Ngoài ra ta còn có 7 dãy nh phân độ dài 3 na
là 000, 001, 010, 011, 100, 110, 111. Vì có xét th t nên dãy 101 và dãy 011 là 2
dãy khác nhau.
Như vy, bài toán xác định tt c các chnh hp lp chp k ca tp n
phn t yêu cu tìm các nghim như sau:
1. Là mt vector x =(x1,x2,…xk)
2. xi ly giá tr trong tp {1,2,…n}
3. Không có ràng buc nào gia các thành phn.
Chú ý là cũng như bài toán tìm t hp, ta ch xét đối vi tp n s nguyên t
1 đến n. Nếu tp hp cn tìm chnh hp không phi là tp các s nguyên t 1 đến n
thì ta có th đánh s các phn t ca tp đó để đưa v tp các s nguyên t 1 đến n
c) Chnh hp không lp
Khác vi chnh hp lp là các thành phn được phép lp li, tc là có th
ging nhau, chnh hp không lp chp k ca tp n phn t cũng là mt dãy k thành
phn ly t tp n phn t có xét th t nhưng các thành phn không được phép
ging nhau.
Chng hn có n người, mt cách chn ra k người để xếp thành mt hàng là
mt chnh hp không lp chp k ca n.
Mt trường hp đặc bit ca chnh hp không lp là hoán v. Hoán v ca
mt tp n phn t là mt chnh hp không lp chp n. Nói mt cách trc quan thì
hoán v ca tp n phn t là phép thay đổi v trí ca các phn t (do đó mi gi là
hoán v).
Nghim ca bài toán tìm các chnh hp không lp chp k ca tp n s
nguyên t 1 đến n là các vector x tho mãn các điu kin:
1. x có k thành phn: x = (x1,x2,…xk)
2. Các giá tr xi ly trong tp {1,2,..n}
3. Ràng buc: các giá tr xi đôi mt khác nhau, tc là xixj vi mi ij.
Đó là mt s bài toán tìm cu hình t hp cơ bn. Chúng ta s xem xét mt s
bài toán khác để thy tính ph biến ca lp các bài toán dng này.
d) Bài toán xếp hu
Cho bàn c vua nxn. Hãy xếp n con hu lên bàn c sao cho không con nào
khng chế con nào. Hai 2 con hu khng chế nhau nếu chúng trên cùng mt
hàng, mt ct hoc mt đường chéo.
Chng hn ta có mt cách đặt sau, các ô đen là các v trí đặt hu:
Để chuyn bài toán này v dng chun ca bài toán tìm cu hình t hp, ta
có có nhn xét: mi con hu phi trên mt hàng và mt ct. Do đó ta coi con hu
th i hàng i và nếu biết x[i] là ct đặt con hu th i thì ta suy ra được li gii.
Vy nghim ca bài toán có th coi là mt vector x gm n thành phn vi ý nghĩa:
1. Con hu th i được đặt hàng i và ct x[i].
2. x[i] ly giá tr trong tp {1,2…n}
3. Ràng buc: các giá tr x[i] khác nhau tng đôi mt và không có 2 con hu
trên cùng mt đường chéo.
Trong phn cài đặt, chúng ta s phân tích chi tiết v các ràng buc trên.
e) Bài toán t đẹp (xâu ABC)
Mt t đẹp là mt xâu độ dài n ch gm các kí t A,B,C mà không có 2 xâu
con liên tiếp nào ging nhau. Chng hn ABAC là mt t đẹp độ dài 4, BABCA là
mt t đẹp độ dài 5.
Bài toán tìm tt c các t đẹp độ dài n cho trước yêu cu tìm nghim là các
vector x có n thành phn:
1. xi nhn giá tr trong tp {A,B,C}
2. x không có 2 đon con liên tiếp nào bng nhau.
Trước khi trình bày v phương pháp vét cn gii các bài toán tìm cu hình t
hp, chúng ta xem xét các bài toán ti ưu t hp, vì các bài toán ti ưu t hp thc
cht là s m rng ca bài toán tìm cu hình t hp.
1.2. Bài toán ti ưu t hp
Bài toán ti ưu tng quát có th phát biu như sau: Cho tp B khác rng và
mt hàm f:BR gi là hàm mc tiêu. Cn tìm phn t x thuc B sao cho f(x) đạt
giá tr nh nht hoc ln nht. Phn t x là nghim ca bài toán còn được gi là
phương án ti ưu.
Bài toán ti ưu t hp là bài toán tìm phương án ti ưu trên tp các cu hình
t hp. Nghim ca bài toán cũng là mt vector x gm n thành phn sao cho:
1. x = (x1,x2,…xn)
2. xi ly giá tr trong tp {a1,a2,…am}
3. x tho mãn các ràng buc cho bi hàm G(x).
4. f(x) min/max.
Chúng ta s phân tích mt s bài toán ti ưu t hp đin hình. Phn ln đều
là các bài toán NPC.
a) Bài toán xếp balô
Có mt balô có ti trng m và n đồ vt, đồ vt i có trng lượng wi và có giá
tr vi. Hãy la chn các vt để cho vào balô sao cho tng trng lượng ca chúng
không quá M và tng giá tr ca chúng là ln nht.
Mi cách chn các đồ vt cho vào balô đều tương ng vi mt vector x gm
n thành phn mà xi=1 nếu chn đưa vt th i vào balô, và xi=0 nếu vt th i không
được chn.
Khi đó ràng buc tng trng lượng các đồ vt không quá ti trng ca balô
được viết thành:
mwx
n
1i
ii
=
Hàm mc tiêu là tng giá tr ca các đồ vt được chn:
maxvx)x(f
n
1i
ii =
=
Nghim ca bài toán cũng là mt vector x gm n thành phn sao cho:
1. x = (x1,x2,…xn)
2. xi ly giá tr trong tp {0,1}
3. Ràng buc:
mwx
n
1i
ii
=
4. max . vx)x(f
n
1i
ii =
=
b) Bài toán người du lch
Có n thành ph, d[i,j] là chi phí để di chuyn t thành ph i đến thành ph j.
(Nếu không có đường đi thì d[i,j] = ). Mt người mun đi du lch qua tt c các
thành ph, mi thành ph mt ln ri tr v nơi xut phát sao cho tng chi phí là
nh nht. Hãy xác định mt đường đi như vy.
Phương án ti ưu ca bài toán cũng là mt vector x, trong đó xi là thành ph
s đến thăm ti ln di chuyn th i. Các điu kin ca x như sau:
1. x = (x1,x2,…xn)
2. xi ly giá tr trong tp {1,2,…n}
3. Ràng buc: xi xj vi mi ij và d[xi,xi+1]< vi mi i=1,2,..n, coi
xn+1=x1.
4. f(x) = min]x,x[d
n
1i
1ii
=
+
Trên đây ta đã xét mt s bài toán tìm cu hình t hp và bài toán ti ưu t hp.
Trong phn tiếp chúng ta s tìm hiu phương pháp vét cn gii các bài toán đó.
1.3. Phương pháp vét cn gii các bài toán cu hình t hp và ti ưu t hp
Phương pháp vét cn là phương pháp rt tng quát để đơn gin để gii các
bài toán cu hình t hp và ti ưu t hp. ý tưởng cơ bn là: bng mt cách nào đó
sinh ra tt c các cu hình có th ri phân tích các cu hình bng các hàm ràng
buc và hàm mc tiêu để tìm phương án ti ưu (do đó phương pháp này còn được
gi là duyt toàn b).