wijanarto - udinus repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "misal...

48
Backtracking wijanarto

Upload: ngohuong

Post on 05-May-2018

220 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Backtracking

wijanarto

Page 2: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

backtracking

• Misal anda harus membuat beberapa keputusandiantara banyak pilihan, Dimana :– Anda tidak memiliki informasi untuk mengeahui apa

yang harus di pilih– Tiap keputusan, memiliki himpunan pilihan lagi– Beberapa urutan pilihan (mungkin lebih dari satu)

mungkin merupakan soulusi bagi masalah anda• Backtracking merupakan cara secara metodologis

untuk menemukan beberapa urutan hingga kitamenemukan yang tepat .

• Misal anda harus membuat beberapa keputusandiantara banyak pilihan, Dimana :– Anda tidak memiliki informasi untuk mengeahui apa

yang harus di pilih– Tiap keputusan, memiliki himpunan pilihan lagi– Beberapa urutan pilihan (mungkin lebih dari satu)

mungkin merupakan soulusi bagi masalah anda• Backtracking merupakan cara secara metodologis

untuk menemukan beberapa urutan hingga kitamenemukan yang tepat .

Page 3: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Solving Maze(dibahas pada slide lainnya)

• Diberikan sebuah maze, cari jalur dari awalhingga akhir

• Tiap interseksi, anda harus menentukan antara 3atau kurang ilihan :– Terus– Ke kiri– Ke kanan

• Anda tidak punya cukup informasi untuk memilih secara benar• Tiap pilihan mempunyai himpunan pilihan lainnya• Satu atau lebih urutan pilihan mungkin merupakan solusi bagi anda

• Diberikan sebuah maze, cari jalur dari awalhingga akhir

• Tiap interseksi, anda harus menentukan antara 3atau kurang ilihan :– Terus– Ke kiri– Ke kanan

• Anda tidak punya cukup informasi untuk memilih secara benar• Tiap pilihan mempunyai himpunan pilihan lainnya• Satu atau lebih urutan pilihan mungkin merupakan solusi bagi anda

Page 4: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Coloring a map

• You wish to color a map withnot more than four colors– red, yellow, green, blue

• Adjacent countries must be indifferent colors

• You don’t have enough information to choose colors• Each choice leads to another set of choices• One or more sequences of choices may (or may not) lead to a

solution• Many coloring problems can be solved with backtracking

• You wish to color a map withnot more than four colors– red, yellow, green, blue

• Adjacent countries must be indifferent colors

• You don’t have enough information to choose colors• Each choice leads to another set of choices• One or more sequences of choices may (or may not) lead to a

solution• Many coloring problems can be solved with backtracking

Page 5: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Solving a puzzle• In this puzzle, all holes but one

are filled with white pegs• You can jump over one peg

with another• Jumped pegs are removed• The object is to remove all

but the last peg• You don’t have enough information to jump correctly• Each choice leads to another set of choices• One or more sequences of choices may (or may not)

lead to a solution• Many kinds of puzzle can be solved with backtracking

• In this puzzle, all holes but oneare filled with white pegs

• You can jump over one pegwith another

• Jumped pegs are removed• The object is to remove all

but the last peg• You don’t have enough information to jump correctly• Each choice leads to another set of choices• One or more sequences of choices may (or may not)

lead to a solution• Many kinds of puzzle can be solved with backtracking

Page 6: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Animasi backtracking

?

dead end

dead end

dead end

start ? ??

dead end

?

success!

dead end

Page 7: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Algoritma Backtracking

• Ide : “explore” tiap node :• Untuk meng-”explore” node N:

1. If N = goal node, return “success”2. If N = leaf node, return “failure”3. For anak C dalam N,

3.1. Explore C3.1.1. If C = success, return “success”

4. Return “failure”

• Ide : “explore” tiap node :• Untuk meng-”explore” node N:

1. If N = goal node, return “success”2. If N = leaf node, return “failure”3. For anak C dalam N,

3.1. Explore C3.1.1. If C = success, return “success”

4. Return “failure”

Page 8: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Map Coloring

• Dalam Four Color Theorem dinyatakan bahwatiap map pada suatu plane dapat diwarnaidengan tidak lebih dari 4 warna, jadi tidak ada2 negara dengan batas negara yang berwarnasama

• Dalam map cari pewarnaan yang mudah• Dalam map, dapat sulit untuk menemukan

warna• Kita akan konstruksikan contoh ini dalam java

• Dalam Four Color Theorem dinyatakan bahwatiap map pada suatu plane dapat diwarnaidengan tidak lebih dari 4 warna, jadi tidak ada2 negara dengan batas negara yang berwarnasama

• Dalam map cari pewarnaan yang mudah• Dalam map, dapat sulit untuk menemukan

warna• Kita akan konstruksikan contoh ini dalam java

Page 9: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

• Contoh:– Urutan vertek A-F– Warna yang diberikan

adalah : R, G, BC E

D

• Contoh:– Urutan vertek A-F– Warna yang diberikan

adalah : R, G, B

Page 10: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 11: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 12: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 13: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 14: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 15: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 16: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 17: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 18: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 19: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

A

FB

C E

D

Page 20: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Graph Coloring

C

A

FB

E

DD

Page 21: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Struktur Data

• Struktur Data– Setting warna untuk tiap negara– Tiap negara, fapat menemukan semua negara

tetangganya• Lakukan dengan 2 array– Array “warna”, dimana WarnaNegara[i] adalah

warna negara ke-i– Array negara tetangga, map[i][j] merupakan

negara tetangga ke-j dari negara I• Misal: map[5][3]==8 : negara tetangga ke-3 pada

negara 5 adalah negara 8

• Struktur Data– Setting warna untuk tiap negara– Tiap negara, fapat menemukan semua negara

tetangganya• Lakukan dengan 2 array– Array “warna”, dimana WarnaNegara[i] adalah

warna negara ke-i– Array negara tetangga, map[i][j] merupakan

negara tetangga ke-j dari negara I• Misal: map[5][3]==8 : negara tetangga ke-3 pada

negara 5 adalah negara 8

Page 22: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Buat Map0 1

42 3

65

int map[][];

void createMap() {map = new int[7][];map[0] = new int[] { 1, 4, 2, 5 };map[1] = new int[] { 0, 4, 6, 5 };map[2] = new int[] { 0, 4, 3, 6, 5 };map[3] = new int[] { 2, 4, 6 };map[4] = new int[] { 0, 1, 6, 3, 2 };map[5] = new int[] { 2, 6, 1, 0 };map[6] = new int[] { 2, 3, 4, 1, 5 };

}

int map[][];

void createMap() {map = new int[7][];map[0] = new int[] { 1, 4, 2, 5 };map[1] = new int[] { 0, 4, 6, 5 };map[2] = new int[] { 0, 4, 3, 6, 5 };map[3] = new int[] { 2, 4, 6 };map[4] = new int[] { 0, 1, 6, 3, 2 };map[5] = new int[] { 2, 6, 1, 0 };map[6] = new int[] { 2, 3, 4, 1, 5 };

}

Page 23: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Seting Initial color

static final int NONE = 0;static final int MERAH= 1;static final int KUNING = 2;static final int HIJAU = 3;static final int BIRU = 4;

int mapColors[] = { NONE, NONE, NONE, NONE,NONE, NONE, NONE };

static final int NONE = 0;static final int MERAH= 1;static final int KUNING = 2;static final int HIJAU = 3;static final int BIRU = 4;

int mapColors[] = { NONE, NONE, NONE, NONE,NONE, NONE, NONE };

Page 24: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Main

(The name of the enclosing class is ColoredMap)

public static void main(String args[]) {

ColoredMap m = new ColoredMap();

m.createMap();

boolean result = m.explore(0, MERAH);

System.out.println(result);

m.printMap();

}

(The name of the enclosing class is ColoredMap)

public static void main(String args[]) {

ColoredMap m = new ColoredMap();

m.createMap();

boolean result = m.explore(0, MERAH);

System.out.println(result);

m.printMap();

}

Page 25: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Metode backtrackboolean explore(int country, int color) {

if (country >= map.length) return true;if (warnai(country, color)) {

mapColors[country] = color;for (int i = MERAH; i <= BIRU; i++) {

if (explore(country + 1, i)) return true;}

}return false;

}

boolean explore(int country, int color) {if (country >= map.length) return true;if (warnai(country, color)) {

mapColors[country] = color;for (int i = MERAH; i <= BIRU; i++) {

if (explore(country + 1, i)) return true;}

}return false;

}

Page 26: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Periksa warna yang dapat di pakaiboolean warnai(int country, int color) {

for (int i = 0; i < map[country].length;i++) {

int AdjCountry = map[country][i];if (mapColors[AdjCountry] == color) {

return false;}

}return true;

}

boolean warnai(int country, int color) {for (int i = 0; i < map[country].length;i++) {

int AdjCountry = map[country][i];if (mapColors[AdjCountry] == color) {

return false;}

}return true;

}

Page 27: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Cetak hasilvoid printMap() {

for (int i = 0; i < mapColors.length; i++) {System.out.print("map[" + i + "] is ");switch (mapColors[i]) {

case NONE: System.out.println("none"); break;case RED: System.out.println(“merah"); break;case YELLOW: System.out.println(“kuning"); break;case GREEN: System.out.println(“hijau"); break;case BLUE: System.out.println("biru"); break;

}}

}

void printMap() {for (int i = 0; i < mapColors.length; i++) {

System.out.print("map[" + i + "] is ");switch (mapColors[i]) {

case NONE: System.out.println("none"); break;case RED: System.out.println(“merah"); break;case YELLOW: System.out.println(“kuning"); break;case GREEN: System.out.println(“hijau"); break;case BLUE: System.out.println("biru"); break;

}}

}

Page 28: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Persoalan N-Ratu(The N-Queens Problem)

• Diberikan sebuah papan catur yang berukuranN N dan delapan buah ratu. Bagaimanakahmenempatkan N buah ratu (Q) itu pada petak-petak papan catur sedemikian sehingga tidakada dua ratu atau lebih yang terletak padasatu baris yang sama, atau pada satu kolomyang sama, atau pada satu diagonal yangsama ?

• Diberikan sebuah papan catur yang berukuranN N dan delapan buah ratu. Bagaimanakahmenempatkan N buah ratu (Q) itu pada petak-petak papan catur sedemikian sehingga tidakada dua ratu atau lebih yang terletak padasatu baris yang sama, atau pada satu kolomyang sama, atau pada satu diagonal yangsama ?

Page 29: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

8-Ratu

Q

QQ

QQ

QQ

QQ

QQ

Q

QQ

QQ

Q

QQ

QQ

QQ

QQ

QQ

Q

QQ

QQ

Page 30: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Penyelesaian dengan AlgoritmaBrute Force

• a) Brute Force 1Mencoba semua kemungkinan solusi penempatandelapan buah ratu pada petak-petak papan catur.Ada C(64, 8) = 4.426.165.368 kemungkinan solusi.• b) Brute Force 2Meletakkan masing-masing ratu hanya pada baris-baris yang berbeda. Untuk setiap baris, kita cobatempatkan ratu mulai dari kolom 1, 2, …, 8.• Jumlah kemungkinan solusi yang diperiksa berkurang

menjadi 88 = 16.777.216

• a) Brute Force 1Mencoba semua kemungkinan solusi penempatandelapan buah ratu pada petak-petak papan catur.Ada C(64, 8) = 4.426.165.368 kemungkinan solusi.• b) Brute Force 2Meletakkan masing-masing ratu hanya pada baris-baris yang berbeda. Untuk setiap baris, kita cobatempatkan ratu mulai dari kolom 1, 2, …, 8.• Jumlah kemungkinan solusi yang diperiksa berkurang

menjadi 88 = 16.777.216

Page 31: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

procedure Ratu1{Mencari semua solusi penempatan delapan ratu pada petak-petak papan caturyang berukuran 8 x 8 }Deklarasii1, i2, 13, 14, i5, i6, i7, i8 : integer

Algoritma:for i11 to 8 dofor i21 to 8 dofor i31 to 8 do

for i41 to 8 dofor i51 to 8 dofor i61 to 8 do

for i71 to 8 dofor i11 to 8 do

if Solusi(i1, i2, i3, i4, i5, i6, i7, i8) thenwrite(i1, i2, i3, i4, i5, i6, i7, i8)

endifendfor

endforendfor

endforendfor

endforendforendfor

procedure Ratu1{Mencari semua solusi penempatan delapan ratu pada petak-petak papan caturyang berukuran 8 x 8 }Deklarasii1, i2, 13, 14, i5, i6, i7, i8 : integer

Algoritma:for i11 to 8 dofor i21 to 8 dofor i31 to 8 do

for i41 to 8 dofor i51 to 8 dofor i61 to 8 do

for i71 to 8 dofor i11 to 8 do

if Solusi(i1, i2, i3, i4, i5, i6, i7, i8) thenwrite(i1, i2, i3, i4, i5, i6, i7, i8)

endifendfor

endforendfor

endforendfor

endforendforendfor

Page 32: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

• c) Brute Force 3 (exhaustive search)Misalkan solusinya dinyatakan dalam vektor 8-tupple:

X = (x1 , x2 , ... , x8)Vektor solusi merupakan permutasi daribilangan 1 sampai 8.Jumlah permutasi bilangan 1 sampai 8 adalahP(1, 8)= 8! = 40.320 buah.

• c) Brute Force 3 (exhaustive search)Misalkan solusinya dinyatakan dalam vektor 8-tupple:

X = (x1 , x2 , ... , x8)Vektor solusi merupakan permutasi daribilangan 1 sampai 8.Jumlah permutasi bilangan 1 sampai 8 adalahP(1, 8)= 8! = 40.320 buah.

Page 33: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

procedure Ratu2{Mencari semua solusi penempatan delapan ratu pada petak-petakpapan catur yang berukuran 8 x 8 }DeklarasiX : vektor_solusin,i : integer

Algoritma:n40320 { Jumlah permutasi (1, 2, …, 8) }i1repeatXPermutasi(8) { Bangkitan permutasi (1, 2, …, 8) }

{ periksa apakah X merupakan solusi }if Solusi(X) thenTulisSolusi(X)

endifii+1 { ulangi untuk permutasi berikutnya }

until i > n

procedure Ratu2{Mencari semua solusi penempatan delapan ratu pada petak-petakpapan catur yang berukuran 8 x 8 }DeklarasiX : vektor_solusin,i : integer

Algoritma:n40320 { Jumlah permutasi (1, 2, …, 8) }i1repeatXPermutasi(8) { Bangkitan permutasi (1, 2, …, 8) }

{ periksa apakah X merupakan solusi }if Solusi(X) thenTulisSolusi(X)

endifii+1 { ulangi untuk permutasi berikutnya }

until i > n

Page 34: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Penyelesaian denganAlgoritma Runut-balik

• Algoritma runut-balik memperbaiki algoritmabrute force 3 (exhaustive search).

• Ruang solusinya adalah semua permutasi dariangka-angka 1, 2, 3, 4, 5, 6, 7, 8. Setiappermutasi dari 1, 2, 3, 4, 5, 6, 7, 8 dinyatakandengan lintasan dari akar daun. Sisi-sisi padapohon diberi label nilai xi.

• Contoh: Pohon ruang-status persoalan 4-Ratu

• Algoritma runut-balik memperbaiki algoritmabrute force 3 (exhaustive search).

• Ruang solusinya adalah semua permutasi dariangka-angka 1, 2, 3, 4, 5, 6, 7, 8. Setiappermutasi dari 1, 2, 3, 4, 5, 6, 7, 8 dinyatakandengan lintasan dari akar daun. Sisi-sisi padapohon diberi label nilai xi.

• Contoh: Pohon ruang-status persoalan 4-Ratu

Page 35: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Pohon ruang status statispersoalan 4-Ratu

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

4 6 9 11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64

3 8 13 19 24 29 35 40 45 51 56 61

2 18 34 50

x1=1 x1=2 x1=3 x1=4

x2=2 x2=3x2=4 x2=1 x2=4

x1=1x2=1 x2=2 x2=4 x2=1 x2=2

x2=3

x3=3 x3=4 x3=2 x3=4x3=2 x3=3

x3=3 x3=4

x3=3 x3=4

x3=1 x3=3

x3=2 x3=4

x3=1 x3=4

x3=1 x3=2

x3=2 x3=3

x3=1 x3=3

x3=1 x3=2

x4=4x4=3

x4=4x4=2

x4=3x4=2

x4=4

x4=3

x4=4

x4=3

x4=3

x4=1

x4=4

x4=2

x4=4

x4=1

x4=2x4=1

x4=3

x4=2

x4=3

x4=1

x4=2

x4=1

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

4 6 9 11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64

3 8 13 19 24 29 35 40 45 51 56 61

2 18 34 50

x1=1 x1=2 x1=3 x1=4

x2=2 x2=3x2=4 x2=1 x2=4

x1=1x2=1 x2=2 x2=4 x2=1 x2=2

x2=3

x3=3 x3=4 x3=2 x3=4x3=2 x3=3

x3=3 x3=4

x3=3 x3=4

x3=1 x3=3

x3=2 x3=4

x3=1 x3=4

x3=1 x3=2

x3=2 x3=3

x3=1 x3=3

x3=1 x3=2

x4=4x4=3

x4=4x4=2

x4=3x4=2

x4=4

x4=3

x4=4

x4=3

x4=3

x4=1

x4=4

x4=2

x4=4

x4=1

x4=2x4=1

x4=3

x4=2

x4=3

x4=1

x4=2

x4=1

Page 36: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

solusi runut-balik persoalan 4-Ratu1

(a)

1

2

1

2

1

3

2

1

3

2

1 1

2

1

3

2

4

(b) (c) (d)

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

1

(a)

1

2

1

2

1

3

2

1

3

2

1 1

2

1

3

2

4

(b) (c) (d)

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

Page 37: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

4-Queens

QQ xx x

Q x x

Qxx

Q x

Qxx

Q x QQ x x Q x Q x Q

Qxx Q

Q x x

Qxx Q

Q x x Q

Qxx Q Q

Q x x x

Page 38: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

4-Queens

Qx Qx Q x

Q x x x

Q Qx xx Q x

Q x x x

Qx Qx x

Q x xQ x x x Q x x x Q x x

Q Qx xx x

Q x x

Qxx

Q xQx

Page 39: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

4-Queens

Qx

Qx Q

Q Qx xx x Q x x

QQ xx x

Qx

Q xx x

Qx

Q xx x Q

Page 40: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

4-Queens

Qx

Q xx x Q Q

Qx

Q x Qx x Q x

Qx Q

Q x xx x Q xx x Q Q x x Q x x x Q x

Page 41: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

4-Queens

1

1 2 3 4

2

1 2 3 41 2 3 4

1 2 3 4 1 2 43

1 2 43

1 2 3 4

1

1 2 3

Page 42: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Pohon ruang status dinamis persoalan 4-Ratuyang dibentuk selama pencarian

1

15 31

9 11 14 16 30

3 8 13 19 24 29

2 18

x1=1

x2=4x2=2 x2=3x2=4

x1=2

x2=1x2=3

x3=2 x3=4x3=2 x3=3

x3=1

x4=3 x4=3

B

B B

B

B

B B

1

15 31

9 11 14 16 30

3 8 13 19 24 29

2 18

x1=1

x2=4x2=2 x2=3x2=4

x1=2

x2=1x2=3

x3=2 x3=4x3=2 x3=3

x3=1

x4=3 x4=3

B

B B

B

B

B B

Page 43: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Algoritma Runut-balik untukPersoalan 8-Ratu (iteratif)

• Matrik papan catur

1 2 3 4 5 6 7 8122345678

Page 44: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Dua buah ratu terletak pada baris yang sama,berarti i=kDua buah ratu terletak pada kolom yang sama,berarti j=lDua buah ratu terletak pada diagonal yangsama, berarti

i-j=k-l atau i+j=k+l i-k=j-l atau k-i=j-l j-l= i-k

Dua buah ratu terletak pada baris yang sama,berarti i=kDua buah ratu terletak pada kolom yang sama,berarti j=lDua buah ratu terletak pada diagonal yangsama, berarti

i-j=k-l atau i+j=k+l i-k=j-l atau k-i=j-l j-l= i-k

Page 45: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Skema iteratif : N_Ratu_I(8)procedure N_RATU_I(input N:integer){ Mencetak semua solusi penempatan N buah ratu padapetak papan catur N x N tanpa melanggar kendala; versi iteratifMasukan: N = jumlah ratuKeluaran: semua solusi x = (x[1], x[2], …, x[N]) dicetak ke layar.

}Deklarasik : integer

Algoritma:k1 {mulai pada baris catur ke-1}x[1]0 {inisialisasi kolom dengan 0}while k > 0 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) }if x[k] n then { kolom penempatan ratu ditemukan }

if k=N then { apakah solusi sudah lengkap?}CetakSolusi(x,N) { cetak solosi}

elsekk+1 {pergi ke baris berikutnya}x[k]0 {inisialisasi kolom dengan 0}

endifelse

kk-1 { runut-balik ke baris sebelumnya}endif

endwhile{ k = 0 }

procedure N_RATU_I(input N:integer){ Mencetak semua solusi penempatan N buah ratu padapetak papan catur N x N tanpa melanggar kendala; versi iteratifMasukan: N = jumlah ratuKeluaran: semua solusi x = (x[1], x[2], …, x[N]) dicetak ke layar.

}Deklarasik : integer

Algoritma:k1 {mulai pada baris catur ke-1}x[1]0 {inisialisasi kolom dengan 0}while k > 0 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) }if x[k] n then { kolom penempatan ratu ditemukan }

if k=N then { apakah solusi sudah lengkap?}CetakSolusi(x,N) { cetak solosi}

elsekk+1 {pergi ke baris berikutnya}x[k]0 {inisialisasi kolom dengan 0}

endifelse

kk-1 { runut-balik ke baris sebelumnya}endif

endwhile{ k = 0 }

Page 46: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

function TEMPAT(input k:integer)boolean{true jika ratu dapat ditempatkan pada kolom x[k], false jikatidak}Deklarasi

i : integerstop : boolean

Algoritma:kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom

x[k] }{ periksa apakah memang ratu dapat ditempatkan pada kolom x[k] }i1 { mulai dari baris pertama}stopfalsewhile (i<k) and (not stop) do

if (x[i]=x[k]){apakah ada dua buah ratu pada kolom yangsama?}

or {atau}

(ABS(x[i]-x[k])=ABS(i-k)) {dua ratu pada diagonal yangsama?}

thenkedudukanfalsekeluartrue

elseii+1 { periksa pada baris berikutnya}

endifendwhile{ i = k or keluar }

return kedudukan

function TEMPAT(input k:integer)boolean{true jika ratu dapat ditempatkan pada kolom x[k], false jikatidak}Deklarasi

i : integerstop : boolean

Algoritma:kedudukantrue { asumsikan ratu dapat ditempatkan pada kolom

x[k] }{ periksa apakah memang ratu dapat ditempatkan pada kolom x[k] }i1 { mulai dari baris pertama}stopfalsewhile (i<k) and (not stop) do

if (x[i]=x[k]){apakah ada dua buah ratu pada kolom yangsama?}

or {atau}

(ABS(x[i]-x[k])=ABS(i-k)) {dua ratu pada diagonal yangsama?}

thenkedudukanfalsekeluartrue

elseii+1 { periksa pada baris berikutnya}

endifendwhile{ i = k or keluar }

return kedudukan

Page 47: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

Versi rekursif

Algoritma:Inisialisasi x[1], x[2], …, x[N] dengan 0

for iN to n dox[i]0

endfor

Panggil prosedur N_RATU_R(1)

Algoritma:Inisialisasi x[1], x[2], …, x[N] dengan 0

for iN to n dox[i]0

endfor

Panggil prosedur N_RATU_R(1)

source1 simulasi1 source2 simulasi2

Page 48: wijanarto - UDiNus Repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "Misal anda harus membuat beberapa keputusan ... "Kita akan konstruksikan contoh ini dalam java

procedure N_RATU_R(input k:integer){ Menempatkan ratu pada baris ke-k pada petak papan catur N x Ntanpa melanggar kendala; versi rekursifMasukan: N = jumlah ratuKeluaran: semua solusi x = (x[1], x[2], …, x[N]) dicetak ke layar. }

Deklarasistop : boolean

Algoritma:stopfalsewhile 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]+1endwhile{ x[k] > n or TEMPAT(k) }if x[k] N then { kolom penempatan ratu ditemukan }

if k=N then { apakah solusi sudah lengkap? }

CetakSolusi(x,N) { cetak solusi }elseN_RATU_R(k+1)else { x[k] > N gagal, semua kolom sudah dicoba }stoptruex[k]0

endifendwhile{stop}

procedure N_RATU_R(input k:integer){ Menempatkan ratu pada baris ke-k pada petak papan catur N x Ntanpa melanggar kendala; versi rekursifMasukan: N = jumlah ratuKeluaran: semua solusi x = (x[1], x[2], …, x[N]) dicetak ke layar. }

Deklarasistop : boolean

Algoritma:stopfalsewhile 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]+1endwhile{ x[k] > n or TEMPAT(k) }if x[k] N then { kolom penempatan ratu ditemukan }

if k=N then { apakah solusi sudah lengkap? }

CetakSolusi(x,N) { cetak solusi }elseN_RATU_R(k+1)else { x[k] > N gagal, semua kolom sudah dicoba }stoptruex[k]0

endifendwhile{stop}