(Backtracking)
1
Pengantar
Backtracking dapat dipandang sebagai salah satu
dari dua hal berikut:
1. Sebagai sebuah fase di dalam algoritma
traversal DFS
2. Sebagai sebuah metode pemecahan masalah
yang terstruktur dan sistematis
2
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
3
Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
Contoh (Maze problem): diberikan sebuah labirin
(maze), temukan lintasan dari titik awal sampai
titik akhir
4
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
5
Animasi Backtracking *)
dead end
?
dead end
dead end
?
start ? ? dead end
dead end
?
success!
6 *) Sumber: www.cis.upenn.edu/.../35-backtracking.ppt
in out
7
Penyelesaian dengan bactracking:
9
Bagaimana mengetahui langkah yang mana yang
perlu dijejaki kembali?
10
function SolveMaze(input M : labirin) boolean
{ true jika pilihan mengarah ke s olusi }
Deklarasi
arah : integer { up = 1, down, 2, left = 3, right = 4
}
Algoritma:
if pilihan arah merupakan solusi then
return true
else
for tiap arah g erakan ( lurus, kiri, kanan ) do
move(M, arah) { pindah satu langkah (satu sel)
sesuai arah tersebut }
if SolveMaze(M) then
return true
else
unmove(M, arah) { backtrack }
endif
endfor
return false { semua arah sudah dicoba, tetapi
tetap buntu, maka
kesimpulannya: bukan solusi }
endif 11
in out
12
Contoh lainnya:
13
Jika kita menggambarkan
sekuens pilihan yang kita
lakukan, maka diagram
berbentuk seperti pohon.
15
Crossword puzzle:
16
Tic-Tac-Toe
17
Sudoku
18
Catur
19
Algoritma runut-balik merupakan perbaikan dari
algoritma brute-force (exhaustive search)
21
Properti Umum Metode
Runut-balik
1. Solusi persoalan.
Solusi dinyatakan sebagai vektor dengan n-
tuple: X = (x1, x2, , xn), xi Si .
Mungkin saja x1 = x2 = = xn.
22
2. Fungsi pembangkit nilai xk
Dinyatakan sebagai predikat:
T(k)
T(k) membangkitkan nilai untuk xk, yang
merupakan komponen vektor solusi.
23
3. Fungsi pembatas
25
Ruang solusi diorganisasikan ke dalam struktur
pohon.
2 9
x2 =1 x2 =0 x2 =1 x2 =0
3 6 10 13
x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0
4 5 7 8 11 12 14 15
28
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).
w x M
i 1
i i
33
Pada metode brute force, semua lintasan dari akar
ke daun dievaluasi
1
x1 =1 x1 =0
2 9
x2 =1 x2 =0 x2 =1 x2 =0
3 6 10 13
x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0 x3 =1 x3 =0
4 5 7 8 11 12 14 15
34
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 x1 =0
2 9
B
x2 =1 x2 =0
10 13
B
x3 =1 x3 =0
14 15
35
Penomoran ulang simpul-simpul sesuai urutan
pembangkitannya
1
x1 =1 x1 =0
2 3
B
x2 =1 x2 =0
4 5
B
x3 =1 x3 =0
6 7
37
Setiap simpul dalam pohon ruang status berasosiasi
dengan sebuah pemanggilan rekursif.
38
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?
39
Contoh 2 buah solusi 8-queen problem:
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
Q Q
40
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 NN
boarda chessboard of arbitrary size).
41
Penyelesaian dengan Algoritma Brute-Force:
a) Brute Force 1
Mencoba semua kemungkinan solusi
penempatan delapan buah ratu pada petak-
petak papan catur.
42
b) 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.
43
c) Brute Force 3 (exhaustive search)
Misalkan solusinya dinyatakan dalam vektor
8-tupple:
X = (x1 , x2 , ... , x8)
45
Contoh solusi runut-balik persoalan 4-Ratu:
1 1 1 1
2 2 2
1 1 1 1
2 2 2
3 3
46
Contoh: Pohon ruang-status persoalan 4-Ratu
1
2 18 34 50
3 8 13 19 24 29 35 40 45 51 56 61
x3=2 x3=3 x3=3 x3=4 x3=2 x3=4 x3=1 x3=2 x3=1 x3=3
x3=3 x3=4 x3=2 x3=4 x3=3 x3=4 x3=1 x3=3 x3=2 x3=3
x3=1 x3=4 x3=1 x3=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
5 7 10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65
47
Pohon ruang status dinamis persoalan 4-Ratu yang
dibentuk selama pencarian:
1
x1=1 x1=2
2 18
3 8 13 19 24 29
B B B
x3=2 x3=3
x3=2 x3=4 x3=1
9 11 14 16 30
B B B
x4=3 x4=3
15 31 48
B
49
Algoritma Runut-balik untuk Persoalan 8-Ratu
50
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
51
Algoritma:
Inisialisasi x[1], x[2], , x[N] dengan 0
for iN to n do
x[i]0
endfor
52
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) }