Anda di halaman 1dari 26

ALGORITMA BACKTRACKING

OUR 01 Carlos Yoseph Roberto Meno.


021200069

TEAM
02 Reineldis Sabu Keraff
021200077

03 Risda Putri Ramadani


021200088

04 Petrik Moa
021200086

05 Patrisus Piter
021200087
Pendahuluan
Bactracking dapat dipandang sebagai salah satu
dari dua hal berikut:

 Sebagai senbuah fase di dalam algoritma


traversal DFS
 Sebagai sebuah metode pemecahan masalah
yang mangkus, terstruktur, dan sistematis
Apa Itu Backtracking?
Backtracking adalah cara yang metodologis mencoba
beberapa sekuens keputusan, sampai Anda menemukan
sekuens yang “bekerja”

Algoritma backtracking (runut balik) merupakan salah satu metode


pemecahan masalah yang termasuk dalam strategi yang berbasis
pencarian pada ruang status. Algoritma backtracking bekerja
secara rekursif dan melakukan pencarian solusi persoalan secara
sistematis pada semua kemungkinan solusi yang ada.
Prinsip dasar algoritma Backtracking adalah mencoba semua
kemungkinan solusi yang ada. Perbedaan utamanya adalah pada
konsep dasarnya,yaitu pada backtracking semua solusi dibuat
dalam bentuk pohon solusi (tree), dan kemudian pohon tersebut
akan ditelusuri secara DFS (Depth First Search) sehingga
ditemukan solusi terbaik yang diinginkan.
Implementasi Algoritma Backtracking

Algoritma backtrack dapat diimplementasikan


dengan mudah pada bahasa-bahasa
pemrograman yang telah men-support
pemrograman rekursif. Bahasa pemrograman
yang nyaman digunakan adalah Pascal atau Java.
Bahasa Pascal dipilih karena bisa diprogram
secara rekursif dan mendukung penggunaan
pointer. Sedangkan Bahasa Java meskipun lebih
rumit tetapi dapat bekerja secara rekursif dan
sangat mudah dalam membuat dynamic array.
Algoritma backtracking biasanya banyak diterapkan untuk program games,
seperti:

01 Permainan tic – tac - toe

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 Pembangkit nillai xk


Dinyatakan sebagai predikat: T(k)
T(k) membangkitkan nilai untuk xk, yang
merupakan komponen vektor solusi.

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

 Semua kemungkinan solusi  Tiap simpul pohon  Seluruh lintasan dari


dari persoalan disebut menyatakan status (state) akar ke daun
ruang solusi (solution persoalan, sedangkan sisi membentuk ruang
space). (cabang) dilabeli dengan solusi.
nilai-nilai xi.
 Pengorganisasian
 Ruang solusi pohon ruang solusi
 Lintasan dari akar ke
diorganisasikan ke dalam diacu sebagai pohon
daun menyatakan solusi
struktur pohon. yang mungkin. ruang status (state
space tree).
Prinsip Pencarian Solusi dengan Metode Backtracking
 Solusi dicari dengan membentuk lintasan dari akar ke daun.
Aturan pembentukan yang dipakai adalah mengikuti aturan
depht-first order (DFS).

 Simpul-simpul yang sudah dilahirkan dinamakan simpul hidup


(live node).

 Simpul hidup yang sedang diperluas dinamakan simpul-E


(Expand-node)

 Jika lintasan yang sedang dibentuk tidak mengarah ke solusi,


maka simpul-E tersebut “dibunuh” sehingga menjadi simpul
mati (dead node).

 Fungsi yang digunakan untuk membunuh simpul-E adalah


dengan menerapkan fungsi pembatas (bounding function).

 Jika pembentukan lintasan berakhir dengan simpul mati, maka


proses pencarian backtrack ke simpul aras diatasnya

 Lalu, teruskan dengan membangkitkan simpul anak yang


lainnya.

 Pencarian dihentikan bila kita telah sampai pada goal node.


Skema Umum Algoritma Backtracking
(versi Rekursif)

 Setiap simpul dalam pohon ruang status


procedure RunutBalikR(input k:integer)
berasosiasi dengan sebuah {Mencari semua solusi persoalan dengan metode runut-balik; skema
pemanggilan rekursif. rekursif
Masukan: k, yaitu indeks komponen vektor solusi, x[k]
Keluaran: solusi x = (x[1], x[2], …, x[n])
 Jika jumlah simpul dalam pohon ruang }
Algoritma:
status adalah 2n atau n!, maka untuk for tiap x[k] yang belum dicoba sedemikian sehingga
kasus terburuk, algoritma runut-balik ( x[k]T(k)) and B(x[1], x[2], ... ,x[k])= true do
membutuhkan waktu dalam O(p(n)2n) if (x[1], x[2], ... ,x[k]) adalah lintasan dari akar ke daun
then
atau O(q(n)n!), CetakSolusi(x)
endif
 dengan p(n) dan q(n) adalah polinom RunutBalikR(k+1) { tentukan nilai untuk x[k+1]}
endfor
derajat n yang menyatakan waktu
komputasi setiap simpul.
Contoh Studi Kasus 1
Maze Problem
diberikan sebuah labirin (maze), temukan lintasan dari titik awal
sampai titik akhir
% Pada tiap perpotongan, anda harus
memutuskan satu diantara tiga pilihan:
o Maju terus
o Belok kiri
o Belok kanan

Anda tidak punya cukup Tiap pilihan mengarah


informasi untuk memilih ke sekumpulan pilihan
pilihan yang benar lain.
(yang mengarah ke titik
akhir)

Satu atau lebih Backtracking (runut-


sekuens pilihan balik) dapat digunakan
mengarah ke solusi. untuk persoalan seperti
ini.
Contoh runut-balik pada sebuah labirin. Runut-balik diperlihatkan dengan
garis putus-putus.
in out

Penyelesaian dengan backtracking:


 Bagi lintasan menjadi sederetan langkah.

 Sebuah langkah terdiri dari pergerakan satu unit sel pada arah
tertentu.

 Arah yang mungkin: lurus (straight), kiri (left), ke kanan (right).


Garis Besar Algoritma Backtracking

while belum sampai pada tujuan do


if terdapat arah yang benar sedemikian sehingga kita belum pernah
berpindah ke sel pada arah tersebut
then
pindah satu langkah ke arah tersebut
else
backtrack langkah sampai terdapat arah seperti yang disebutkan
di atas
endif
endwhile
Lanjutan

f unc t i on Sol ve Ma z e ( i nput M : l a bi r i n) bool e a n


{ t r ue j i k a pi l i han me ngar ah k e s ol us i }

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)

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?
Contoh 2 buah solusi 8-queen 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.

Backtracking Jumlah kemungkinan solusi yang diperiksa


berkurang menjadi
88 = 16.777.216
Brute-Force 3
Misalkan solusinya dinyatakan dalam vektor 8-tupple:
X = (x1 , x2 , ... , x8)

Vektor solusi merupakan permutasi dari bilangan 1 sampai 8.

Jumlah permutasi bilangan 1 sampai 8 adalah P(1, 8)= 8! = 40.320


buah.
Penyelesaian dengan Algoritma Bactreacking
Algoritma runut-balik memperbaiki
1
algoritma brute force 3
(exhaustive search).

Ruang solusinya adalah semua


Bactracking 2 permutasi dari angka-angka 1, 2,
3, 4, 5, 6, 7, 8.

Setiap permutasi dari 1, 2, 3, 4, 5,


3 6, 7, 8 dinyatakan dengan lintasan
dari akar daun. Sisi-sisi pada
pohon diberi label nilai xi.
Contoh solusi Backtracking persoalan 4-Ratu
1 1 1 1

2 2 2

(a) (b) (c) (d)

1 1 1 1

2 2 2

3 3

(e) (f) (g) (h)


Contoh Pohon-Ruang Status untuk 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 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

Place Your Picture Here


3 8 13 19 24 29

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

Dua buah ratu terletak pada


baris yang sama, berarti
i=k
02

Tinjau dua posisi ratu


01 pada (i, j) dan (k, l)

Dua buah ratu terletak pada


kolom yang sama, berarti
j=l
03
Dua buah ratu terletak pada diagonal
04 yang sama, berarti
 i – j = k – l atau  i + j = k + l
 i – k = j – l atau k – i = j – l
 j – l = i – k
function TEMPAT(input k:integer)boolean
{true jika ratu dapat ditempatkan pada kolom x[k], false jika tidak}

Deklarasi
i : integer
stop : boolean

Algoritma:
kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom
x[k] }

{ periksa apakah memang ratu dapat ditempatkan pada kolom x[k] }


i1 { mulai dari baris pertama}
stopfalse
while (i<k) and (not stop) do Place Your Picture Here
if (x[i]=x[k]){apakah ada dua buah ratu pada kolom yang sama?}
or { atau}
(ABS(x[i]-x[k])=ABS(i-k)) {dua ratu pada diagonal yang sama?}
then
kedudukanfalse
keluartrue
else
ii+1 { periksa pada baris berikutnya}
endif
endwhile
{ i = k or keluar }

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

Masukan: N = jumlah ratu


Keluaran: semua solusi x = (x[1], x[2], …, x[N]) dicetak ke layar.
}

Deklarasi Algoritma
stop : boolean

Algoritma:
stopfalse
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 iN to n do
x[k]x[k]+1 x[i]0
endwhile endfor
{ x[k] > n or TEMPAT(k) }

if x[k]  N then { kolom penempatan ratu ditemukan }


if k=N then { apakah solusi sudah lengkap? } Panggil prosedur N_RATU_R(1)
CetakSolusi(x,N) { cetak solusi }
else
N_RATU_R(k+1)
else { x[k] > N  gagal, semua kolom sudah dicoba }
stoptrue
x[k]0
endif
endwhile
{stop}
THANK YOU
“Kesempatan kamu untuk sukses disetiap kondisi selalu dapat diukur
oleh seberapa besar kepercayaan kamu pada diri sendiri”

~Robert Collier~

Anda mungkin juga menyukai