Nama : Achmad Maulana Amri NPM : 4518212047
Desain Analisa Algoritma
Algoritma Depth First Search dan Breath First Search
1. Depth First Search a. Pengertian
Depth first search adalah algoritma pencarian yang dilakukan pada satu node dalam setiap level dari yang paling kiri. Jika pada level yang paling dalam, solusi belum ditemukan, maka pencarian dilanjutkan pada node sebelah kanan. Node yang kiri dapat dihapus dari memori. Jika pada level yang paling dalam tidak ditemukan solusi, maka pencarian dilanjutkan pada level sebelumnya.
Demikian seterusnya sampai ditemukan solusi.
b. Cara Kerja
Algoritma DFS Contoh Implementasi
void DFS_printPreOrder(simpul
*root){
if(root!=NULL){
stack S;
createEmptyStack(&S);
push(root, &S);
while(isStackEmpty(S)
!= 1){
printf("%c ", S.top->elemen->huruf);
simpul *node = peek(S);
pop(&S);
if(node->right !=
NULL){
push(node-
>right, &S);
}
if(node->left !=
NULL){
push(node-
>left, &S);
} }
printf("\n");
} }
a. Pohon Biner
b. Kondisi Stack
Penyelesaian :
Dengan menggunakan algoritma BFS maka pencarian dilakukan dengan memprioritas untuk memasukkan anak simpul dari sebelah kanan terlebih dahulu ke dalam stack. Sehingga, pada iterasi 2 elemen A dihapus lalu memasukkan anak simpulnya yaitu C dulu, baru B
ke dalam stack. Selain itu bisa dilihat stack teratas (yang diwarna biru) pada tiap iterasi memiliki urutan A – B – D – H – E – I – C – F – G – J – K – L.
Urutan kerja dari Algoritma DFS adalah Sebagai Berikut : - Masukkan simpul root ke dalam tumpukan dengan push
- Ambil dan simpan isi elemen (berupa simpul pohon) dari tumpukan teratas - Hapus isi stack teratas dengan prosedur pop
- Periksa apakah simpul pohon yang disimpan tadi memiliki anak simpul - Jika ya, push semua anak simpul yang dibangkitkan ke dalam stack - Jika tumpukan kosong berhenti, tapi jika tidak kembali ke langkah dua
c. Time Complexity
Depth First Search mengunjungi setiap titik sekali dan memeriksa setiap edge dalam grafik satu kali. Oleh karena itu, complexity DFS adalah O(V+E)
2. Breath First Search a. Pengertian
Merupakan algoritma yang melakukan pencarian secara melebar yang mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi semua simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Selanjutnya, simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya
b. Cara Kerja
Algoritma BFS Contoh Implementasi
void BFS_printLevelOrder(simpul
*root){
if(root!=NULL){
queue Q;
createEmptyQueue(&Q);
addQueue(root, &Q);
while(isQueueEmpty(Q) != 1){
printf("%c ", Q.first-
>elemen->huruf);
if(Q.first->elemen->left
!= NULL){
addQueue(Q.first-
>elemen->left, &Q);
}
if(Q.first->elemen->right
!= NULL){
addQueue(Q.first-
>elemen->right, &Q);}
delQueue(&Q);
a. Pohon Biner
b. Kondisi Stack
}
printf("\n");
} }
Penyelesainnya :
Dengan menggunakan algoritma BFS maka pencarian dilakukan dengan memprioritaskan untuk memasukkan anak simpul dari sebelah kiri terlebih dahulu ke dalam queue. Sehingga, pada iterasi 2 elemen A dihapus lalu memasukkan anak simpulnya yaitu B dulu, baru C ke dalam stack. Untuk penelusurannya yang dilihat adalah bagian yang berwarna biru, yaitu antrian terdepan yang setiap iterasinya memiliki urutan A – B – C – D – E – F – G – H – I – J – K – L. Sama seperti DFS lagi pada iterasi ke 13 itu kondisi antrian sudah kosong.
Urutan kerja dari algoritma BFS adalah sebagai berikut : - Masukkan simpul root ke dalam antrian
- Periksa antrian terdepan apakah memiliki anak simpul - Jika ya, masukan semua anak simpul ke dalam antrian - Hapus antrian terdepan
- Jika antrian kosong berhenti, tapi jika tidak kembali ke langkah dua
c. Time Complexity
Breadth-first Search memiliki running time O (V + E) karena setiap node / vertex (V) dan setiap edge (E) akan diperiksa satu kali. Tergantung pada input ke graf, O (E) bias antara O (1) dan O(V2)
3. Implementasi Source Code
Hasil Running