0% menganggap dokumen ini bermanfaat (0 suara)
225 tayangan7 halaman

DFS Dan BFS

Dokumen tersebut memberikan penjelasan tentang algoritma pencarian Depth-First Search (DFS) dan Breadth-First Search (BFS) untuk pemecahan masalah graf, mencakup penjelasan tentang cara kerja, kelebihan, dan kekurangan masing-masing algoritma.

Diunggah oleh

Arief B Handoyo S
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
225 tayangan7 halaman

DFS Dan BFS

Dokumen tersebut memberikan penjelasan tentang algoritma pencarian Depth-First Search (DFS) dan Breadth-First Search (BFS) untuk pemecahan masalah graf, mencakup penjelasan tentang cara kerja, kelebihan, dan kekurangan masing-masing algoritma.

Diunggah oleh

Arief B Handoyo S
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 7

Nama : Ahmad Danyalin

Nrp : 2211100154

DFS dan BFS


DEPTH-FIRST SEARCH
merupakan metode pencarian solusi dimana Proses pencarian dilakukan pada semua
anaknya sebelum dilakukan pencarian ke node-node yang selevel. Pencarian dimulai dari
node akar ke level yang lebih tinggi. Proses ini diulangi terus hingga ditemukannya
solusi.

Berikut gambar yang mengiilustrasikan urutan simpul yang dikunjungi pada


algoritma DFS:

Gambar Ilustrasi urutan kunjungan simpul pada algoritma DFS


Dari gambar, dapat dilihat bahwa dengan algoritma DFS, setiap anak
simpul pertama yang bertetangga dengan simpul akar dikunjungi sampai tingkat
terdalamnya lebih dahulu, lalu seluruh simpul pada subpohon tersebut, sebelum
simpul lain yang juga bertetangga dengan simpul akar.
Algoritma DFS
Berikut ini adalah algoritma Depth-First Search :
procedure DFS(input v:integer)
Mengunjungi seluruh simpul graf dengan algoritma pencarian DFS
Masukan: v adalah simpul awal kunjungan
Keluaran: semua simpulyang dikunjungi ditulis ke layar

Deklarasi
w : integer
Algoritma:
write(v)
dikunjungi[v]true
for tiap simpul w yang bertetangga dengan simpul v do
if not dikunjungi[w] then
DFS(w)
endif
endfor
SKENARIO UJI COBA
Pencarian rute terpendek dilakukan dengan cara membuat simpul-simpul
yang menjadi titik awal, titik-titik yang akan dilalui dan juga titik akhir sebagai
akhir dari tujuan atau sebagai simpul yang dicari.
Dalam algoritma DFS, simpul yang telah dikunjungi disimpan dalam suatu
tumpukan (stack). Antrian ini digunakan untuk mengacu simpul-simpul yang
akan dikunjungi sesuai urutan tumpukan (masuk terakhir, keluar pertama) dan
mempermudah proses runut-balik jika simpul sudah tidak mempunyai anak
(simpul pada kedalaman maksimal).
Untuk memperjelas cara kerja algoritma DFS beserta tumpukan yang
digunakannya, berikut langkah-langkah algoritma DFS:
1. Masukkan simpul ujung (akar) ke dalam tumpukan
2. Ambil simpul dari tumpukan teratas, lalu cek apakah simpul merupakan
solusi
3. Jika simpul merupakan solusi, pencarian selesai dan hasil dikembalikan.
4. Jika simpul bukan solusi, masukkan seluruh simpul yang bertetangga
dengan simpul tersebut (simpul anak) ke dalam tumpukan
5. Jika tumpukan kosong dan setiap simpul sudah dicek, pencarian selesai
dan mengembalikan hasil solusi tidak ditemukan
6. Ulangi pencarian dari langkah kedua
Keuntungan Dari Algoritma Depth-First Search

Membutuhkan memori yang relative kecil, karena hanya node-node pada


lintasan yang aktif saja.

Secara kebetulan, metode depth-first search akan menemukan solusi tanpa


harus menguji lebih banyak lagi dalam ruang keadaan.

Kelemahan Dari Algoritma Depth-First Search

Memungkinkan tidak ditemukannya tujuan yang diharapkan.


Hanya akan menemukan satu solusi pada setiap pencarian.

Implementasi dan program


implementasi dan analisa untuk membuktikan alurnya. Untuk contoh yang
sederhana membuat struktur organisasi, kemudian kita urutkan data pejabat dalam
struktur tersebut menggunakan algoritnya DFS, kita urutkan posisinya sesuai
dengan algortma DFS.
Perhatikan gambar berikut:

Berdasarkan teori DFS, yang dicari berawal simpul terdalam / paling awal terlebih
dahulu. Setelah itu merambat satu-persatu ke simpul paling ujung. Jadi model
pnecariannya adalah menurun. Berbeda dengan BFS yang alur pencariannya
menyamping. Alur pencarian pada struktur diatas adalah sebagai berikut:
0. Dari Agus, setelah dicek Agus ternyata mempunyai dua bawahan.
1. Periksa bawahan Agus yang pertama, namanya Novan, setelah dicek, Novan
punya dua bawahan juga.
2. Periksa bawahan Novan yang pertama, namanya Syauqil, setelah dicek,
Syauqil adalah posisi paling bawah / ujung.
3. Periksa bawahan Novan yang kedua, namanya Aji, setelah dicek, dia juga ada
di posisi paling bawah sekaligus yang terakhir.
4. Berikutnya periksa bawahan Agus yang kedua, namanya Budi, setelah dicek,
ternyata dia punya tiga bawahan.

5. Bawahan Budi yang pertama adalah Wildan dan dia tidak punya bawahan lagi
(posisi paling bawah).
6. Bawahan Budi yang kedua adalah Niam dan dia juga ada di posisi paling
bawah.
7. Bawahan Budi yang ketiga adalah Bayu dan dia juga di posisi paling bawah
sekaligus akhir dari pencarian.
Script berikut adalah contoh dari DFS yang dibuat dengan PHP. Data yang dipakai
adalah data array yang sudah diatur seperti struktur jabatan. Data array ini juga
bisa digantikan dengan database. Berikut hasil dari script di bawah ini:
Source Code DFS
PHP
1 <?php
2 /* 1
3 * /\
4 * 2 3___
5 * /\ |\\
6 *4 56 78
7 *
8 */
9
10 $ar[1]['parent']=0;
11 $ar[1]['value']=1;
12 $ar[1]['nama']='Agus';
13 $ar[1]['posisi']='Ketua';
14
15 $ar[2]['parent']=1;
16 $ar[2]['value']=2;
17 $ar[2]['nama']='Novan';
18 $ar[2]['posisi']='Wakil 1';
19
20 $ar[3]['parent']=1;
21 $ar[3]['value']=3;
22 $ar[3]['nama']='Budi';
23 $ar[3]['posisi']='Wakil 2';
24
25 $ar[4]['parent']=2;
26 $ar[4]['value']=4;
27 $ar[4]['nama']='Syauqil';
28 $ar[4]['posisi']='Anggota';
29
30 $ar[5]['parent']=2;
31 $ar[5]['value']=5;
32 $ar[5]['nama']='Aji';
33 $ar[5]['posisi']='Anggota';
34
35 $ar[6]['parent']=3;

36 $ar[6]['value']=6;
37 $ar[6]['nama']='Wildan';
38 $ar[6]['posisi']='Anggota';
39
40 $ar[7]['parent']=3;
41 $ar[7]['value']=7;
42 $ar[7]['nama']='Ni\'am';
43 $ar[7]['posisi']='Anggota';
44
45 $ar[8]['parent']=3;
46 $ar[8]['value']=8;
47 $ar[8]['nama']='Bayu';
48 $ar[8]['posisi']='Anggota';
49
50 function dfs($arr,$parent,$base){
51 global $explc;
52 global $explv;
53 $explc++;
54
55 for($a=1; $a<=count($arr); $a++){
56
if($parent==0){
57
$explv[$explc]['parent'] = $arr[$a-1]['parent'];
58
$explv[$explc]['value'] = $arr[$a-1]['value'];
59
$explv[$explc]['nama'] = $arr[$a-1]['nama'];
60
$explv[$explc]['posisi'] = $arr[$a-1]['posisi'];
61
62
$explv[$explc]['base'] = $base;
63
}
64
if($arr[$a]['parent']==$parent){
65
$explv[$explc]['parent'] = $arr[$a]['parent'];
66
$explv[$explc]['value'] = $arr[$a]['value'];
67
$explv[$explc]['nama'] = $arr[$a]['nama'];
68
$explv[$explc]['posisi'] = $arr[$a]['posisi'];
69
70
$explv[$explc]['base'] = $base;
71
$base++;
72
dfs($arr,$arr[$a]['value'],$base);
73
$base--;
74
}
75 }
76 }
77
78 function menjorok($jumlah,$tanda){
79 for($a=0;$a<$jumlah;$a++) echo $tanda;
80 }
81
82 echo "\n";
83 global $explv,$explc;

$explc = -1;
84
dfs($ar,0,0);
85
for($a=0; $a<$explc; $a++){
86
echo menjorok($explv[$a]['base'],' ').$explv[$a]['nama']." (".$explv[$a]
87
['posisi'].")\n";
88
}
89
unset($explc);
90
unset($explv);
91
?>

BREADTH-FIRST SEARCH
merupakan metode pencarian solusi dimana semua node pada level n akan dikunjungi
terlebih dahulu sebelum mengunjungi node-node pada level n+1. Pencarian dimulai dari
node akar terus ke level 1 dari kiri ke kanan, kemudian berpindah ke level berikutnya dari
kiri ke kanan hingga solusi ditemukan.
Algoritmanya :
-

kunjungi simpul v
kunjungi semua simpul yang bertetangga atau berdekatan dengan simpul v
terlebih dahulu
kunjungi simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul
yang tadi dikunjungi, demikian seterusnya

Cara Kerja Algoritma BFS


Dalam algoritma BFS, simpul anak yang telah dikunjungi disimpan dalam suatu
antrian. Antrian ini digunakan untuk mengacu simpul-simpul yan bertetangga
dengannya yang akan dikunjungi kemudian sesuai urutan pengantrian.
Untuk memperjelas cara kerja algoritma BFS beserta antrian yang digunakannya,
berikut langkah-langkah algoritma BFS:
1. Masukkan simpul ujung (akar) ke dalam antrian

2. Ambil simpul dari awal antrian, lalu cek apakah simpul merupakan solusi
3. Jika simpul merupakan solusi, pencarian selesai dan hasil dikembalikan.
4. Jika simpul bukan solusi, masukkan seluruh simpul yang bertetangga
dengan simpul tersebut (simpul anak) ke dalam antrian
5. Jika antrian kosong dan setiap simpul sudah dicek, pencarian selesai dan
mengembalikan hasil solusi tidak ditemukan
6. Ulangi pencarian dari langkah kedua

Keuntungan yang didapat apabila menggunakan metode BFS ini yaitu:


-

Tidak akan menemui jalan buntu.


Menjamin ditemukannya solusi (jika solusinya memang ada)
dan solusi yang ditemukan pasti yang paling baik.
Jika ada satu solusi maka bread-first search akan
menemukannya.

Dan kekurangan dari metode BFS ini yaitu:


-

Membutuhkan memori yang cukup banyak.


Membutuhkan waktu yang cukup lama.

Anda mungkin juga menyukai