wijanarto - udinus repositoryeprints.dinus.ac.id/14270/1/slide_14.pdf · backtracking "misal...
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/1.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/2.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/3.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/4.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/5.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/6.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/7.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/8.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/9.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/10.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/11.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/12.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/13.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/14.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/15.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/16.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/17.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/18.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/19.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/20.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/21.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/22.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/23.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/24.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/25.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/26.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/27.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/28.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/29.jpg)
8-Ratu
Q
Q
Q
Q
![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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/30.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/31.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/32.jpg)
• 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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/33.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/34.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/35.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/36.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/37.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/38.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/39.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/40.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/41.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/42.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/43.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/44.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/45.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/46.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/47.jpg)
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](https://reader038.vdocuments.net/reader038/viewer/2022103107/5aece4f27f8b9a585f8f76ef/html5/thumbnails/48.jpg)
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}