Rumah > Artikel > pembangunan bahagian belakang > Apakah pokok AA dalam C/C++?
Dalam sains komputer, pokok AA ditakrifkan sebagai pelaksanaan pokok yang seimbang untuk penyimpanan dan pengambilan data yang dipesan dengan cekap. Pokok AA dianggap sebagai varian pokok merah-hitam, pokok carian binari yang menyokong penambahan dan pemadaman entri yang cekap. Tidak seperti pokok merah-hitam, nod merah pada pokok AA hanya boleh ditambah sebagai nod anak kanan dan tidak boleh ditambah sebagai nod anak kiri. Hasil daripada operasi ini adalah untuk mensimulasikan pokok 2-3 dan bukannya pokok 2-3-4, dengan itu memudahkan operasi penyelenggaraan. Algoritma penyelenggaraan untuk pokok merah-hitam perlu menganggap atau mempertimbangkan tujuh bentuk berbeza untuk mengimbangi pokok dengan betul.
Bertentangan dengan pokok merah-hitam, pokok AA atau hanya perlu assume pertimbangkan dua bentuk kerana hanya pautan yang betul boleh menjadi merah.
putaran seimbang#🎜#🎜韎##🎜🎜🎜🎜 nod memerlukan satu bit metadata mengimbangi (warna), manakala pepohon AA memerlukan O(log(log(N))) bit metadata bagi setiap nod, dalam bentuk "tahap" integer. Invarian berikut digunakan untuk pokok AA:
Dalam pokok AA, hanya dua operasi berbeza diperlukan untuk memulihkan keseimbangan: "skew" dan "split". Skew dianggap sebagai putaran kanan, menggantikan subpokok yang terdiri daripada pautan mendatar kiri dengan pautan mendatar kanan. Dalam kes Split, ia membelok ke kiri dan meningkatkan tahap, menggantikan subpokok yang mengandungi dua pautan mendatar kanan yang kurang berturut-turut dengan dua atau lebih pautan mendatar kanan berturut-turut. Kedua-dua operasi "skew" dan "split" diterangkan di bawah.
Takrifan skew fungsi adalah seperti berikut:
input: An AA tree that needs to be rebalanced is represented by a node, t. output: The rebalanced AA tree is represented by another node. if nil(t) then return nil else if nil(left(t)) then return t else if level(left(t)) == level(t) then Exchange the pointers of horizontal left links. l = left(t) left(t) := right(l) right(l) := t return l else return t end if end function#🎜🎜🎜#
#🎜🎜 #🎜🎜 Terjemahan bagi #function split ialah
ialah: #🎜🎜🎜##🎜 split is#🎜🎜 #input: An AA tree that needs to be rebalanced is represented by a node, t. output: The rebalanced AA tree is represented by another node. if nil(t) then return nil else if nil(right(t)) or nil(right(right(t))) then return t else if level(t) == level(right(right(t))) then We have two horizontal right links. The middle node is taken, elevate it, and return it. r = right(t) right(t) := left(r) left(r) := t level(r) := level(r) + 1 return r else return t end if end functionSplit-
Atas ialah kandungan terperinci Apakah pokok AA dalam C/C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!