(Backtracking)
1
2
Pendahuluan
• Backtracking dapat dipandang sebagai salah satu
dari dua hal berikut:
1. Sebagai sebuah fase di dalam algoritma
traversal DFS
3
Backtracking sebagai sebuah fase di dalam
algoritma traversal DFS
5
Animasi Backtracking *)
dead end
?
dead end
dead end
?
start ? ? dead end
dead end
?
success!
6 *) Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
• Runut-balik banyak diterapkan untuk program
games :
– permainan tic-tac-toe,
– menemukan jalan keluar dalam sebuah labirin,
– Catur, crossword puzzle, sudoku, dan masalah-masalah
pada bidang kecerdasan buatan (artificial intelligence).
7
Crossword puzzle:
8
Tic-Tac-Toe
9
Sudoku
10
Catur
11
• Contoh (Maze problem): diberikan sebuah labirin
(maze), temukan lintasan dari titik awal sampai
titik akhir
12
• Pada tiap perpotongan, anda harus memutuskan satu
diantara tiga pilihan:
– Maju terus
– Belok kiri
– Belok kanan
• Anda tidak punya cukup informasi untuk memilih
pilihan yang benar (yang mengarah ke titik akhir)
• Tiap pilihan mengarah ke sekumpulan pilihan lain
• Satu atau lebih sekuens pilihan mengarah ke solusi.
• Backtracking (runut-balik) dapat digunakan untuk
persoalan seperti ini
13
in out
14
Penyelesaian dengan backtracking:
16
• Bagaimana mengetahui langkah yang mana yang
perlu dijejaki kembali?
17
f un c t i on So l ve Ma z e ( i nput M : l a b i r i n) boo l e a n
{ t r ue j i k a pi l i han me ngar a h k e s ol us i }
De kl a r a s i
a r a h : i n t e ge r { up = 1, down, 2, l e f t = 3, r i gh t = 4
}
Al g o 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 h e n
r e t ur n t r ue
el s e
f or t i a p a r a h g e r a ka n ( l ur us , ki r i , k a na n ) do
mo ve ( M, a r a h ) { p i ndah s a t u l angk ah ( s at u s e l )
s e s uai ar a h t e r s e bu t }
i f Sol ve Ma z e ( M) t he n
r e t ur n t r ue
el s e
unmove ( M, a r a h) { b ac k t r ac k }
e n di f
e nd f or
r e t ur n f a l s e { s e mua ar ah s udah d i c o ba, t e t api
t e t ap bunt u , mak a
k e s i mpul ann y a: buk an s ol us i }
e ndi f 18
in out
19
Contoh lainnya:
20
Jika kita menggambarkan
sekuens pilihan yang kita
lakukan, maka diagram
berbentuk seperti pohon.
23
Properti Umum Metode
Runut-balik
1. Solusi persoalan.
• Solusi dinyatakan sebagai vektor dengan n-
tuple: X = (x1, x2, …, xn), xi Si .
• Mungkin saja S1 = S2 = … = Sn.
24
2. Fungsi pembangkit nilai xk
Dinyatakan sebagai predikat:
T(k)
T(k) membangkitkan nilai untuk xk, yang
merupakan komponen vektor solusi.
25
3. Fungsi pembatas
26
Pengorganisasian Solusi
• Semua kemungkinan solusi dari persoalan disebut
ruang solusi (solution space).
• Tinjau Knapsack 0/1 untuk n = 3.
• Solusi persoalan dinyatakan sebagai (x1, x2, x3)
dengan xi {0,1}.
• Ruang solusinya adalah:
{(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0),
(1, 1, 0), (1, 0, 1), (0, 1, 1), (1, 1, 1) }
27
• Ruang solusi diorganisasikan ke dalam struktur pohon.
28
Sebuah pohon adalah
sekumpulan simpul dan
busur yang tidak mempunyai
sirkuit
2 9
x 2 =1 x 2 =0 x 2 =1 x 2 =0
3 6 10 13
x 3 =1 x 3 =0 x 3 =1 x 3 =0 x 3 =1 x 3 =0 x 3 =1 x 3 =0
4 5 7 8 11 12 14 15
30
Prinsip Pencarian Solusi dengan
Metode Runut-balik
• Solusi dicari dengan membentuk lintasan dari akar
ke daun. Aturan pembentukan yang dipakai adalah
mengikuti aturan depht-first order (DFS).
wi xi M
i 1
35
Pada metode brute force, semua lintasan dari akar
ke daun dievaluasi
1
x 1 =1 x 1 =0
2 9
x 2 =1 x 2 =0 x 2 =1 x 2 =0
3 6 10 13
x 3 =1 x 3 =0 x 3 =1 x 3 =0 x 3 =1 x 3 =0 x 3 =1 x 3 =0
4 5 7 8 11 12 14 15
36
Pohon dinamis yang dibentuk selama pencarian
untuk persoalan Knapsack 0/1 dengan n = 3,
M = 30, w = (35, 32, 25) dan p = (40, 25, 50)
1
x1 =1 x 1 =0
2 9
B
x 2 =1 x2 =0
10 13
B
x 3 =1 x 3 =0
14 15
37
Penomoran ulang simpul-simpul sesuai urutan
pembangkitannya
1
x 1 =1 x 1 =0
2 3
B
x 2 =1 x 2 =0
4 5
B
x 3 =1 x 3 =0
6 7
39
• Setiap simpul dalam pohon ruang status berasosiasi
dengan sebuah pemanggilan rekursif.
40
Persoalan N-Ratu
(The N-Queens Problem)
• Diberikan sebuah papan catur
yang berukuran N N dan
delapan buah ratu.
Bagaimanakah menempatkan N
buah ratu (Q) itu pada petak-
petak papan catur sedemikian
sehingga tidak ada dua ratu atau
lebih yang terletak pada satu
baris yang sama, atau pada satu
kolom yang sama, atau pada satu
diagonal yang sama?
41
Contoh 2 buah solusi 8-queen problem:
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
42
• The puzzle was originally proposed in 1848 by the chess
player Max Bezzel, and over the years, many
mathematicians, including Gauss, have worked on this
puzzle and its generalized N-queens problem. The first
solutions were provided by Franz Nauck in 1850. Nauck
also extended the puzzle to n-queens problem (on an N×N
board—a chessboard of arbitrary size).
43
Penyelesaian dengan Algoritma Brute-Force:
a) Brute Force 1
• Mencoba semua kemungkinan solusi
penempatan delapan buah ratu pada petak-
petak papan catur.
45
c) Brute Force 3 (exhaustive search)
• Misalkan solusinya dinyatakan dalam vektor 8-
tupple:
X = (x1 , x2 , ... , x8)
2 2 2
1 1 1 1
2 2 2
3 3
48
Contoh: Pohon ruang-status persoalan 4-Ratu
1
x 1 =1 x 1 =2 x 1= 3 x 1 =4
2 18 34 50
x2= 2 x 2 =4 x2= 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
x 1 =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 x 3 =4 x 3 =1 x 3 =2 x 3 =1 x 3 =3
x 3 =3 x 3 =4 x 3 =2 x 3 =4 x 3 =3 x 3 =4 x 3 =2
x 3 =1 x 3 =3 x 3 =3
x 3 =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
x4= 4 x 4 =4 x 4 =3 x 4 =4 x 4 =4 x 4 =3 x4= 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 x 4 =2 x4= 3 x 4 =3 x 4 =1 x 4 =2 x 4 =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
49
Pohon ruang status dinamis persoalan 4-Ratu yang
dibentuk selama pencarian:
1
x 1 =1 x 1 =2
2 18
x 2 =2 x 2 =4 x 2 =1 x 2 =4
x 2 =3
x 2 =3
3 8 13 19 24 29
B B B
x 3 =2 x 3 =3
x 3 =2 x 3 =4 x 3 =1
9 11 14 16 30
B B B
x 4 =3 x 4 =3
15 31 50
B
51
Algoritma Runut-balik untuk Persoalan 8-Ratu
52
function TEMPAT(input k:integer)boolean
{true jika ratu dapat ditempatkan pada kolom x[k], false jika tidak}
Deklarasi
i : integer
stop : boolean
Algoritma:
kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom
x[k] }
return kedudukan
53
Algoritma:
• Inisialisasi x[1], x[2], …, x[N] dengan 0
for iN to n do
x[i]0
endfor
54
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
stop : boolean
Algoritma:
stopfalse
while not stop do
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] }
x[k]x[k]+1
endwhile
{ x[k] > n or TEMPAT(k) }
4 5
4 5 4 5
2
2 2
1
1 1
6 6 6
3 3 3
57
1
x 1 =1 x 1 =3
x 1 =2
2 15 28
x 2 =1 x 2 =3 x 2 =1 x 2 =3 x 2 =1 x 2 =2 x 2 =3
x 2 =2 x 2 =2
3 7 11 16 20 24 29 33 37
x 3 =3 x 3 =3
x 3 =1 x 2 =3 x 3 =1 x 3 =1 x 3 =3 x 3 =1 x 3 =3 x 3 =1 x 3 =3 x 3 =1 x 3 =3 x 3 =1 x 3 =3 x 3 =1 x 3 =3
x 3 =1
x 3 =2 x 3 =2 x 3 =2 x 2 =2 x 2 =2 x 3 =2 x 3 =2 x 3 =2
x 3 =2
4 5 6 8 9 10 12 13 14 17 18 19 21 22 23 25 26 27 30 31 32 34 35 36 38 39 40
58
Misalkan warna dinyatakan dengan angka 1, 2, …, m dan
solusi dinyatakan sebagai vektor X dengan n-tuple:
X = (x1 , x2 , ..., xn ) , xi { 1, 2, …, m}
1
x 1 =1 ... dst
x 2 =1 x 2 =3
x 2 =2
3 7 11
B
x 3 =3
x 3 =1 x 3 =1 x 3 =3
x 3 =2 x 3 =2
8 9 10 12 13 14
59
B B B B
Algoritma Runut-balik Untuk Pewarnaan Graf
• Masukan:
1. Matriks ketetanggan GRAF[1..n, 1..n]
GRAF[i,j] = true jika ada sisi (i,j)
GRAF[i,j] = false jika tidak ada sisi (i,j)
2. Warna
Dinyatakan dengan integer 1, 2, ...,m
• Keluaran:
1. Tabel X[1..n], yang dalam hal ini, x[i] adalah
warna untuk simpul i.
60
• Algoritma:
1. Inisialisasi x[1..n] dengan 0
for i1 to n do
x[i]0
endfor
61
procedure PewarnaanGraf(input k : integer)
{ Mencari semua solusi solusi pewarnaan graf; rekursif
Masukan: k adalah nomor simpul graf.
Keluaran: jika solusi ditemukan, solusi dicetak ke piranti
keluaran
}
Deklarasi
stop : boolean
Algoritma:
stopfalse
while not stop do
{tentukan semua nilai untuk x[k] }
WarnaBerikutnya(k) {isi x[k] dengan sebuah warna}
if x[k] = 0 then {tidak ada warna lagi, habis}
stoptrue
else
if k=n then {apakah seluruh simpul sudah diwarnai?}
CetakSolusi(X,n)
else
PewarnaanGraf(k+1) {warnai simpul berikutnya}
endif
endif
endwhile
62
procedure WarnaBerikutnya(input k:integer)
{ Menentukan warna untuk simpul k
Masukan: k
Keluaran: nilai untuk x[k]
K.Awal: x[1], x[2], ... , x[k-1] telah diisi dengan warna dalam
himpunan {1,2, …, m} sehingga setiap simpul bertetangga mempunyai
warna berbeda-beda.
K.Akhir: x[k] berisi dengan warna berikutnya apabila berbeda dengan
warna simpul-simpul tetangganya. Jika tidak ada warna yang dapat
digunakan, x[k] diisi dengan nol
}
Deklarasi
stop, keluar : boolean
j : integer
Algoritma:
stopfalse
while not stop do
x[k](x[k]+1) mod (m+1) {warna berikutnya}
if x[k]=0 then {semua warna telah terpakai}
stoptrue
else
{periksa warna simpul-simpul tetangganya}
j1
keluarfalse
while (jn) and (not keluar) do
endif 63
endwhile
Kompleksitas Waktu algoritma PewarnaanGraf
64
Simpul pada aras n adalah simpul daun. Jumlah
n 1
i 0
n n ( m 1)
n 1
m n O ( nm )
i n
i 1
( m 1)
65
Latihan
• (Sum of subset problem) Diberikan n buah bilangan
positif berbeda w1, w2, …, wn dan sebuah bilangan
bulat positif W. Tentukan himpunan bagian dari n
ineteger tersebut yang jumlahnya sama dengan W.
Contoh: w1 = 3 w2 = 4, w3 = 5, w4 = 6, W = 13.
Himpunan bagian yang memenuhi:
{3, 4, 6}
Selesaikan dengan algoritma runut-balik!
66
67
68
69
70
71
72