DFS Dan BFS
DFS Dan BFS
Nrp : 2211100154
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
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
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