di sekolah kita diajarkan bagaimana kita bisa menyeimbangkan pohon AVL pada saat penyisipan atau penghapusan.
Bagaimana jenis pengetahuan ini benar-benar bermanfaat di dunia nyata? Adakah yang bisa memberi contoh kapan pengetahuan semacam ini benar-benar bermanfaat?
Dari apa yang saya lihat, di tempat kerja detail seperti itu hampir tidak pernah muncul ...
Saya bisa melihat bagaimana pengetahuan terperinci tentang algoritma dan beberapa struktur data bisa penting tetapi tidak detail seperti rotasi pohon AVL (dan konsep detail serupa).
Terima kasih!
Jawaban:
Studi tentang pohon AVL dapat membantu karena alasan berikut:
Ini praktik yang bagus untuk alasan tentang data abstrak. Anda tidak harus memikirkan satu pohon tertentu, Anda harus mempertimbangkan setiap kemungkinan. Berlatih dengan alasan semacam ini dapat membantu dengan kasus yang lebih sederhana juga.
Ini praktik yang bagus untuk memahami predikat dan kontrak. Memastikan bahwa pohon seimbang, dan alat yang Anda gunakan untuk membuktikan setiap operasi menjaga keseimbangan, dapat, misalnya, diterapkan pada masalah keamanan dan kode paralel.
Ini memberdayakan Anda untuk menulis varian Anda sendiri, atau bahkan untuk membuat tipe struktur data yang sama sekali baru.
Anda mungkin harus mengimplementasikan pohon AVL untuk pustaka atau platform baru.
Anda dapat memperdebatkan manfaat khusus mempelajari setiap jenis algoritma penyortiran atau setiap jenis pohon seimbang. Tidak masalah mana yang akhirnya Anda pelajari, tetapi Anda harus memastikan untuk mendapatkan cakupan penuh dari topik yang paling penting.
Jika Anda ingin melihat betapa pentingnya algoritma pengenal di dunia nyata, bacalah " Cara Membunuh Ide Hebat! ", Sebuah artikel di Inc tentang kejatuhan Friendster, dan bagaimana penerapan sekecil apa pun prinsip-prinsip dasar untuk meningkatkan efisiensi dapat membantu mereka.
sumber
Selain poin Macneils ...
Pohon merah-hitam mungkin lebih bermanfaat secara langsung karena ada operasi efisien yang bermanfaat yang tidak banyak didukung dalam implementasi perpustakaan standar seperti C ++
std::map
(setidaknya AFAIK). Pohon merah-hitam dapat mendukung "split" (memotong pohon menjadi dua, satu berisi kunci kurang dari kunci yang ditentukan, dan satu berisi kunci lebih besar) dan "bergabung" (sebaliknya, menggabungkan pohon kunci besar dengan pohon kecil kunci) keduanya dapat dilakukan dalam waktu O (log n), tetapi jika ini didukung di pustaka kontainer standar, tampaknya hal tersebut sangat tersembunyi.Namun, "menambah" struktur data adalah umum. Contoh sederhana adalah menambahkan informasi ukuran-subtree ke node di hampir semua struktur data pohon untuk mendukung subskripsi O (log n). Contoh yang lebih canggih termasuk pohon interval.
Setelah Anda mendapatkan gagasan untuk menambah struktur data, ada banyak variasi yang dapat berguna untuk aplikasi tertentu - dan sangat sedikit yang tersedia pra-paket sebagai perpustakaan. Struktur data pustaka standar yang ada (misalnya, misalnya
std::map
) tidak dapat ditambah singkat dengan menyalin kode sumber dan memodifikasinya secara langsung - Anda tidak dapat menambahnya menggunakan parameter templat.Tentu saja untuk mengembangkan struktur data yang ditambah, Anda perlu memahami struktur data yang tidak ditambah.
Pohon AVL bisa lebih cepat daripada pohon merah-hitam jika Anda melakukan lebih banyak pencarian daripada menyisipkan / menghapus (dan asalkan Anda tidak memerlukan operasi split / join itu), jadi tergantung pada aplikasinya, mereka mungkin merupakan basis yang sangat baik untuk menambah
sumber
Tidak
Ini benar-benar tidak berguna di dunia nyata ...
Kecuali untuk membuatmu berpikir .
Dunia nyata memiliki masalah yang jauh lebih sulit , banyak di antaranya belum memiliki solusi terkenal.
sumber