(Backtracking)
Bahan Kuliah IF2211 Strategi Algoritma
Oleh: Rinaldi Munir
3
• 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).
4
Crossword puzzle:
5
Tic-Tac-Toe
6
Sudoku
7
Catur
8
Prolog *)
• Misalkan anda harus membuat rangkaian keputusan di
antara beberapa pilihan, dimana:
– Anda tidak punya cukup informasi untuk mengetahui
apa yang akan dipilih
– Tiap keputusan mengarah pada sekumpulan pilihan baru
– Beberapa sekuens pilihan (bisa lebih dari satu) mungkin
merupakan solusi persoalan
• Backtracking adalah cara yang metodologis mencoba
beberapa sekuens keputusan, sampai Anda menemukan
sekuens yang “bekerja”
9
Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
• Contoh (Maze problem): diberikan sebuah labirin
(maze), temukan lintasan dari titik awal sampai
titik akhir
10
• 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
11
Animasi Backtracking *)
dead end
?
dead end
dead end
?
start ? ? dead end
dead end
?
success!
12 *) Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
in out
13
Penyelesaian dengan backtracking:
15
• Bagaimana mengetahui langkah yang mana yang
perlu dijejaki kembali?
16
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 17
in out
18
Contoh lainnya:
19
Jika kita menggambarkan
sekuens pilihan yang kita
lakukan, maka diagram
berbentuk seperti pohon.
22
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.
23
2. Fungsi pembangkit nilai xk
Dinyatakan sebagai predikat:
T(k)
T(k) membangkitkan nilai untuk xk, yang
merupakan komponen vektor solusi.
24
3. Fungsi pembatas
25
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) }
26
• Ruang solusi diorganisasikan ke dalam struktur pohon.
27
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
29
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
34
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
35
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
36
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
38
• Setiap simpul dalam pohon ruang status berasosiasi
dengan sebuah pemanggilan rekursif.
39
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?
40
Contoh 2 buah solusi 8-queen problem:
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
41
• 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).
42
Penyelesaian dengan Algoritma Brute-Force:
a) Brute Force 1
• Mencoba semua kemungkinan solusi
penempatan delapan buah ratu pada petak-
petak papan catur.
44
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
47
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
48
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 49
B
50
Algoritma Runut-balik untuk Persoalan 8-Ratu
51
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
52
Algoritma:
• Inisialisasi x[1], x[2], …, x[N] dengan 0
for iN to n do
x[i]0
endfor
53
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
56
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
57
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
58
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.
59
• Algoritma:
1. Inisialisasi x[1..n] dengan 0
for i1 to n do
x[i]0
endfor
60
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
61
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 62
endwhile
Kompleksitas Waktu algoritma PewarnaanGraf
63
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)
64
Latihan
• (Sum of subset problem) Diberikan sebuah himpunan A
yang berisi n buah bilangan positif berbeda dan sebuah
bilangan bulat m. Tentukan himpunan bagian dari
himpunan bilangn bulat tersebut yang jumlahnya sama
dengan m.
Contoh: A = {5, 6, 10, 16} dan m = 21.
Himpunan bagian yang memenuhi:
{5, 6, 10}, {5, 16}
Selesaikan dengan algoritma runut-balik!
65