NIM
: 1137050073
Kelas : IF B
UTS Intelegensia Buatan
BFS
BFS (Breadth First Search) juga merupakan salah satu algoritma penelusuran struktur graf /
pohon seperti DFS, namun bedanya BFS melakukan pencarian secara melebar atau per level
pohon. Simpul ditelusuri dari root kemudian menelusuri semua simpul pada setiap level di
bawahnya ( misalnya prioritas penelusuran dari kiri ke kanan ), maka penelusuran dilakukan terus
dari simpul paling kiri ke simpul anak anak tetangganya yang selevel.
Salah satu cara implementasi BFS adalah dengan bantuan struktur data queue. Sama seperti stack
pada DFS, queue yang digunakan adalah queue yang isi elemennya adalah simpul pohon / tree.
Berikut ini adalah urutan algoritmanya :
1.
2.
3.
4.
5.
Untuk gambar pohon biner di atas, urutan langkah dan kondisi queue pada setiap iterasinya
adalah sebagai berikut :
Contoh diatas menggunakan prioritas 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.
-
DFS
DFS (Depth-First-Search) adalah salah satu algoritma penelusuran struktur graf / pohon
berdasarkan kedalaman. Simpul ditelusuri dari root kemudian ke salah satu simpul anaknya (
misalnya prioritas penelusuran berdasarkan anak pertama [simpul sebelah kiri] ), maka
penelusuran dilakukan terus melalui simpul anak pertama dari simpul anak pertama level
sebelumnya hingga mencapai level terdalam.
Setelah sampai di level terdalam, penelusuran akan kembali ke 1 level sebelumnya untuk
menelusuri simpul anak kedua pada pohon biner [simpul sebelah kanan] lalu kembali ke langkah
sebelumnya dengan menelusuri simpul anak pertama lagi sampai level terdalam dan seterusnya.
Jadi, jika ada pohon biner seperti gambar di bawah ini :
Jadi, untuk gambar pohon biner di atas urutan langkah dan kondisi stack-nya setiap iterasi adalah:
Contoh diatas menggunakan prioritas 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. Oiya, pada
iterasi ke 13 itu kondisi stack sudah kosong karena ketika simpul J dibangkitkan tidak ada anak
simpul yang dimasukkan ke stack.
-
iterasi ke 13 itu kondisi stack sudah kosong karena ketika simpul J dibangkitkan tidak ada anak
simpul yang dimasukkan ke stack. simpul tersebut, kemudian dicek satu-satu mulai dari simpul
terdekatnya, seterusnya, sampai menemukan tujuan. Berikut ini pada gambar 4.1 dapat dilihat
perbedaan urutan langkah masing-masing algoritma.
Kedua algoritma ini berjalan dengan waktu yang proporsional dengan sisi-sisi pada graf.
Kompleksitas waktu DFS dan BFS proporsional dengan jumlah simpul ditambah jumlah sisi pada
graf yang ditelusuri (O(|V| + |E|)).
Kompleksitas ruang DFS lebih rendah dari BFS. Kompleksitas ruang tersebut memberikan DFS
metode heuristik yang lebih baik dalam memilih cabang yang mungkin nampak pada jalannya.
Kompleksitas ruangDFS adalah O(h) dimana h adalah panjang dari lintasan sederhana terpanjang
pada graf, sedangkan kompleksitas ruang BFS adalah O( | V | + | E | ).
Terdapat pencarian postorder pada Depth first search, yang memeriksa banyak simpul dan
mendapatkan banyak informasi. Breadth first search tidak memiliki hal ini, karena ia tidak
mempunyai rekursifitas. Hal ini menyebabkan aplikasi dari DFS lebih banyak dibandingkan BFS.
Depth first dan breadth first search keduanya memiliki keuntungan, yang lebih baik bergantung
pada masalahnya. Untuk pohon pencarian , depth first search membutuhkan memori lebih sedikit.
Namun, depth first search dapat terjebak dalam penelusuran yang lama. Depth first bagus ketika
ada banyak kemungkinan solusi, dan kita hanya menginginkan satu saja (tidak peduli yang mana
itu). Breadth first search mungkin membutuhkan lebih banyak memori, tapi tidak akan pernah
terjebak, akan selalu menemukan lintasan terpendek yang pertama. Kemangkusan algoritma
pencarian keduanya akan bergantung pada masalah yang ingin dipecahkan, dan ruang
pencariannya.
BFS biasa direpresentasi dengan Queue, sedangkan DFS dengan Stack. Algoritma DFS tidak
optimal, sedangkan BFS optimal untuk graf tak berbobot. Kedua algorima ini membentuk pohon
merentang yang sangat berguna pada algoritma graf yang lain.
DFS dan BFS dalam aplikasinya dapat mencari hutan merentang, komponen terhubung, lintasan,
dan sirkuit. Sedangkan untuk masing-masingnya, BFS dapat mencari lintasan terpendek, dan DFS
dapat mencari komponen terhubung biconnected. Biconnected berarti graf tak dapat dipisah,
maksudnya jika ada simpul yang akan dihapus, graf akan tetap terhubung.
3. Hill Climbing