AVL dan Pohon hitam merah keduanya menyeimbangkan diri sendiri kecuali warna merah dan hitam di node. Apa alasan utama memilih pohon Merah hitam daripada pohon AVL? Apa Aplikasi Pohon Hitam Merah?
108
AVL dan Pohon hitam merah keduanya menyeimbangkan diri sendiri kecuali warna merah dan hitam di node. Apa alasan utama memilih pohon Merah hitam daripada pohon AVL? Apa Aplikasi Pohon Hitam Merah?
Jawaban:
Baik pohon merah-hitam maupun pohon AVL adalah pohon pencarian biner seimbang yang paling umum digunakan dan mendukung penyisipan, penghapusan, dan pencarian dengan jaminan
O(logN) time
. Namun, ada beberapa poin perbandingan antara keduanya:O(N)
ruang ekstra. Namun, jika kita tahu bahwa kunci yang akan disisipkan di pohon akan selalu lebih besar dari nol, kita dapat menggunakan bit tanda kunci untuk menyimpan informasi warna pohon merah-hitam. Jadi, dalam kasus seperti itu, pohon merah-hitam tidak membutuhkan ruang ekstra.Pohon merah-hitam adalah tujuan yang lebih umum. Mereka melakukannya dengan relatif baik saat menambah, menghapus, dan mencari tetapi pohon AVL memiliki pencarian lebih cepat dengan biaya tambah / hapus yang lebih lambat. Pohon merah-hitam digunakan sebagai berikut:
java.util.TreeMap
,java.util.TreeSet
sumber
In general, the rotations for an AVL tree are harder to implement and debug than that for a Red-Black tree.
tidak benar.std:: map
dan teman-teman menggunakan struktur tertentu. Itu tersisa untuk implementasi, meskipun libstdc ++ dan Dinkumware setidaknya menggunakan pohon merah-hitam, dan sepertinya Anda benar dalam praktiknya.Coba baca artikel ini
Ini menawarkan beberapa wawasan bagus tentang perbedaan, persamaan, kinerja, dll.
Berikut kutipan dari artikel tersebut:
Sejauh pemahaman saya sendiri, pohon AVL dan pohon RB tidak terlalu jauh dalam hal kinerja. Pohon RB hanyalah varian dari pohon B dan penyeimbangan diimplementasikan secara berbeda dari pohon AVL.
sumber
Pemahaman kami tentang perbedaan kinerja telah meningkat selama bertahun-tahun dan sekarang alasan utama untuk menggunakan pohon merah-hitam di atas AVL adalah karena tidak memiliki akses ke implementasi AVL yang baik karena sedikit kurang umum mungkin karena tidak tercakup dalam CLRS.
Kedua pohon sekarang dianggap sebagai pohon dengan peringkat seimbang tetapi pohon merah-hitam secara konsisten lebih lambat sekitar 20% dalam pengujian dunia nyata . Atau bahkan 30-40% lebih lambat saat data berurutan dimasukkan .
Jadi orang yang telah mempelajari pohon merah-hitam tetapi bukan pohon AVL cenderung memilih pohon merah-hitam. Kegunaan utama pohon merah-hitam dirinci di entri Wikipedia untuk mereka .
sumber
Jawaban lain di sini merangkum pro & kontra pohon RB dan AVL dengan baik, tetapi menurut saya perbedaan ini sangat menarik:
Sumber: Mehlhorn & Sanders (2008) (bagian 7.4)
Jadi, sementara pohon RB dan AVL menjamin waktu terburuk O (log (N)) untuk pencarian, penyisipan dan penghapusan, memulihkan properti AVL / RB setelah menyisipkan atau menghapus node dapat dilakukan dalam O (1) waktu diamortisasi untuk pohon merah-hitam.
sumber
Pemrogram umumnya tidak suka mengalokasikan memori secara dinamis. Masalah dengan pohon avl adalah bahwa untuk elemen "n" Anda membutuhkan setidaknya log2 (log2 (n)) ... (tinggi-> log2 (n)) bit untuk menyimpan tinggi pohon! Jadi, ketika Anda menangani data yang sangat besar, Anda tidak dapat memastikan berapa banyak bit yang dialokasikan untuk menyimpan ketinggian di setiap node.
Misalnya jika Anda menggunakan 4 byte int (32 bit) untuk menyimpan tinggi. Tinggi maksimum dapat menjadi: 2 ^ 32 dan karenanya jumlah maksimum elemen yang dapat Anda simpan di pohon adalah 2 ^ (2 ^ 32) - (sepertinya sangat besar tetapi dalam usia data ini, saya kira tidak ada yang terlalu besar). Dan karenanya, jika Anda melakukan pemotretan berlebihan, batas ini Anda harus mengalokasikan lebih banyak ruang secara dinamis untuk menyimpan ketinggian.
Ini adalah jawaban yang disarankan oleh seorang profesor di universitas saya yang tampaknya masuk akal bagi saya! Semoga saya masuk akal.
Pengeditan: Pohon AVL lebih seimbang dibandingkan dengan Pohon Merah Hitam, tetapi mereka dapat menyebabkan lebih banyak rotasi selama penyisipan dan penghapusan. Jadi jika aplikasi Anda melibatkan banyak penyisipan dan penghapusan yang sering, maka pohon Merah Hitam harus lebih disukai. Dan jika penyisipan dan penghapusan lebih jarang dan pencarian lebih sering beroperasi, maka pohon AVL harus lebih disukai daripada Pohon Merah Hitam. --Sumber GEEKSFORGEEKS.ORG
sumber
you need need atleast log2(log2(n))...(height->log2(n)) bits to store the height of [an AVL] tree
Saya tidak memerlukan ketinggian node apa pun di pohon AVL untuk menerapkannya. Anda membutuhkan sedikit informasi tambahan untuk setiap node ( AKU YANG TERBESAR (saudara dengan sub-pohon tertinggi))); akan lebih nyaman serta konvensional untuk memiliki dua bit ekstra (anak lebih tinggi untuk kiri & kanan), seperti yang disajikan oleh AV & L.Penyeimbangan ulang pohon AVL harus memenuhi properti di bawah ini. (Referensi Wiki - Pohon AVL )
Jadi ini menyiratkan bahwa tinggi keseluruhan pohon AVL tidak dapat berubah, yaitu pencarian akan menjadi lebih baik dengan Pohon AVL. Dan karena operasi tambahan (rotasi) harus dilakukan agar ketinggian tidak berubah, operasi modifikasi pohon dapat menjadi sedikit mahal.
sumber