AVL Trees dan dunia NYATA


14

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!


7
Sangat membantu dalam wawancara, jika itu dianggap sebagai dunia nyata.
Kevin

Ini adalah argumen yang sama yang dilakukan beberapa orang tentang belajar trigonometri di sekolah "Sheesh! Kapan saya akan menggunakannya dalam kehidupan nyata?", Dan jawabannya adalah "Anda berpikir bagaimana menganalisis dan menyelesaikan seluruh kelas masalah" . Itu dan suatu hari Anda ingin menebang pohon dan pasangan Anda bertanya, "Apakah Anda yakin itu tidak akan mengenai rumah?" Trig ke penyelamatan!
Binary Worrier

Jawaban:


13

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.


Artikel yang menarik, tapi saya tidak melihat bagaimana pohon AVL akan membantu friendster.
Eratosthenes

Saya ingin melihat contoh, seperti B + -Trees digunakan untuk pengindeksan basis data.
Luca Fülbier

5

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


1
+1 untuk menambah struktur data, meskipun hal ini cukup jarang dilakukan. Sebagian besar programmer tidak harus berjuang untuk kinerja (kalau tidak kita semua akan menggunakan C ++ / C / Fortran / Majelis).
Matthieu M.

@ Matthieu - Saya percaya itu biasa, tetapi hanya di beberapa jenis lingkungan pengembangan. Itu bukan kontradiksi, jujur, karena ... errm, well ...
Steve314

Saya sangat setuju! : D
Matthieu M.

5

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.