Ketika Melintasi Pohon / Grafik apa perbedaan antara Breadth First dan Depth pertama? Contoh pengkodean atau pseudocode akan bagus.
172
Ketika Melintasi Pohon / Grafik apa perbedaan antara Breadth First dan Depth pertama? Contoh pengkodean atau pseudocode akan bagus.
Jawaban:
Kedua istilah ini membedakan antara dua cara berjalan pohon yang berbeda.
Mungkin paling mudah untuk menunjukkan perbedaannya. Pertimbangkan pohonnya:
Sebuah mendalam pertama traversal akan mengunjungi simpul dalam urutan ini
Perhatikan bahwa Anda berjalan jauh ke bawah satu kaki sebelum melanjutkan.
Sebuah luasnya pertama traversal akan mengunjungi node dalam urutan ini
Di sini kami bekerja sepanjang jalan di setiap level sebelum turun.
(Perhatikan bahwa ada beberapa ambiguitas dalam pesanan traversal, dan saya telah menipu untuk mempertahankan urutan "membaca" di setiap tingkat pohon. Dalam kedua kasus itu saya bisa mencapai B sebelum atau setelah C, dan juga saya bisa mendapatkan ke E sebelum atau sesudah F. Ini mungkin atau mungkin tidak masalah, tergantung pada aplikasi Anda ...)
Kedua jenis traversal dapat dicapai dengan kodesemu:
Perbedaan antara dua perintah traversal terletak pada pilihan
Container
.Implementasi rekursif terlihat seperti
Rekursi berakhir ketika Anda mencapai simpul yang tidak memiliki anak, sehingga dijamin akan berakhir untuk grafik asiklik yang terbatas.
Pada titik ini, saya masih sedikit curang. Dengan sedikit kepintaran, Anda juga dapat mengerjakan node dalam urutan ini:
yang merupakan variasi dari kedalaman-pertama, di mana saya tidak melakukan pekerjaan di setiap node sampai saya berjalan kembali ke atas pohon. Namun saya telah mengunjungi node yang lebih tinggi dalam perjalanan untuk menemukan anak-anak mereka.
Traversal ini cukup alami dalam implementasi rekursif (gunakan baris "Waktu alternatif" di atas sebagai ganti baris "Work" pertama), dan tidak terlalu sulit jika Anda menggunakan stack eksplisit, tetapi saya akan membiarkannya sebagai latihan.
sumber
A, B, D, C, E, F
- yang pertama disajikan), infix (D, B, A, E, C, F
- digunakan untuk menyortir: tambahkan sebagai pohon AVL lalu baca infix) atauD, B, E, F, C, A
traversal postfix ( alternatif disajikan). Nama-nama diberikan oleh posisi di mana Anda memproses root. Perlu dicatat bahwa infiks hanya benar-benar masuk akal untuk pohon biner. @batbrat itu adalah nama-nama ... mengingat waktu sejak Anda bertanya, Anda mungkin sudah tahu.Memahami ketentuan:
Gambar ini harus memberi Anda ide tentang konteks di mana kata luas dan kedalaman digunakan.
Pencarian Kedalaman-Pertama:
Algoritma pencarian Kedalaman-pertama bertindak seolah-olah ingin pergi sejauh mungkin dari titik awal.
Biasanya menggunakan a
Stack
untuk mengingat ke mana ia harus pergi ketika mencapai jalan buntu.Aturan untuk diikuti: Dorong verteks pertama A ke
Stack
Kode Java:
Aplikasi : Pencarian mendalam pertama kali sering digunakan dalam simulasi game (dan situasi seperti game di dunia nyata). Dalam gim biasa Anda dapat memilih salah satu dari beberapa tindakan yang mungkin. Setiap pilihan mengarah ke pilihan lebih lanjut, masing-masing mengarah ke pilihan lebih lanjut, dan seterusnya ke dalam grafik kemungkinan berbentuk pohon yang terus berkembang.
Pencarian Breadth-First:
Queue
.Kode Java:
Aplikasi : Pencarian Breadth-first pertama-tama menemukan semua simpul yang satu ujung dari titik awal, lalu semua simpul yang berjarak dua tepi, dan seterusnya. Ini berguna jika Anda mencoba menemukan jalur terpendek dari titik awal ke titik tertentu.
Semoga itu cukup untuk memahami pencarian Breadth-First dan Depth-First. Untuk bacaan lebih lanjut saya akan merekomendasikan bab Grafik dari buku struktur data yang sangat baik oleh Robert Lafore.
sumber
Diberikan pohon biner ini:
Breadth First Traversal:
Melintasi setiap level dari kiri ke kanan.
"Aku G, anak-anakku D dan aku, cucuku adalah B, E, H dan K, cucu mereka adalah A, C, F"
Depth First Traversal:
Traversal tidak dilakukan ACROSS seluruh level sekaligus. Sebagai gantinya, penyelaman traversal ke DEPTH (dari akar ke daun) dari pohon terlebih dahulu. Namun, ini sedikit lebih kompleks daripada hanya naik turun.
Ada tiga metode:
Penggunaan (alias, mengapa kita peduli):
Saya benar-benar menikmati penjelasan Quora sederhana ini tentang metode Traversal Kedalaman Pertama dan bagaimana mereka biasa digunakan:
"In-Order Traversal akan mencetak nilai [agar BST (pohon pencarian biner)] "
" Travers pre-order digunakan untuk membuat salinan [pohon pencarian biner]. "
"Travers postorder digunakan untuk menghapus [pohon pencarian biner]."
https://www.quora.com/What-is-the-use-of-pre-order-and-post-order-traversal-of-binary-trees-in-computing
sumber
Saya pikir akan menarik untuk menulis keduanya dengan cara yang hanya dengan mengganti beberapa baris kode akan memberikan Anda satu algoritma atau yang lain, sehingga Anda akan melihat bahwa dillema Anda tidak begitu kuat seperti yang terlihat pada awalnya. .
Saya pribadi menyukai interpretasi BFS sebagai membanjiri lanskap: daerah dataran rendah akan dibanjiri terlebih dahulu, dan baru kemudian daerah dataran tinggi akan mengikuti. Jika Anda membayangkan ketinggian lanskap sebagai isoline seperti yang kita lihat dalam buku-buku geografi, mudah untuk melihat bahwa BFS mengisi semua area di bawah isoline yang sama pada saat yang sama, seperti halnya dengan fisika. Dengan demikian, menafsirkan ketinggian sebagai jarak atau biaya skala memberikan ide algoritma yang cukup intuitif.
Dengan pemikiran ini, Anda dapat dengan mudah menyesuaikan ide di balik pencarian pertama yang luas untuk menemukan pohon rentang minimum dengan mudah, jalur terpendek, dan juga banyak algoritma minimisasi lainnya.
Saya belum melihat interpretasi intuitif dari DFS (hanya yang standar tentang labirin, tetapi tidak sekuat BFS dan banjir), jadi bagi saya tampaknya BFS tampaknya berkorelasi lebih baik dengan fenomena fisik seperti dijelaskan di atas, sementara DFS berkorelasi lebih baik dengan pilihan dillema pada sistem rasional (yaitu orang atau komputer yang memutuskan untuk melakukan permainan catur atau keluar dari labirin).
Jadi, bagi saya perbedaan antara kebohongan di mana fenomena alam paling cocok dengan model propagasi mereka (transversing) dalam kehidupan nyata.
sumber