Depth First Search dan Breadth First Search Fahem,Kiki,Naufal,Alif,Donvito,Bryan Depth-First Search merupakan algoritma rekursif pencarian jalur atau graph pada struktur data graph. Algoritma ini mengunjungi mengunjungi satu per satu dari sebuah node sedalam mungkin sebelum kembali menjelajahi cabang yang lain dan tidak akan menelusuri dua cabang sekaligus. Maka dapat kita ketahui bahwa DFS bekerja dengan cara menelusuri jalur yang terdalam terlebih dahulu dan tidak memeriksa opsi jalur lain yang ada.Perjalanan DFS dimulai dengan menelusuri node (vertex) pertama dari graph dan menandainya sebagai node yang sudah didatangi, lalu mengeksplor node yang berdekatan dan belum dikunjungi dari node itu secara berurutan. Proses akan diulang sampai mengunjungi setiap node yang belum dikunjungi, dan akan selesai jika seluruh graph telah tereksplorasi. Jika terdapat beberapa titik yang berdekatan (tie) maka algoritma akan melakukan (tie breaking) dengan beberapa cara, berikut diantaranya: 1. 2. 3. 4. Arbitrary order: dengan cara memilih salah satu titik yang belum didatangi dari beberapa titik yang menjadi pilihan. Random order: dengan memilih titik yang belum dikunjungi secara acak, car aini berguna saat graph berukuran besar. Priority order: dengan cara memilih titik yang belum dikunjungi yang memiliki prioritas tertingi. Prioritas dapat berupa jarak titik ke tujuan. Lexicographic order: Dengan cara melihat label pada titik, dalam banyak kasus akan memilih sesuai label dalam urutan alfabet. Untuk menggunakan algoritma DFS, kita dapat menggunakan stack yang dapat membantu menyimpan node yang telah dikunjungi sebagai sejarah untuk balik ke node sebelumnya jika sudah tidak menemukan node pada vertex tertentu. Namun, DFS juga memiliki kelemahan yaitu, jika graph memiliki akar dan node dalam skala besar maka menggunakan algoritma DFS berpotensi menggunakan banyak jalur yang mengakibatkan kecepatan algoritma yang lambat dibanding algoritma lain Fungsi utama dari DFS adalah untuk melakukan pencarian jalur pada struktur data graph. DFS dapat digunakan untuk menemukan jalur terpendek antara dua node dalam graph, menemukan jalur yang memenuhi suatu kriteria tertentu (misalnya, jalur dengan jumlah bobot terkecil), mencari sirkuit dalam graph, dan memeriksa apakah suatu graph terhubung atau tidak. DFS juga dapat digunakan untuk melakukan operasi topological sorting pada graph, yaitu mengurutkan node dalam graph sehingga setiap node yang terhubung dengan node tertentu ditempatkan sebelum node itu sendiri. Selain itu, DFS juga sering digunakan dalam implementasi algoritma lain seperti algoritma Backtracking, yang digunakan dalam menyelesaikan masalah optimisasi kombinatorial seperti Sudoku dan N-Queens. Berikut ini adalah contoh penerapan DFS pada graph: Misalkan kita memiliki graph sederhana berikut: A /\ B C /\ \ D E F Kita ingin mencari jalur antara node A dan node F menggunakan algoritma DFS. Berikut langkah-langkahnya: 1. Mulailah dengan memilih node pertama dimana disini kita akan memilih node A. Catat node A sebagai node yang telah dikunjungi dan tambahkan node A ke dalam stack. 2. Kunjungi tetangga dari node A dimana terdapat dua pilihan yaitu node B dan node C dan kita hanya bisa pilih satu yang dimana kita pilih node B 3. Catat node B sebagai node yang telah dikunjungi, dan tambahkan node B ke dalam stack. 4. Kunjungi semua node tetangga dari node B. Dalam hal ini ada node D dan node E, kita pilih salah satu yaitu node D 5. Tandai node D sebagai node yang telah dikunjungi, dan tambahkan node D ke dalam stack. 6. Hapus node D dari stack. dan turun satu langkah kembali ke node B. 7. Ketemu node baru yaitu E, kita catat dan kunjungi semua node tetangga dari node E. Karena node E tidak memiliki tetangga, kita kembali ke node B. 8. Karena semua tetangga dari node B telah dikunjungi, kita kembali ke node A dan hapus semua yang telah kita turuni dari stack 9. Masukan node C ke stack, dan kunjungi semua node tetangga dari node C. Dalam hal ini ada node C adalah node F, kita pilih node F 10. Tandai node F sebagai node yang telah dikunjungi, dan tambahkan node F ke dalam stack. 11. Semua node telah dikunjungi maka algoritma selesai Dengan demikian, DFS dapat digunakan untuk menemukan siklus dalam graph dengan memeriksa apakah ada node yang telah dikunjungi sebelumnya selama proses DFS. Jika ada, maka graph tersebut memiliki siklus. DFS juga memiliki keuntungan lain, yaitu mudah diimplementasikan dan memiliki ruang memori yang kecil dibandingkan dengan algoritma penelusuran jalur yang lain seperti Breadth-First Search (BFS). Selain itu, DFS juga dapat digunakan untuk menyelesaikan beberapa jenis masalah lain seperti pencarian komponen terhubung (connected components), pencarian siklus (cycle detection), dan pencarian jembatan (bridge finding). Namun, DFS juga memiliki kelemahan, yaitu dapat terjebak dalam sebuah loop tak berujung (infinite loop) jika grafik yang ditelusuri memiliki sirkuit (circuit) atau mengandung sebuah node yang tidak terhubung ke node lainnya (isolated node). Oleh karena itu, dalam implementasi DFS, kita harus memperhatikan kembali grafik yang akan ditelusuri dan memastikan tidak ada kondisi-kondisi yang dapat menyebabkan DFS terjebak dalam loop tak berujung. Secara umum, DFS adalah algoritma yang sangat berguna dalam pemrograman dan sering digunakan dalam banyak aplikasi seperti permainan video, robotika, optimisasi rute, dan pemrosesan bahasa alami. Breadth-First Search (BFS) merupakan algoritma pencarian yang digunakan untuk mencari simpul atau node pada graf atau struktur data lainnya. Algoritma BFS bekerja dengan mengeksplorasi semua simpul pada level yang sama secara terurut dari kiri ke kanan sebelum pindah ke level berikutnya. BFS dimulai dari simpul awal, kemudian simpul yang bertetanggaan langsung dengan simpul awal ditandai sebagai "dikunjungi" dan dimasukkan ke dalam daftar antrian. Kemudian simpul-simpul ini dikunjungi secara berurutan dan simpul yang belum pernah dikunjungi yang bertetanggaan dengan simpul-simpul ini juga ditandai sebagai "dikunjungi" dan dimasukkan ke dalam daftar antrian. Proses ini berlanjut sampai semua simpul terhubung dengan simpul awal telah dikunjungi. BFS dapat digunakan dalam pengembangan perangkat lunak untuk masalah yang melibatkan pencarian jalur atau penyebaran informasi dalam graf atau struktur data lainnya. Keuntungan utama dari BFS adalah dapat menemukan jalur terpendek di antara dua simpul dalam graf berbobot positif, atau menemukan semua jalur terpendek dari simpul awal ke semua simpul lain dalam graf. Selain itu, BFS juga dapat digunakan dalam banyak aplikasi lain seperti: - Mencari jalur terpendek di antara simpul-simpul dalam jaringan sosial atau jaringan komputer. - Pencarian kata dalam kamus atau teks. - Pencarian jalur di dalam peta. - Mencari jalur terpendek dalam permasalahan routing atau pengiriman paket dalam jaringan. Algoritma BFS dapat diimplementasikan dengan menggunakan antrian atau queue untuk menyimpan simpul yang belum dikunjungi. Ketika suatu simpul dikunjungi, simpul tersebut akan dihapus dari antrian dan simpul-simpul yang belum pernah dikunjungi yang bertetanggaan dengan simpul tersebut akan dimasukkan ke dalam antrian. BFS memiliki kompleksitas waktu O(V+E), di mana V adalah jumlah simpul dalam graf dan E adalah jumlah tepian atau edge dalam graf. Dalam praktiknya, BFS seringkali lebih lambat daripada algoritma pencarian lain seperti Depth-First Search (DFS) pada graf yang sangat besar atau terstruktur secara kompleks. Namun, pada graf yang relatif kecil atau terstruktur dengan baik, BFS dapat memberikan hasil yang lebih akurat dan efisien. Fungsi utama dari Breadth-First Search (BFS) adalah untuk mencari simpul atau node pada graf atau struktur data lainnya. Algoritma ini berfungsi dengan mengeksplorasi simpul-simpul pada graf secara bertahap dari level yang sama, dimulai dari simpul awal, kemudian bergerak ke simpul-simpul yang bertetanggaan langsung dengan simpul awal. Proses ini dilakukan secara terurut dari kiri ke kanan, sehingga algoritma BFS dapat menemukan jalur terpendek dari simpul awal ke semua simpul lain dalam graf. Fungsi-fungsi lain dari BFS antara lain: - Mencari jalur terpendek di antara simpul-simpul dalam jaringan sosial atau jaringan komputer. - Pencarian kata dalam kamus atau teks. - Pencarian jalur di dalam peta. - Mencari jalur terpendek dalam permasalahan routing atau pengiriman paket dalam jaringan. - Mencari jalur terpendek pada permasalahan penjadwalan dalam sistem operasi atau manufaktur. - Mencari solusi optimal pada permasalahan yang melibatkan kecerdasan buatan seperti penyelesaian teka-teki, permainan catur, atau pemecahan masalah logika. Dalam pengembangan perangkat lunak, BFS juga digunakan dalam implementasi berbagai algoritma lain seperti Minimum Spanning Tree, Shortest Path Algorithm, dan Network Flow Algorithm. Selain itu, BFS juga sering digunakan sebagai dasar untuk pengembangan algoritma yang lebih canggih seperti A* Search Algorithm dan Dijkstra's Algorithm. Berikut adalah contoh penerapan algoritma Breadth-First Search (BFS) pada sebuah graf sederhana: Misalkan terdapat graf berikut ini: ``` A / \ B C /\ \ D E F ``` Untuk mencari jalur terpendek dari simpul A ke simpul F, langkah-langkah yang dapat dilakukan dengan menggunakan algoritma BFS adalah sebagai berikut: 1. Simpan simpul A pada sebuah antrian atau queue dan tandai simpul A sebagai sudah dikunjungi. 2. Antrian: A Ambil simpul A dari antrian dan periksa simpul-simpul yang bertetangga dengan A, yaitu simpul B dan C. Masukkan simpul-simpul tersebut ke dalam antrian dan tandai sebagai sudah dikunjungi. 3. Antrian: B C Ambil simpul B dari antrian dan periksa simpul-simpul yang bertetangga dengan B, yaitu simpul D dan E. Masukkan simpul-simpul tersebut ke dalam antrian dan tandai sebagai sudah dikunjungi. 4. Antrian: C D E Ambil simpul C dari antrian dan periksa simpul-simpul yang bertetangga dengan C, yaitu simpul F. Karena simpul F belum dikunjungi, masukkan simpul F ke dalam antrian dan tandai sebagai sudah dikunjungi. 5. Antrian: D E F Ambil simpul D dari antrian dan periksa simpul-simpul yang bertetangga dengan D. Karena simpul-simpul ini sudah dikunjungi, tidak perlu dimasukkan ke dalam antrian lagi. 6. Antrian: E F Ambil simpul E dari antrian dan periksa simpul-simpul yang bertetangga dengan E. Karena simpul-simpul ini sudah dikunjungi, tidak perlu dimasukkan ke dalam antrian lagi. 7. Antrian: F Ambil simpul F dari antrian. Karena simpul F merupakan simpul tujuan, pencarian selesai dan jalur terpendek dari A ke F adalah A - C - F. Dari contoh di atas, dapat dilihat bahwa algoritma BFS bekerja dengan mengeksplorasi simpul-simpul pada graf secara terurut dan menemukan jalur terpendek dari simpul awal ke simpul tujuan. Namun perlu diingat bahwa dalam prakteknya, pencarian jalur dengan menggunakan algoritma BFS dapat memakan waktu yang cukup lama jika graf yang digunakan cukup besar. Oleh karena itu, perlu dilakukan pengoptimalan atau pemangkasan graf yang tidak perlu untuk mempercepat proses pencarian. Kesimpulanya Breadth-First Search (BFS) adalah salah satu algoritma pencarian graf yang bekerja dengan cara mengeksplorasi simpul-simpul pada level yang sama terlebih dahulu sebelum memperluas pencarian ke level yang lebih dalam. Algoritma ini dapat digunakan untuk mencari jalur terpendek dari simpul awal ke simpul tujuan, atau untuk mencari semua jalur yang mungkin dari simpul awal ke simpul tujuan. Dalam prosesnya, algoritma BFS menggunakan struktur data antrian atau queue untuk menyimpan simpul-simpul yang akan dieksplorasi. Setiap simpul yang telah dieksplorasi akan ditandai sebagai sudah dikunjungi agar tidak dieksplorasi lagi pada tahap selanjutnya. Meskipun algoritma BFS relatif mudah dipahami, namun penggunaannya pada graf yang cukup besar dapat memakan waktu yang lama. Oleh karena itu, perlu dilakukan pengoptimalan atau pemangkasan graf yang tidak perlu untuk mempercepat proses pencarian. Perbedaan antara DFS dan BFS hanya pada pemasukan daftar kunjungan ke simpul tetangga. Jika dalam BFS akan mengunjungi semua simpul yang bertetangga untuk memperlebar dengan tidak akan melewatinya lagi jika sudah melewati sampai semua sudah dikunjungi. Jika pada DFS, ingin memperluas simpul dengan masuk kedalam grafik, jadi memasukkan simpul yang baru ke awal kunjungan.