III.4 K TH UT QUAY LU

Một phần của tài liệu Giáo trình phân tích giải thuật (Trang 46 - 59)

5. Vn nghiên cu ca trang k ti p

III.4 K TH UT QUAY LU

III.4.1- nh tr cây bi u th c s h c III.4.2- K thu t c t t a Alpha-Beta III.4.3- K thu t nhánh c n

K thu t quay lui (backtracking) nh tên g i c a nó, là m t quá trình phân tích i xu ng. T i i b c phân tích chúng ta ch a gi i quy t c v n do còn thi u c li u nên c ph i phân tích cho t i các m d ng, n i chúng ta xác nh c l i gi i c a chúng ho c là xác nh c là không th (ho c không nên) ti p t c theo h ng này. T các m d ng này chúng ta quay ng c tr l i theo con ng mà chúng ta ã i qua gi i quy t các v n còn t n ng và cu i cùng ta s gi i quy t

c v n ban u.

ây chúng ta s xét 3 k thu t quay lui: “vét c n” là k thu t ph i i t i t t c các m d ng i m i quay lui. “C t t a Alpha-Beta” và “Nhánh-C n” là hai k thu t cho phép chúng ta không c n thi t ph i i t i t t c các m d ng, mà ch c n i n m t s m nào ó và d a vào m t s suy lu n có th quay lui s m. Các k thu t này s c trình bày thông qua m t s bài toán c th sau.

III.4.1- nh tr cây bi u th c s h c

Trong các ngôn ng l p trình u có các bi u th c s h c, vi c d ch các bi u th c này òi h i ph i ánh giá ( nh tr ) chúng. làm c u ó c n ph i có m t bi u di n trung gian cho bi u th c. M t trong các bi u di n trung gian cho bi u th c là cây bi u th c.

Cây bi u th c s h c là m t cây nh phân, trong ó các nút lá bi u di n cho các toán h ng, các nút trong bi u di n cho các toán t .

Ví d 3-3: Bi u th c 5 + 2 * 3 - 4 s c bi u di n b i cây trong hình 3-8:

Tr c a m t nút lá chính là tr c a toán h ng mà nút ó bi u di n. Tr c a m t nút trong có c b ng cách l y toán t mà nút ó bi u di n áp d ng vào các con c a nó.

Nh v y nh tr cho nút g c, chúng ta ph i nh tr cho hai con c a nó, i v i m i con ta xem nó có ph i là nút lá hay không, n u không ph i ta l i ph i xét hai con c a nút ó. Quá trình c ti p

c nh v y cho t i khi g p các nút lá mà giá tr c a chúng ã c bi t, quay lui nh tr cho các nút cha c a các nút lá và c nh th mà nh tr cho t tiên c a chúng. ó chính là k thu t quay lui vét

n, vì chúng ta ph i l n n t t c các nút lá m i nh tr c cho các nút trong và do th m i nh tr c cho nút g c.

Ví d 3-4: V i cây bi u th c trong ví d 3-3. nh tr cho nút - chúng ta ph i nh tr cho nút + và nút 4. Nút 4 là nút lá nên giá tr c a nó là 4. nh tr cho nút + ta ph i nh tr cho nút 5 và nút *. Nút 5 là nút lá nên giá tr c a nó là 5. nh tr cho nút *, ta ph i nh tr cho nút 2 và nút 3. C hai nút này u là lá nên giá tr c a chúng t ng ng là 2 và 3. Quay lui l i nút *, l y toán t * áp d ng cho hai con c a nó là 2 và 3 ta c tr c a nút * là 6. Quay lui v nút +, l i áp d ng toán t + vào hai con c a nó là 5 và 6 c tr c a nút + là 11. Cu i cùng quay v nút -, áp d ng toán t - vào hai con

a nó là 11 và 4 ta c tr c a nút - (nút g c) là 7. ó chính là tr c a bi u th c. Trong hình 3-9, m i tên nét t minh h a quá trình i tìm nút lá và m i tên nét li n minh h a quá trình quay lui nh tr cho các nút, các s bên ph i

i nút là tr c a nút ó.

Gi i thu t s b nh tr m t nút b t k nh sau:

function Eval(n : node): real; begin

if n là lá then return (tr c a toán h ng trong n)

else return (Toán t trong n (Eval (Con trái c a n), Eval (Con ph i c a n)) ); end;

Mu n nh tr cho cây bi u th c T, ta g i Eval(ROOT(T)).

III.4.2- K thu t c t t a Alpha-Beta Cây trò ch i

Xét m t trò ch i trong ó hai ng i thay phiên nhau i n c c a mình nh vua, c t ng, carô,... Trò ch i có m t tr ng thái b t u và m i n c i s bi n i tr ng thái hi n hành thành m t tr ng thái m i. Trò ch i s k t thúc theo m t quy nh nào ó, theo ó thì cu c ch i s

n n m t tr ng thái ph n ánh có m t ng i th ng cu c ho c m t tr ng thái mà c hai u th không th phát tri n c n c i c a mình, ta g i nó là tr ng thái hòa c . Ta tìm cách phân tích xem t m t tr ng thái nào ó s d n n u th nào s th ng v i u ki n c hai u th u có trình nh nhau.

M t trò ch i nh v y có th c bi u di n b i m t cây, g i là cây trò ch i. M i m t nút c a cây bi u di n cho m t tr ng thái. Nút g c bi u di n cho tr ng thái b t u c a cu c ch i. M i nút lá bi u di n cho m t tr ng thái k t thúc c a trò ch i (tr ng thái th ng thua ho c hòa). N u tr ng thái x

c bi u di n b i nút n thì các con c a n bi u di n cho t t c các tr ng thái k t qu c a các n c i có th xu t phát t tr ng thái x.

Ví d 3-5: Xét trò ch i carô có 9 ô. Hai ng i thay phiên nhau i X ho c O. Ng i nào i c 3 ô th ng hàng (ngang, d c, xiên) thì th ng cu c. N u ã h t ô i mà ch a phân th ng b i thì hai u th hòa nhau. M t ph n c a trò ch i này c bi u di n b i cây sau:

Trong cây trò ch i trên, các nút lá c tô n n và vi n khung ôi d phân bi t v i các nút khác. Ta có th gán cho m i nút lá m t giá tr ph n ánh tr ng thái th ng thua hay hòa c a các u th . Ch ng h n ta gán cho nút lá các giá tr nh sau:

· 1 n u t i ó ng i i X ã th ng, · -1 n u t i ó ng i i X ã thua và

· 0 n u hai u th ã hòa nhau.

Nh v y t m t tr ng thái b t k , n l t mình, ng i i X s ch n cho mình m t n c i sao cho d n n tr ng thái có giá tr l n nh t (trong tr ng h p này là 1). Ta nói X ch n n c i MAX, nút mà t ó X ch n n c i c a mình c g i là nút MAX. Ng i i O n l t mình s ch n m t n c

i sao cho d n n tr ng thái có giá tr nh nh t (trong tr ng h p này là -1, khi ó X s thua và do ó O s th ng). Ta nói O ch n n c i MIN, nút mà t ó O ch n n c i c a mình c g i là nút MIN. Do hai u th luân phiên nhau i n c c a mình nên các m c trên cây trò ch i c ng luân phiên nhau là MAX và MIN. Cây trò ch i vì th còn có tên là cây MIN-MAX. Ta có th a ra m t quy t c nh tr cho các nút trên cây ph n ánh tình tr ng th ng thua hay hòa và kh n ng th ng cu c c a hai u th .

N u m t nút là nút lá thì tr c a nó là giá tr ã c gán cho nút ó. Ng c l i, n u nút là nút MAX thì tr c a nó b ng giá tr l n nh t c a t t c các tr c a các con c a nó. N u nút là nút MIN thì tr

a nó là giá tr nh nh t c a t t c các tr c a các con c a nó.

Quy t c nh tr này c ng g n gi ng v i quy t c nh tr cho cây bi u th c s h c, m khác bi t ây là các toán t là các hàm l y max ho c min và m i nút có th có nhi u con. Do v y ta có th dùng k thu t quay lui nh tr cho các nút c a cây trò ch i.

cài t ta có m t s gi thi t sau:

· Ta có m t hàm Payoff nh n vào m t nút lá và cho ta giá tr c a nút lá ó. · Các h ng và - t ng ng là các tr Payoff l n nh t và nh nh t.

· Khai báo ki u ModeType = (MIN, MAX) xác nh nh tr cho nút là MIN hay MAX. · M t ki u NodeType c khai báo m t cách thích h p bi u di n cho m t nút trên cây ph n ánh m t tr ng thái c a cu c ch i.

· Ta có m t hàm is_leaf xác nh xem m t nút có ph i là nút lá hay không? · Hàm max và min t ng ng l y giá tr l n nh t và giá tr nh nh t c a hai giá tr .

Gi i thu t vét c n nh tr cây trò ch i

Hàm Search nh n vào m t nút n và ki u mode c a nút ó (MIN hay MAX) tr v giá tr c a nút.

N u nút n là nút lá thì tr v giá tr ã c gán cho nút lá. Ng c l i ta cho n m t giá tr t m value là - ho c tùy thu c n là nút MAX hay MIN và xét con c a n. Sau khi m t con c a n có giá tr V thì t l i value = max(value,V) n u n là nút MAX và value = min(value,V) n u n là nút MIN. Khi

t c các con c a n ã c xét thì giá tr t m value c a n tr thành giá tr c a nó.

function Search(n : NodeType; mode: ModeType): real; var C : NodeType ; { C là m t nút con c a nút n}

Value : real;

tr c a nút n } begin

if is_leaf(n) then return ( Payoff(n) ) else begin

{Kh i t o giá tr t m cho n }

if mode = MAX then value := - else value := ;

{Xét t t c các con c a n, m i l n xác nh c giá tr c a m t nút con, ta ph i t l i giá tr m value. Khi ã xét h t t t c các con thì value là giá tr c a n}

for v i m i con C c a n do if mode = MAX then

Value := max(Value, Search(C, MIN) ) else Value := min(Value, Search(C, MAX) ); return (value);

end; end;

thu t c t t a Alpha-Beta (Alpha-Beta Pruning)

Trong gi i thu t vét c n trên, ta th y nh tr cho m t nút nào ó, ta ph i nh tr cho t t c các nút con cháu c a nó, và mu n nh tr cho nút g c ta ph i nh tr cho t t c các nút trên cây. S

ng các nút trên cây trò ch i tuy h u h n nh ng không ph i là ít. Ch ng h n trong cây trò ch i ca rô nói trên, n u ta có bàn c bao g m n ô thì có th có t i n! nút trên cây (trong tr ng h p trên là 9!).

i v i các lo i c khác nh c vua ch ng h n, thì s l ng các nút còn l n h n nhi u. Ta g i là m t bùng n t h p các nút.

Chúng ta c g ng tìm m t cách sao cho khi nh tr m t nút thì không nh t thi t ph i nh tr cho t t c các nút con cháu c a nó. Tr c h t ta có nh n xét nh sau:

N u P là m t nút MAX và ta ang xét m t nút con Q c a nó (d nhiên Q là nút MIN). Gi s Vp là m t giá tr t m c a P, Vq là m t giá tr t m c a Q và n u ta có Vp Vq thì ta không c n xét các con ch a xét c a Q n a. Vì n u có xét thì giá tr c a Q c ng s nh h n ho c b ng Vq và do ó không

nh h ng gì n Vp. T ng t n u P là nút MIN (t t nhiên Q là nút MAX) và Vp Vq thì ta c ng không c n xét n các con ch a xét c a Q n a. Vi c không xét ti p các con ch a c xét c a nút Q

i là vi c c t t a Alpha-Beta các con c a nút Q.

Trên c s nh n xét ó, ta nêu ra quy t c nh tr cho m t nút không ph i là nút lá trên cây nh sau:

1. Kh i u nút MAX có giá tr t m là - và nút MIN có giá tr t m là .

2. N u t t c các nút con c a m t nút ã c xét ho c b c t t a thì giá tr t m c a nút ó tr thành giá tr c a nó.

3. N u m t nút MAX n có giá tr t m là V1 và m t nút con c a nó có giá tr là V2 thì t giá tr m m i c a n là max (V1,V2). N u n là nút MIN thì t giá tr t m m i c a n là min (V1,V2).

function cat_tia(Q: NodeType; mode: ModeType; Vp: real): real; var C : NodeType ; { C là m t nút con c a nút Q}

Vq : real;

{Vq là giá tr t m c a Q, sau khi t t c các con c a nút Q ã xét ho c b c t t a thì Vq là giá tr a nút Q}

begin

if is_leaf(Q) then return ( Payoff(Q) ) else begin

{ Kh i t o giá tr t m cho Q }

if mode = MAX then Vq := - else Vq := ;

{Xét các con c a Q, m i l n xác nh c giá tr c a m t nút con c a Q, ta ph i t l i giá tr m Vq và so sánh v i Vp có th c t t a hay không}

Xét C là con trái nh t c a Q; while C là con c a Q DO

if mode = MAX then begin

Vq:= max(Vq, Cat_tia(C, MIN, Vq)); if Vp Vq then return(Vq);

end

else begin Vq := min(Vq, Cat_tia(C, MAX, Vq)); if Vp Vq then return(Vq);

end; return (Vq); end;

end;

Ví d 3-6: V n d ng quy t c trên nh tr cho nút A trong cây trò ch i trong ví d 3-5. A là nút MAX, lúc u nó có giá tr t m là - , xét B là con c a A, B là nút lá nên giá tr c a nó là giá tr ã c gán 1, giá tr t m c a A bây gi là max (- ,1) = 1. Xét con C c a A, C là nút MIN, giá tr t m lúc u c a C là . Xét con E c a C, E là nút MAX, giá tr t m c a E là - . Xét con I c a E, I là nút lá nên giá tr c a nó là 0. Quay lui l i E, giá tr t m c a E bây gi là max (- ,0) = 0. Vì E ch có t con là I ã xét nên giá tr t m 0 tr thành giá tr c a E. Quay lui l i C, giá tr t m m i c a C là min ,0) = 0. A là nút MAX có giá tr t m là 1, C là con c a A, có giá tr t m là 0, 1>0 nên ta không c n xét con F c a C n a. Nút C có hai con là E và F, trong ó E ã c xét, F ã b c t, v y giá tr t m 0

a C tr thành giá tr c a nó. Sau khi có giá tr c a C, ta ph i t l i giá tr t m c a A, nh ng giá tr m này không thay i vì max (1,0) = 1. Ti p t c xét nút D, D là nút MIN nên giá tr t m là , xét nút con G c a D, G là nút MAX nên giá tr t m c a nó là - , xét nút con J c a G. Vì J là nút lá nên có giá tr 0. Quay lui l i G, giá tr t m c a G bây gi là max (- ,0) = 0 và giá tr t m này tr thành giá tr c a G vì G ch có m t con J ã xét. Quay lui v D, giá tr t m c a D bây gi là min ( ,0) = 0. Giá tr t m này c a D nh h n giá tr t m c a nút A MAX là cha c a nó nên ta c t t a con H ch a c xét c a D và lúc này D có giá tr là 0. Quay lui v A, giá tr t m c a nó v n không thay i, nh ng lúc này c 3 con c a A u ã c xét nên giá tr t m 1 tr thành giá tr c a A. K t qu c minh h a trong hình sau:

III.4.3-K thu t nhánh c n

V i các bài toán tìm ph ng án t i u, n u chúng ta xét h t t t c các ph ng án thì m t r t

Một phần của tài liệu Giáo trình phân tích giải thuật (Trang 46 - 59)

Tải bản đầy đủ (PDF)

(83 trang)