Uploaded by Big Master

Rangkuman Bab 3.5

advertisement
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.
Download