Anda di halaman 1dari 6

Implementasi Algoritma Depth First Search

(DFS) dengan PHP


http://www.elangsakti.com/2013/02/implementasi-algoritma-depth-first.html
Pada tulisan ini kita akan ngobrol tentang apa itu DSF (Depth First Search) dan implementasinya. DFS
merupakan algoritma dasar pada model pencarian Blind Search. Seperti yang kita bahas pada artikel terdahulu
(Blind Search dan Heuristic Search ), DFS termasuk ke dalam model pencarian apa adanya dan asal ketemu.
Pada DFS, semua kemungkinan akan dipetakan atau digenerate. Karena solusi yang akan dicapai berbentuk
pohon solusi, maka alur pemetaannya adalah diambil dari yang terdalam. Proses pencariannya adalah kebawah
dahulu, baru ke samping. Konsep ini kebalikan dari BFS (Breath First Search) yang proses pencariannya
kesamping dulu, balu ke bawah (dalam).
Oke kita langsung implementasi dan analisa untuk membuktikan alurnya. Harapannya semoga kita semua
lebih memahami bagaimana alur DFS dan menyelaraskan antara teori dan implementasinya. Untuk contohnya
sederhana sih, kita 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:

Dari Agus, setelah dicek Agus ternyata mempunyai dua bawahan.

Periksa bawahan Agus yang pertama, namanya Novan, setelah dicek, Novan punya dua bawahan juga.

Periksa bawahan Novan yang pertama, namanya Syauqil, setelah dicek, Syauqil adalah posisi paling
bawah / ujung.

Periksa bawahan Novan yang kedua, namanya Aji, setelah dicek, dia juga ada di posisi paling bawah
sekaligus yang terakhir.

Berikutnya periksa bawahan Agus yang kedua, namanya Budi, setelah dicek, ternyata dia punya tiga
bawahan.

Bawahan Budi yang pertama adalah Wildan dan dia tidak punya bawahan lagi (posisi paling bawah).

Bawahan Budi yang kedua adalah Ni'am dan dia juga ada di posisi paling bawah.

Bawahan Budi yang ketiga adalah Bayu dan dia juga di posisi paling bawah sekaligus akhir dari
pencarian.

Script di bawah ini 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:

1.

<?php

2.

/*

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;

84.

$explc = -1;

85.

dfs($ar,0,0);

86.

for($a=0; $a<$explc; $a++){

87.

echo menjorok($explv[$a]['base'],' ').$explv[$a]['nama']." (".$explv[$a]['posisi'].")\n";

88.

89.

unset($explc);

90.

unset($explv);

91.

?>

Anda mungkin juga menyukai