You are on page 1of 69

Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1/ 69

Chương 06
Phương pháp sinh

huật toán quay lui!
10 ti"t
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #/ 69
$%& ti'u
(i)i th*&h +ư,& sinh d- li.u là g/!
0i"t s1 d%ng 23t s4 gi)i thuật sinh!
0i"t s1 d%ng gi)i thuật quay lui +5 gi)i 23t
s4 6ài toán!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7/ 69
83i dung
9n tập
0ài toán t: h,p
Phương pháp sinh
huật toán quay lui
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;/ 69
9n tập
<à2 +. quy là hà2 2à t=ong th>n hà2 l?i
g@i &h*nh nA!
<à2 +. quy BC2 hi.u qDa v/: t4n 63 nhE
va g@i hà2 qFa nhiGu lHn! uy nhi'n vi"t
hà2 +. quy =It ngJn g@n!uy nhi'n nhiGu
gi)i thuật vKn ph)i dLng BM thuật +. quy v/
vi.& Bh1 +. quy BhNng dO dàng!
PQng lRp và sta&B là nh-ng BM thuật giFp
Bh1 gi)i thuật +. quy!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S/ 69
6!1T 0ài toán t: h,p
CA n 6i"n U
1
V U
#
V U
7
V !!!V U
n
$Wi 6i"n U
i
&A th5 2ang t=X thu3& vG 1 tập h,p P
i
 $iGn &Da 6ài toán là tập t*&h
P
1
U P
#
U

P
7
U !!! U P
n
PhCp gán t=X Yassign2entZ: [à 23t 63 t=X
a
1
V a
#
V a
7
V !!!V a
n
=ong +A U
i
 a
i
∈ P
i
$3t l\i gi)i &Da 6ài toán là 1 phCp gán t=X!
$3t phCp gán t=X +ư,& g@i là 23t &Iu h/nh!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6/ 69
0ài toán t: h,p
Thí dụ: CA 7 nh>n vi'n 6)o v.
là2 7 &a sángV &hiGu t4i! =ong
1 &a &h] &A 1 6)o v.! <^i &á&
&á&h 64 t=* &á& 6)o v._
Mã hóa bài toán:
{x, y, z} là tập 6i"n &A th` ta
2N t) &ho 7 &a :sángV &hiGuV t4i
theo th` ta!
$iGn t=X &Da 7 6i"n là
{ a,b,c } 2N t) &ho 7 6)o v.!
Các phép gán
x y z
a b c
a c b
b a c
b c a
c a b
c b a
Số Iời giải Ià số
hoán vị của tập hçp 3
phân tú này:
3*2*1 = 3! = 6.
Bài toán Iiêt kê các hoán vị của môt tập hçp n
phân tú có thú tµ có dô phúc tap n!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide b/ 69
0ài toán t: h,p
Thí dụ: Tìm số
chuỗi có độ dài 3
ký tự xyz vEi
U ∈ c aV6V&dV
y ∈ c dVedV
e ∈ c 2VnVtd
8hận UCt: 7 6i"n
&A 7 2iGn t=X Bhá&
nhau
x y z
a d m
a d n
a d t
a e m
a e n
a e t
b d m
b d n
b d t
b e m
b e n
b e t
c d m
c d n
c d t
c e m
c e n
c e t
Số phép gán:
3 * 2 * 3 = 18
Tích của các
số phân tú
của các
miên trị
Ðô phúc tap: n
m
vói
n: số phân tú trung bình
của môi miên trị,
m: Ià số miên trị
Chương 6: Phương pháp sinh và thuật toán quay lui Slide f/ 69
0ài toán t: h,p
Bài toán tổ hợp
có độ phức tạp là n! hoặc n
m
Làm thê nào tao ra
các phép gán trị ?
Phuong pháp sinh.
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 9/ 69
6!#T Phương pháp sinh
Y(ene=atingZ
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 10/ 69
6!#!1T gXnh nghha
Sinh: ?o =a d- li.u!
Phương pháp sinh: i d- li.u 6an +HuV sinh =a
d- li.u B" ti"p &ho +"n Bhi B"t thF&!
jLng +5 gi)i quy"t 6ài toán li.t B' &Da lk thuy"t
t: h,p!
giGu Bi.n &Da thuật toán sinh:
Y1Z CA th5 Uá& +Xnh 1 th` ta tập &á& &Iu h/nh &Da
t: h,p Yth` ta &Da &á& phCp gán t=XV thư\ng
dLng th` ta ti +i5nZ!
Y#ZCA 23t &Iu h/nh &u4i Y+iGu Bi.n B"t thF& &Da
gi)i thuậtZ!
Y7Z CA 23t &á&h +5 suy =a +ư,& &Iu h/nh B" ti"p!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 11/ 69
h` ta ti +i5n
S1="1234589"
S2="1235789"
S1 < S2 nêu có 1 vị trí i tai dó
S1[ i ] < S2[ i ]
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1#/ 69
6!#!#T $3t th* d%
Bài toán:Tìm số chuỗi có
độ dài 3 ký tự xyz vEi
U ∈ c aV6V&dV y ∈ c dVedV
e ∈ c 2VnVtd
x y z
a d m
a d n
a d t
a e m
a e n
a e t
b d m
b d n
b d t
b e m
b e n
b e t
c d m
c d n
c d t
c e m
c e n
c e t
Câu hình ban dâu: trị dâu
tiên của môi miên trị
Câu hình cuối: trị cuối cùng
của môi miên trị
Cách sinh:Lây trị kêt tiêp của
môi miên trị theo co chê
vòng tròn
Dùng thú
tµ tù diên
dê so sánh
các phép
gán trị.
Thí dµ:
adm < adn
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 17/ 69
6!#!7T huật toán sinh t:ng quát!
Procedure Generate
Begin
c = InitiaIConfigure; //câu hình ban dâu
Process (c); // xú Iý câu hình dang có
if c=LastConfigure then Stop:=true
eIse stop := faIse;
whiIe (not stop) do
Begin
//Sinh câu hình kê tiêp tù câu hình dang có
c=getNextConfigure(c);
Process (c); // xú Iý câu hình này
if c= LastConfigure then stop = true;
End;
End;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1;/ 69
6!#!;T 0ài toán &huWi 7 Bk ta
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1S/ 69
0ài toán &huWi 7 Bk ta!!!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 16/ 69
0ài toán &huWi 7 Bk ta!!!
Bài toán:Tìm số
chuỗi có độ dài 3 ký
tự xyz vEi
U ∈ c aV6V&dV
y ∈ c dVedV
e ∈ c 2VnVtd
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1b/ 69
6!#!ST 0ài toán li.t B' &á& tập &on
&Da 1 tập gl2 n phHn t1
$m hAa tập 6i"n: ập 6i"n gl2 n 6i"n Bk ta theo th` ta &á&
phHn t1  2)ng n Bk ta!
$iGn t=X &Da 2Wi 6i"n cn0oV n1od! n0o 2N t) &ho t/nh hu4ng phHn t1
này BhNng &A t=ong tập &onV n1o: 2N t) &ho t/nh hu4ng phHn t1
này &A 2Rt t=ong tập &on!
PEi tập &ha là ; phHn t1 pqc aV 6V &V d dV &A th5 dLng 2)ng
r0111s 2N t) &ho tập &on c 6V&Vd d!
 $Wi tập &on +ư,& 6i5u diOn là 23t &huWi YU>uZ nhX ph>n!
=?ng thái Bhti t?o: r0000s 2ang k nghha tập t=4ng!
=?ng thái B"t thF&: r1111s 2ang k nghha là tập &ha!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 1f/ 69
0ài toán li.t B' &á& tập &on!!!!
PEi tập &ha gl2 ; phHn t1V &A #
;
tập &on 6 vEi
&á& 6i5u diOn:
t
vars p(b)
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
vars p(b)
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
Vói thú tµ
tù diên, tập con
sau Ión hon tập
con truóc 1 don vị
theo cách tính
chuôi nhị phân
i= n-1;
whiIe (i>=0 && vars[i]=='1') vars[i--] = '0';
vars[i] = '1';
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 19/ 69
0ài toán li.t B' &á& tập &on!!!!
Cá&h &3ng th'2 1 vào &huWi nhX ph>n:
0000 0001
0001 0010
0011 0100
0111 1000
u
Gçi i : vị trí bit 0 dâu tiên tù
bên phải.
u
Cho các bit 1 bên phải vị trí i
thành 0
u
Cho bit i mang trị 1
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #0/ 69
0ài toán li.t B' &á& tập &on!!!!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #1/ 69
0ài toán li.t B' &á& tập &on!!!!
Thêm dòng: deIete[ ] vars;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ##/ 69
0ài toán li.t B' &á& tập &on!!!!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #7/ 69
0ài toán li.t B' &á& tập &on!!!!
8hận UCt: CA th5 t4i ưu l?i &hương t=/nh
+5 6Et +i &á& vQng lRp!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #;/ 69
0ài toán li.t B' &á& tập &on!!!!
Kêt hçp viêc tìm câu
hình kê vói viêc kiêm tra
ngung Iåp
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #S/ 69
0ài toán li.t B' &á& tập &on!!!!
Thêm dòng: deIete[ ] vars;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #6/ 69
0ài tập
Pi"t &hương t=/nh li.t B' &á& tập &on &Da
tập c aV6V&VdVeVvVgVh d
puIt theo d?ng
wx
wax
waV6x
!!!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #b/ 69
6!#!6T 0ài toán tập &on BTphHn t1
[i.t B' &á& tập &on B phHn t1 &Da tập n phHn t1!
h* d%: Cá& tập &on 7 phHn t1 &Da tập
{ 1,2,3,4,5 } là:
c 1V#V7 d c #V7V; d
c 1V#V; d c #V7VS d
c 1V#VS d c #V;VS d
c 1V7V; d c 7V;VS d
c 1V7VS d
c 1V;VS d
C
S
7
q Sy/ Y7y z YST7ZyZ
q Sy / Y7y z #yZ
q ;zS/# q 10
Tô hçp n chập k
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #f/ 69
0ài toán tập &on BTphHn t1
{nh U? tập h,p 6It B| n phHn t1 vào tập
pqc 1V#!!!n d
$3t tập &on B phHn t1 &Da p là 23t 63 &A
th` ta a
1
a
#
a
7
!!!!! a
B
vEi
1} a
1
~ a
#
~ a
7
~!!!!! ~ a
B
} n
Chương 6: Phương pháp sinh và thuật toán quay lui Slide #9/ 69
0ài toán tập &on BTphHn t1
ập &on +Hu: c 1V#V7V!!!VB d
h* d% c 1V#V7 d vEi Bq7V nqS
ập &on &u4i:c YnTB•1ZV YnTB•#Z V !!!V n d
h* d%: c 7V;VS d vEi Bq7V nqS
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 70/ 69
Cách sinh tập con kê tiêp tù tập con dã có
a
1
a
2
a
3
a
4
...a
k
, chi số ó dây di tù 1
Y1Z /2 vX t=* +Hu ti'n ti 6'n
ph)i 1 vX t=* i sao &ho awix



nTB•i
iqB•
‚hile YawixqqnTB•iZ iTT •
Y#Z hay awix 6ƒng awix •1
awixq awix • 1•
Y7Z hay &á& t=X sau i Yaw„xZ 6ƒng
&á& t=X awix•„Ti V!!!
vo= Y„qi•1•„~qB•„••Z
aw„xq awix• „ Ti•
n=8, k=6
{ 1,2,5,6,7,8 }
Yiq6V nTB•i qfZ
{ 1,3,5,6,7,8 }
{ 1,3,4,5,6,7 }
Tìm vị trí
dâu tiên
khác vói
nhóm trị ó
cuối tập
cha theo
thú tµ
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 71/ 69
0ài toán tập &on BTphHn t1
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7#/ 69
0ài toán tập &on BTphHn t1
Thêm dòng: deIete[ ] resuIt;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 77/ 69
0ài tập
?o tập tin v…n 6)n &A t'n Tapcon.in
&h`a n3i dung : 10 ;
† nghha: s4 +Hu: s4 phHn t1 &Da tậpV s4 B"
ti"p là s4 phHn t1 &Da tập &on!
jLng BM thuật sinhV vi"t &hương t=/nh ghi
&á& tập &on &Da tập này l'n vile
Tapcon.out
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7;/ 69
6!#!bT0ài toán hoán vX tập n phHn t1
Pe=2utation!
Cho tập p q c 1V#V7V!!!V nd! <my li.t B' tIt &) &á& hoán vX &Da
tập này!
$3t hoán vX &Da p là 23t 63 ‡ q Ya
1
V a
#
V!!!V a
n
Z vEi a
i
€ a

n"u i € „
gXnh nghha 1 th` ta:
‡ q Ya
1
V a
#
V!!!Va
BT1
V a
k
V !!! a
n
Z là hoán vX t=ưE& &Da
‡oq Yao
1
V ao
#
V!!!Vao
BT1
V a'
k
V !!! ao
n
Z n"u t/2 +ư,& vX t=* B sao &ho a
k

< a'
k
h* d% : 1#7;56b là hoán vX t=ưE& &Da
1#7;6Sb
g>y &h*nh là th` ta ti +i5n!
g3 ph`& t?p ny
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7S/ 69
Cá& hoán vX &Da pqc1V#V7V;d
c1V#V7V;d Y+HuZ
c1V#V;V7d
c1V7V#V;d
c1V7V;V#d
c1V;V#V7d
c1V;V7V#d
c#V1V7V;d
c#V1V;V7d
c#V7V1V;d
c#V7V;V1d
c#V;V1V7d
c#V;V7V1d
c7V1V#V;d
c7V1V;V#d
c7V#V1V;d
c7V#V;V1d
c7V;V1V#d
c7V;V#V1d
c;V1V#V7d
c;V1V7V#d
c;V#V1V7d
c;V#V7V1d
c;V7V1V#d
c;V7V#V1d Y &u4iZ
{3,4,2,1}
{3,4,2,1}
{4,3,2,1}
{4,1,2,3}
j=1
k=2
hoán vị
a[j], a[k]
Ðảo mảng
con tù
a[j+1] dên
a[n]
chi số di tù 1
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 76/ 69
(i)i thuật t/2 hoán vX B" ti"p
t=?ng thái t=ưE& c1V7V;V#d t=?ng thái sau: c1V;V#V7d
i!i th"#t
/2 &h] s4 lEn nhIt „ 2à a

~a
„•1
ti ph*a ph)i v/
+>y là phHn t1 sˆ 6X hoán vX!
1 3 ; # Y „q#Z  j=n-1; whiIe (a[j]>a[j+1]) j--;
/2 vX t=* +Hu ti'n B +i ngư,& ti &u4i tập t=X vEi
awBx ‰ aw„x
1 3 ; # Y Bq7Z  Bqn• ‚hile Yaw„x‰awBxZ BTT•
<oán vX aw„x vEi awBx
1 ; 3 #
[ật ngư,& +o?n a
„•1
!!! a
n
1 ; # 3 t=?ng thái B" ti"p
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7b/ 69
0ài toán hoán vX
{1,2,3,4,5,..., n} {n,..., 5,4,3,2,1}
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 7f/ 69
0ài toán hoán vX
Tìm chi số Ión
nhât j mà aj<aj+1
tù phía phải vì
dây Ià phân tú së
bị hoán vị.
Tìm vị trí dâu tiên
k di nguçc tù
cuối tập trị vói
a[k] > a[j]
Hoán vị a[j], a[k]
Ðảo nguçc nhóm trị
a[j+1],... a[n]
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 79/ 69
0ài toán hoán vX
Thêm dòng: deIete[ ] vars;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;0/ 69
0ài toán hoán vX T Š"t qDa
4!= 24
hoán vị
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;1/ 69
Bài tập
?o vile v…n 6)n hoanvi.out &A d?ng
jQng +Hu: 1 s4 nguy'n n
Cá& dQng sau là &á& hoán vX &Da tập n phHn t1!
h* d%:
S
1 # 7 ; S
1 # 7 S ;
1 # ; 7 S
!!!!!!!!!!!!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;#/ 69
6.2.8- Bài toán chia 1 số nguyên thành
tông các số nguyên bé hon
h* d%: nqb
Cá& B"t qDa
b
6 1
S #
S 1 1
; 7
; # 1
; 1 1 1
7 7 1
7 # #
7 # 1 1
7 1 1 1 1
# # # 1
# # 1 1 1
# 1 1 1 1 1
1 1 1 1 1 1 1
Cách chia: Số truóc >= số sau.

Nguçc thú tµ tù diên

Tai 1 thời diêm, số phân tú Ià k

Båt dâu: k=1, kêt thúc: k=n
Trang thái dâu: 1 trị Ià n
Trang thái cuối: dãy n các số 1
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;7/ 69
0ài toán &hia s4 nguy'n
nq #0 V t=?ng thái Bq1S
S ; 1 1 1 1 1 1 1 1 1 1 1 1 1
//số phải giảm Ià 4, số dâu tiên >1 tù bên phải, vị trí
i=2 vói chi số di tù 1, giảm trị này 1 don vị
S 7 // số trị phải chia Iai Ià 14 = số trị 1 bên phải +1= k-
i+1=15-2+1=14
Số së chia ra di tù a[2]=3, 14/3 duçc 4 Iân trị thêm
vào Ià 3, du 2
5 3 3 3 3 3 ( k=i+SốLânBångTrị)
5 3 3 3 3 3 2 //thêm phân du vào cuối (k++)
Ðây chính Ià trang thái kê tiêp- xong
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;;/ 69
0ài toán &hia s4 nguy'n
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;S/ 69
0ài toán &hia s4 nguy'n
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;6/ 69
0ài toán &hia s4 nguy'n
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;b/ 69
0ài toán &hia s4 nguy'n
Thêm dòng: deIete[ ] vars;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;f/ 69
0ài toán &hia s4 nguy'n
Chương 6: Phương pháp sinh và thuật toán quay lui Slide ;9/ 69
6!7Thuật toán quay lui
Y6a&Bt=a&BingZ
ŠhNng ph)i &Iu h/nh nào &‹ng +ư,& sinh =a ti
&Iu h/nh t=ưE& +A 23t &á&h dO dàng!
Phương pháp sinh B" ti"p &h] gi)i quy"t +ư,&
&á& 6ài toán +ơn gi)n!
ŠhNng ph)i &Iu h/nh 6an +Hu và &Iu h/nh B"
ti"p +ư,& nhận di.n 23t &á&h dO dàngV nhiGu
Bhi ph)i &h`ng 2inh là tln t?i &hFng!
PEi 6ài toán li.t B' ph`& t?pV thuật toán
6a&Bt=a&Bing +ư,& áp d%ng
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S0/ 69
6a&Bt=a&BingT † tưtng
ập 6i"n U
1
U
#
U
7
!!! U
n
&A th` ta!
$Wi 6i"n &A th5 &A 1 2iGn t=X =i'ng!
?i 2Wi th\i +i52V 6i"n U
i
+ư,& t/2 t=X phL
h,p!
8"u t/2 +ư,& t=X phL h,p th/ ti"p t%& sang
6i"n U
i•1
8gư,& l?iV t/2 t=X Bhá& &ho 6i"n U
iT1
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S1/ 69
0a&Bt=a&BingT 8hận UCt
Ph)i ghi nhE &á& 6ưE& +m +i qua +5 &A
th5 lLi vG t=?ng thái t=ưE& +A  Cơ &h"
sta&B  ŠM thuật +. quy =It phL h,p!
8"u lưu t=- +ư,& &á& Bh) n…ng Yt=X &Da
2iGn t=XZ +m +ư,& th1 th/ sˆ t=ánh +ư,&
nh-ng vi.& lRp BhNng &Hn thi"t!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S#/ 69
0a&Bt=a&BingT (i)i thuật t:ng quát
ập 6i"n pq YU
1
U
#
U
7
!!! U
n
ZV s4 6i"n n
ập 2iGn t=X j qYj
1
j
#
j
7
!!! j
n
Z
void =y Y int iV p V nZ
c ∀„ ∈ j
i

c iv Y a&&epta6leYU
i
V „ZZ
c U
i
q „•
iv YiqqnZ P=o&ess YCIu</nhCDa pZ
else =y Yi•1V pV nZ
d
d
d
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S7/ 69
(i)i thuật t:ng quát
x
1
x
2
x
3
x
4

Båt
dâu
D
1
D
2
D
3
D
4

for j= TrịÐâu ... TrịCuối của D
i
.........
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S;/ 69
(i)i thuật t:ng quát
Båt dâu
x
1
x
2
x
3
x
4
D
1
( 2pt)
D
2
(2pt)
D
3
(2pt)
D
4
( 3pt)
for j= TrịÐâu ... TrịCuối của D
i ...
Môt
kêt quả
Chương 6: Phương pháp sinh và thuật toán quay lui Slide SS/ 69
6!7!1T0ài toán &huWi 6it
ập 6i"n: &ha= va=swxV int n 6it
8hận UCt: $iGn t=X &hung jqcn0oV n1od
0it nào &‹ng +ư,& &hIp nhận  ŠhNng
&Hn Bi52 t=a a&&epta6leYU
i
V„Z
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S6/ 69
0ài toán &huWi 6it
Thêm dòng: deIete[ ] vars;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide Sb/ 69
0ài toán &huWi ; 6it
Bit 1 2 3 4
0 0 0 0  0000
1  0001
1 0  0010
1  0011
1 0 0  0100
1  0101
1 0  0110
1  0111
1 0 0 0  1000
1  1001
1 0  1010
1  1011
1 0 0  1100
1  1101
1 0  1110
1  1111
Chương 6: Phương pháp sinh và thuật toán quay lui Slide Sf/ 69
6.3.2-Bài toán Iiêt kê tập con k phân tú
của tập n phân tú
Thêm dòng: deIete[ ] resuIt;
Chương 6: Phương pháp sinh và thuật toán quay lui Slide S9/ 69
6!7!7T 0ài toán hoán vX
[i.t B' &á& hoán vX &Da 23t tập n phHn t1
$3t hoán vX +ư,& 6i5u diOn d?ng
p
1
p
#
p
7
!!!p
n
vEi p
i


p

vEi i € „V 2Wi p
i

nhận t=X ti 1 !! n!
$3t t=X „ +ư,& gán &ho p
i
n"u t=X „ này &hưa
+ư,& dLng  CHn qu)n lk t=X „ này +m
dLng hay &hưa  2)ng 0V n phHn t1 0w„x
2ang t=X Œ•Ž 2N t) =ƒng t=X „ ch$a +ư,&
dLng  0an +Hu 2@i 0w„xq Œ•Ž!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 60/ 69
0ài toán hoán vX
Šhi gán t=X „ &ho p
iV
Uong ph)i &ho
0w„xq•‡[SŽ!
Sau Bhi tha& hi.n Uong 23t l\i gi)i YiqqnZ Y
hay sau Bhi tha& thi Uong vi.& th1 &ho p
i•1

+5 +i h"t tập 6i"nZ ph)i t=) l?i 0w„xq Œ•Ž
+5 dLng &ho lHn sau!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 61/ 69
0ài toán hoán vX
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6#/ 69
0ài toán hoán vX
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 67/ 69
0ài tập
[à2 l?i &á& 6ài 2Ku vG gi)i thuật quay lui
nhưng ghi B"t qDa l'n vile!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6;/ 69
0ài tập
jLng gi)i thuật quay lui +5 sinh =a &á&
m!n% &'("lt ti 23t ma t)#n m YhU&Z &á&
s4 nguy'n sao &ho: 2a t=ận &A h hàng th/
2)ng &A h phHn t1V t=X &Da &'("lt*i+ là
23t t=X &Da dQng m*i+!
<ưEng dKn:
T
T#p bi,n: 2)ng h phHn t1 Bi5u int
 intz Œesult•
T
Mi-n t). &Da &'("lt*i+ là m*i+
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6S/ 69
0ài tập
(@i hà2:
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 66/ 69
A2 tJt
ŠM thuật sinh:
Y1Z pá& +Xnh t=?ng thái +Hu &Da 6ài toán!
Y#Z pá& +Xnh t=?ng thái B"t thF&!
Y7Z pá& +Xnh 23t th` ta &ho &á& t=?ng thái!
Y;Z /2 gi)i thuật +i ti t=?ng thái này sang
t=?ng thái Bhá&!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6b/ 69
A2 tJt
(i)i thuật hli quyT 6a&Bt=a&Bing
Y1Z ?i 1 th\i +i52V &h] UCt 6i"n th` i &Da tập 6i"n
Y#Z PEi 2@i t=X „ t=ong 2iGn t=X &Da 6i"n này
#!1T 8"u &h@n +ư,& 1 t=X h,p l. th/
(án U
i
q „
p1 lk 6i"n t vX t=* i•1
8"u iq0 th/ 6ài toán BhNng &A l\i gi)i!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 6f/ 69
A2 tJt
0ài toán t: h,p &A +3 ph`& t?p ny hoR& n
2

vEi n là s4 6i"nV 2 là s4 phHn t1 t=ung
6/nh &Da &á& 2iGn t=X &Da &á& 6i"n!
PEi nV2 lEnV n"u ph)i UCt h"t 2@i Bh)
n…ng th/ 6ài toán BhA Bh) thi 6ƒng 2áy
t*nh v/ &hi ph* qFa &ao!
Chương 6: Phương pháp sinh và thuật toán quay lui Slide 69/ 69
XIN CÁM ON