Mari kita asumsikan definisi pohon merah-hitam berikut:
- Ini adalah pohon pencarian biner.
- Setiap node berwarna merah atau hitam. Akar hitam.
- Dua node yang dihubungkan oleh sebuah edge tidak bisa berwarna merah pada saat bersamaan.
- Ini seharusnya definisi yang bagus untuk daun NIL, seperti pada wiki. Daun NIL berwarna hitam.
- Jalur dari root ke sembarang daun NIL berisi jumlah simpul hitam yang sama.
Pertanyaan
Misalkan Anda telah menerapkan insert
dan delete
operasi untuk pohon merah-hitam. Sekarang, jika Anda diberi pohon merah-hitam yang valid, apakah selalu ada urutan insert
dan delete
operasi yang membangunnya?
Motivasi
Pertanyaan ini dimotivasi oleh pertanyaan ini dan oleh diskusi dari pertanyaan ini .
Secara pribadi, saya percaya bahwa jika Anda membayangkan pohon merah-hitam yang valid yang hanya terdiri dari simpul hitam (yang menyiratkan bahwa Anda membayangkan pohon yang seimbang sempurna), ada urutan insert
dan delete
operasi yang membangunnya. Namun,
- Saya tidak tahu bagaimana membuktikannya secara akurat
- Saya juga tertarik pada kasus yang lebih umum
insert
dandelete
untuk membangun pohon merah-hitam yang valid yang hanya terdiri dari simpul hitam . Menggunakan penyisipan / penghapusan untuk membuat pohon tinggi h . Pertama, kita dapat membuat pohon merah-hitam yang seimbang sempurna dengan cara pertama-lebar menggunakan 2 h + 1 - 1 penyisipan, kemudian menggunakan h ∗ 2 jam - 1insert
dandelete
operasi tertentu?insert
dandelete
; mungkin ada beberapa cara untuk melakukan operasi ini. b) Karena pohon RB pada dasarnya adalah pohon B dari orde 4, orang dapat mencari inspirasi di sana. Detail mungkin terbukti sulit karena pemetaan dari RB ke B (dan / atau mundur) tidak unik.Jawaban:
Operasi menyisipkan dan menghapus di pohon merah-hitam mencakup penyeimbangan yang diperlukan untuk mempertahankan properti merah-hitam.
Masalah dengan pohon merah-hitam bersandar non (kiri atau kanan) adalah bahwa ada beberapa cara untuk mengembalikan merah-hitam setelah penghapusan atau penyisipan dasar.
Bukan sisipan atau penghapusan yang mentransformasikan pohon, tetapi penyeimbangan kembali dan rotasi yang terjadi setelahnya untuk menjaga / mengembalikan merah kehitaman pohon.
Deskripsi dasar pohon merah-hitam tidak menentukan rute mana yang mungkin diambil.
Mungkin tidak mungkin untuk mencari tahu bagaimana tepatnya merekonstruksi pohon hitam merah diberikan, karena rebalancing tidak perlu deterministik.
Ini telah 'diselesaikan' dengan pohon-pohon merah hitam yang condong ke kiri.
Hanya ada satu cara penyeimbangan dilakukan. Jadi setiap pohon merah hitam yang bersandar dapat direkonstruksi menggunakan sisipan dan penghapusan, karena penyeimbangan / rotasi dilakukan dengan cara deterministik tertentu.
Ini tidak berarti bahwa pohon RB yang condong ke kiri lebih baik atau lebih efisien, apa yang mereka dapatkan di satu sisi dengan menggunakan aturan balancing deterministik, mereka kalah di sisi lain oleh kode balancing yang lebih kompleks.
Saya pikir algoritma penyeimbang lengkap seperti Day-Stout-Warren akan lebih efisien.
sumber
insert
dandelete
dari buku CLRS Anda dapat membangun pohon RB yang valid yang hanya terdiri dari node hitam . Caranya adalah dengan memasukkan lebih banyak node dari yang dibutuhkan dan kemudian menghapus yang berlebihan. Algoritma akan menghilangkan node merah.