Backtracking adalah algoritma berbasis DFS untuk mencari solusi persoalan secara lebih efisien daripada metode brute-force. Backtracking mencari solusi dengan mengevaluasi kemungkinan solusi secara sistematis dan membuang solusi yang tidak memenuhi kriteria. Backtracking sering digunakan untuk masalah games dan AI.
3. Definisi
Runut-balik (backtracking) adalah algoritma yang
berbasis pada DFS (Depth First Search) untuk mencari
solusi persoalan secara lebih mangkus.
Runut-balik, yang merupakan perbaikan dari algoritma
brute-force, secara sistematis mencari solusi persoalan
diantara semua kemungkinan solusi yang ada.
4. Backtracking
Dengan metode runut-balik, kita tidak perlu memeriksa
semua kemungkinan solusi yang ada. Hanya pencarian
yang mengarah ke solusi saja yang selalu dipertimbang-
kan. Akibatnya, waktu pencarian dapat dihemat.
Runut-balik merupakan bentuk tipikal dari algoritma
rekursif.
5. Implementasi
Saat ini algoritma runut-balik banyak diterapkan untuk program
games (seperti permainan tic-tac-toe, menemukan jalan keluar
dalam sebuah labirin, catur, dll) dan masalah-masalah pada
bidang kecerdasan buatan (artificial intelligence).
6. Properti Umum Backtracking
1. Solusi persoalan.
Solusi dinyatakan sebagai vektor dengan n-tuple:
X = (x1, x2, …, xn), xi himpunan berhingga Si .
Mungkin saja S1 = S2 = … = Sn.
Contoh: Si = {0, 1},
xi = 0 atau 1
2. Fungsi pembangkit nilai xk
Dinyatakan sebagai: T(k)
T(k) membangkitkan nilai untuk xk, yang merupakan komponen vektor
solusi.
7. Properti Umum Backtracking
3. Fungsi pembatas (pada beberapa persoalan fungsi ini dinamaka
n fungsi kriteria)
Dinyatakan sebagai : B(x1, x2, …, xk)
Fungsi pembatas menentukan apakah (x1, x2, …, xk) mengarah ke solusi.
Jika ya, maka pembangkitan nilai untuk xk+1 dilanjutkan, tetapi jika tidak, ma
ka (x1, x2, …, xk) dibuang dan tidak dipertimbangkan lagi dalam pencarian sol
usi.
8. Pengorganisasian Solusi
Semua kemungkinan solusi dari persoalan disebut
ruang solusi (solution space).
Jika xi Si, maka S1 S2 … Sn disebut ruang
solusi.
Jumlah anggota di dalam ruang solusi adalah
| S1| | S2| … | Sn |.
9. Contoh Permasalahan pada Knapsack
Tinjau persoalan Knapsack 0/1 untuk n = 3. Solusi
persoalan dinyatakan sebagai vektor (x1, x2, x3)
dengan xi {0,1}. Ruang solusinya adalah
{0,1} {0,1} {0,1} = {(0, 0, 0), (0, 1, 0), (0, 0, 1),
(1, 0, 0), (1, 1, 0), (1, 0, 1),
(0, 1, 1), (1, 1, 1)}.
10. Lanjutan
Pada persoalan Knapsack 0/1 dengan n = 3 terdapat
2n = 23 = 8 kemungkinan solusi, yaitu:
(0, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, 0), (1, 1, 0), (1, 0, 1),
(0, 1, 1), dan (1, 1, 1).
Penyelesaian secara exhaustive search adalah denga
n menguji setiap kemungkinan solusi.
11. Penyelesaian dengan Backtracking
Ruang solusi diorganisasikan dalam struktur pohon.
Tiap simpul pohon menyatakan status (state) persoalan,
sedangkan sisi (cabang) dilabeli dengan nilai-nilai xi.
Lintasan dari akar ke daun menyatakan solusi yg mungkin.
Seluruh lintasan dari akar ke daun membentuk ruang solus
i. Pengorganisasian pohon ruang solusi diacu sebagai poho
n
ruang status (state space tree).
13. Prinsip Pencarian Solusi dengan Backtracking
1. Solusi dicari dengan membentuk lintasan dari akar ke daun
. Aturan pembentukan yang dipakai adalah mengikuti atura
n pencarian mendalam (DFS). Simpul-simpul yang sudah
dilahirkan dinamakan simpul hidup (live node). Simpul
hidup yang sedang diperluas dinamakan simpul-E
(Expand-node).
14. Prinsip Pencarian Solusi dengan Backtracking
2. Tiap kali simpul-E diperluas, lintasan yang dibangun
olehnya bertambah panjang. Jika lintasan yang sedang
dibentuk tidak mengarah ke solusi, maka simpul-E tersebut
“dibunuh” sehingga menjadi simpul mati (dead node). Fung
si yang digunakan untuk membunuh simpul-E adalah deng
an menerapkan fungsi pembatas (bounding function). Simp
ul
yang sudah mati tidak akan pernah diperluas lagi.
15. Prinsip Pencarian Solusi dengan Backtracking
3. Jika pembentukan lintasan berakhir dengan simpul mati,
maka proses pencarian diteruskan dengan membangkitka
n simpul anak yang lainnya. Bila tidak ada lagi simpul anak
yang dapat dibangkitkan, maka pencarian solusi dilanjutka
n dengan melakukan runut-balik ke simpul hidup terdekat
(simpul orangtua). Selanjutnya simpul ini menjadi simpul-
E yang baru.
16. Prinsip Pencarian Solusi dengan Backtracking
4. Pencarian dihentikan bila kita telah menemukan solusi ata
u tidak ada lagi simpul hidup untuk runut-balik.
Tinjau persoalan Knapsack 0/1 dengan instansiasi:
n = 3
(w1, w2, w3) = (35, 32, 25)
(p1, p2, p3) = (40, 25, 50)
M = 30
17. Solusi dinyatakan sebagai X = (x1, x2, x3), xi {0, 1}.
Fungsi pembatas:
Solusi optimumnya adalah X = (0, 0, 1) dan F = 50.
k
i
ii
Mxw
1
1
2 9
10 13
14 15
x1
=1 x1
=0
x2
=1 x2
=0
x3 =1 x3 =0
B
B
1
2 3
4 5
6 7
x1
=1 x1
=0
x2
=1 x2
=0
x3 =1 x3 =0
B
B
(a) Pohon dinamis yang dibentuk selama pencarian untuk
persoalan Knapsack 0/1 dengan n = 3, w = (35, 32, 25)
dan p = (40, 25, 50)
(b) Penomoran ulang simpul-simpul sesuai urutan
pembangkitannya
18. REFFERENCE
Munir, Rinaldi. Diktat Kuliah “Kompleksitas Algoritma”, Departemen T
eknik Informatika ITB
Levitin, Anany. 2012. Introduction to the Design and Analysis of A
lgorithms, 3rd Edition.Addison Wesley