SEARCHING
SEBAGAI TEKNIK PEMECAHAN MASALAH
Pencarian Mendalam Pertama (Depth-First Search)
Searching Sebagai Teknik Pemecahan Masalah
Keuntungan:
1. Membutuhkan memori yang relatif kecil karena hanya node-
node pada lintasan yang aktif saja yang disimpan
2. Secara kebetulan, metode DFS akan menemukan solusi
tanpa harus menguji lebih banyak lagi dalam ruang keadaan
Kelemahan:
1. Memungkinkan tidak ditemukannya tujuan yang diharapkan
2. Hanya akan mendapatkan 1 (satu) solusi pada setiap
pencarian
Pencarian Mendalam Pertama (Depth-First Search)
Contoh:
Misalkan diketahui pohon pelacakan seperti pada gambar
berikut. Implementasikan Algoritma DFS untuk mencari solusi
dari node awal (Start) S sampai node G (Goal)
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-1:
Beri tanda batas pada stack dan masukkan node S ke stack
Masuk dari pintu kiri, keluar lewat pintu kiri
Iterasi ke-2:
Keluarkan A dari stack dan cek
Ternyata A ≠ Goal
A memiliki anak C dan D, beri tanda batas pada stack, dan
masukkan node C dan D ke dalam stack
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-3:
Keluarkan C dari stack dan cek
Ternyata C ≠ Goal
C tidak memiliki anak, jadi tidak ada yang dimasukkan ke
dalam stack
Karena C tidak memiliki anak, maka C tidak dimasukkan ke
solusi sementara
Solusi sementara: [S A]
Pencarian Mendalam Pertama (Depth-First Search)
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-4:
Keluarkan D dari stack dan cek
Ternyata D ≠ Goal
D tidak memiliki anak, jadi tidak ada yang dimasukkan ke
dalam stack
Karena D tidak memiliki anak, maka D tidak dimasukkan ke
solusi sementara
Solusi sementara: [S A]
Pencarian Mendalam Pertama (Depth-First Search)
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-5:
Keluarkan tanda batas dari stack dan gunakan untuk
menghapus solusi sementara satu huruf
Iterasi ke-6:
Keluarkan B dari stack dan cek
Ternyata B ≠ Goal
B memiliki anak E dan F, beri tanda batas dan masukkan node
E dan F ke dalam stack
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-7:
Keluarkan E dari stack dan cek
Ternyata E ≠ Goal
E memiliki anak H dan G, beri tanda batas dan masukkan node
H dan G ke dalam stack
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-8:
Keluarkan H dari stack dan cek
Ternyata H ≠ Goal
H tidak memiliki anak, jadi tidak ada yang dimasukkan ke
dalam stack
Karena H tidak memiliki anak, maka H tidak dimasukkan ke
solusi sementara
Solusi sementara: [S B E]
Pencarian Mendalam Pertama (Depth-First Search)
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Iterasi ke-9:
Keluarkan G dari stack dan cek
Representasi Keadaan:
Pencarian Mendalam Pertama (Depth-First Search)
Tugas:
Misalkan diketahui pohon pelacakan seperti pada gambar
berikut. Implementasikan Algoritma DFS untuk mencari solusi
dari node awal (Start) S sampai node F(Goal)
Contoh Implementasi DFS pada A water jug problem
Misalkan diketahui:
Keadaan awal : (0,0) [keadaan sekarang = (0,0)]
Tujuan (Goal) : (1,0) [keadaan akhir = (1,0)]
Penyelesaian:
Iterasi I
Beri tanda batas dan masukkan node awal (0,0) ke stack.
Stack = [(0,0) ▐] Solusi = [ ]
Ambil keadaan sekarang = (0,0), maka:
Stack = [ ▐] Solusi = [ ]
Cek, ternyata (0,0) ≠ goal
Dari 8 aturan yang ada, hanya aturan ke-1 dan 2 yang memenuhi
syarat, sehingga:
Contoh Implementasi DFS pada A water jug problem
Keadaan sekarang = (0,0) dikenakan aturan ke-1 menjadi (4,0)
Keadaan sekarang = (0,0) dikenakan aturan ke-2 menjadi (0,3)
(0,0) memiliki anak (4,0) dan (0,3), beri tanda batas pada Stack,
dan masukkan node (4,0) dan (0,3) ke Stack. Karena (0,0) memiliki
anak, masukkan ke solusi.
Stack = [(4,0) (0,3) ▐ ▐] Solusi = [ (0,0)]
Representasi ruang keadaan dalam bentuk pohon pelacakan:
Contoh Implementasi DFS pada A water jug problem
Iterasi ke-2:
Stack =[(4,0) (0,3) ▐ ▐] Solusi = [(0,0)]
Ambil keadaan sekarang (4,0) ≠ goal, maka:
Stack = [(0,3) ▐ ▐] Solusi = [(0,0)]
Cek, ternyata (4,0) ≠ goal
Contoh Implementasi DFS pada A water jug problem
(4,0) mempunyai anak (4,3) dan (1,3), beri tanda dan masukkan
node (4,3) dan (1,3) ke Stack. Karena (4,0) memiliki anak,
masukkan ke solusi
Stack =[(4,3) (1,3) ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0)]
Contoh Implementasi DFS pada A water jug problem
Iterasi ke-3:
Stack =[(4,3) (1,3) ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0)]
Ambil keadaan sekarang (4,3) ≠ goal, maka:
Stack = [(1,3) ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0)]
Cek, ternyata (4,3) ≠ goal
Contoh Implementasi DFS pada A water jug problem
Iterasi ke-4:
Stack = [(1,3) ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0)]
Ambil keadaan sekarang (1,3), maka:
Stack = [ ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0)]
Cek, ternyata (1,3) ≠ goal
Contoh Implementasi DFS pada A water jug problem
Iterasi ke-5:
Stack = [ (1,0) ▐ ▐(0,3) ▐ ▐] Solusi = [(0,0),(4,0),(1,3)]