TEAM
02 Reineldis Sabu Keraff
021200077
04 Petrik Moa
021200086
05 Patrisus Piter
021200087
Pendahuluan
Bactracking dapat dipandang sebagai salah satu
dari dua hal berikut:
02
Maze Game
Menemukan jalan keluar dalam sebuah
labirin.
03
Catur, crossword puzzle, sudoku, dan
masalah-masalah pada bidang kecerdasan
buatan (artificial intelligence).
Properti Umum Metode Backtracking
Solusi Persoalan
Solusi dinyatakan sebagai vektor dengan n-tuple: X
= (x1, x2, …, xn), xi Si .
Mungkin saja S1 = S2 = … = Sn.
Contoh: Si = {0, 1}, xi = 0 atau 1
Fungsi Pembatas
Dinyatakan sebagai predikat
B(x1, x2, …, xk)
B bernilai true jika (x1, x2, …, xk)
mengarah ke solusi.
Jika true, maka pembangkitan nilai untuk
xk+1 dilanjutkan, tetapi jika false,
maka (x1, x2, …, xk) dibuang.
Pengorganisasian Solusi
Ada tiga macam simpul:
Simpul akar
Simpul Dalam
Simpul Daun
Sebuah langkah terdiri dari pergerakan satu unit sel pada arah
tertentu.
De kl a r a s i
in out }
a r a h : i nt e ge r { up = 1, down, 2, l e f t = 3, r i ght = 4
Al go r i t ma :
i f pi l i ha n a r a h me r upa ka n s ol us i t he n
r e t ur n t r ue
Bagaimana mengetahui langkah yang el se
Your Picture Here f or t i a p a r a h ge r a ka n ( l ur us , ki r i , ka na n) do
mana yang perlu dijejaki kembali? move ( M, a r a h) { pi ndah s at u l angk ah ( s at u s e l )
Ada dua solusi untuk masalah ini: s e s uai ar ah t e r s e but }
i f Sol ve Ma z e ( M) t he n
1. Simpan semua langkah yang pernah r e t ur n t r ue
dilakukan, atau el se
unmove ( M, a r a h) { bac k t r ac k }
e ndi f
2. gunakan rekursi (yang secara implisit e ndf or
r e t ur n f a l s e { s e mua ar ah s udah di c oba, t e t api
menyimpan semua langkah). t e t ap bunt u, mak a
Rekursi adalah solusi yang lebih k e s i mpul anny a: buk an s ol us i }
e ndi f
mudah.
Contoh Studi Kasus 2
Persoalan N-Ratu
(The N-Queens Problem)
Q Q
Q Q
Place Your Picture Here And Send To Back
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Penyelesaian dengan Algoritma Brute-Force
Brute-Force 1
Mencoba semua kemungkinan solusi penempatan delapan buah
ratu pada petak-petak papan catur.
Ada C(64, 8) = 4.426.165.368 kemungkinan solusi.
Brute-Force 2
Meletakkan masing-masing ratu hanya pada baris-
baris yang berbeda. Untuk setiap baris, kita coba
tempatkan ratu mulai dari kolom 1, 2, …, 8.
2 2 2
1 1 1 1
2 2 2
3 3
x 1 =1 x 1 =2 x 1 =3 x 1 =4
2 18 34 50
x2= 2 x 2 =4 x 2= 1 x 2 =4 x 2 =1 x 2 =2 x 2 =4 x 2 =1 x 2 =3
x 2 =3 x 2 =2
x1= 1
3 8 13 19 24 29 35 40 45 51 56 61
x 3 =2 x 3 =3 x 3 =3 x 3 =4 x 3 =2 x3= 4 x 3 =1 x3= 2 x 3 =1 x 3 =3
x 3 =3 x 3 = 4 x 3 =2 x 3 =4 x3= 3 x 3 =4 x 3 =1 x 3 =3 x 3 =2 x 3 =3
x3= 1 x 3 =4 x 3 =1 x 3 =2
4 6 9 11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64
x 4 =4 x 4 =4 x 4 =3 x 4 =4 x 4 =4 x4= 3 x 4 =3 x 4 =2
x 4 =3 x 4 =2
x 4 =4 x 4 =4 x 4 =1
x 4 =3 x 4 =2 x4= 2 x 4= 3 x 4 =3 x 4 =1 x4= 2 x4= 1 x 4 =2 x 4 =1 x 4 =1
5 7 10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65
Pohon ruang status dinamis persoalan 4-Ratu yang
dibentuk selama pencarian
1
x1= 1 x1= 2
2 18
x 2 =2 x 2 =4 x 2 =1 x2= 4
x2= 3
x 2= 3
B B B
x3= 2 x 3 =3
x 3 =2 x 3 =4 x3= 1
9 11 14 16 30
B B B
x4= 3 x4= 3
15 31
B
Algoritma Backtracking untuk Persoalan 8-Ratu
Deklarasi
i : integer
stop : boolean
Algoritma:
kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom
x[k] }
return kedudukan
Backtracking
procedure N_RATU_R(input k:integer)
{ Menempatkan ratu pada baris ke-k pada petak papan catur N x N
tanpa melanggar kendala; versi rekursif
Deklarasi Algoritma
stop : boolean
Algoritma:
stopfalse
Inisialisasi x[1], x[2], …, x[N]
while not stop do dengan 0
x[k]x[k]+1 { pindahkan ratu ke kolom berikutnya }
while (x[k] n) and (not TEMPAT(k)) do
{ periksa apakah ratu dapat ditempatkan pada kolom x[k] }
for iN to n do
x[k]x[k]+1 x[i]0
endwhile endfor
{ x[k] > n or TEMPAT(k) }
~Robert Collier~