Yayvan ağaç döndürme algoritması neden hem ana hem de büyükbaba düğümünü hesaba katar?


25

Yayılma ağacı veri yapısındaki dönüşün neden yalnızca derecelendirme düğümünün ebeveyni değil, aynı zamanda büyükbaba veya büyükbaba (zig-zag ve zig-zig operasyonu) dikkate aldığını da anlamıyorum. Aşağıdaki neden işe yaramaz:

Örneğin, ağaca yeni bir düğüm eklediğimizde, sola mı sağa mı alt ağaçlara mı girdiğimizi kontrol ederiz. Sola eklersek, RIGHT sonucunu döndürürüz ve sağ alt ağaç için tersi yaparız. Özyinelemiyle böyle sth olurdu

Tree insert(Tree root, Key k){
    if(k < root.key){
        root.setLeft(insert(root.getLeft(), key);
        return rotateRight(root);
    }
    //vice versa for right subtree
}

Bu "yayılma" prosedüründen kaçınmalı, sence de öyle değil mi?

Yanıtlar:


30

Daha basit dengeleme algoritması gerektirebilir en kötü durumda dönme başına zaman amorti. Ağacın tamamen dengesiz bir doğru çocuk yolu olduğunu düşünün; Hiçbir düğümde sol çocuk yoktur. Bu ağaçtaki tek yaprak, maksimum tuşa sahip ağaç. Kökeye kadar bu adımı döndürürseniz, n - 1 döndürmeleri kullandınız ve ortaya çıkan ağaç hala tamamen dengesiz.Ω(n)n-1

sadece dönen için kötü bir örnek

n2/2Ω(n)Ω(n)

Kötü örnek devam etti

Bu kötü örnek, Sleator ve Tarjan'ın orijinal yayılmalı ağaç kağıdında görünüyor.

xxx

Kötü örnek yaymak

Bu daha karmaşık algoritmanın avantajı, yalnızca erişilen düğümü köke getirmesi değil, aynı zamanda erişilen düğümün her atağını kabaca kökünden yarıya kadar hareket ettirmesi değil, aynı zamanda herhangi bir düğümü asla sabit bir seviye sayısından daha fazla hareket ettirmemesidir. kök.

O(günlükn)Ω(n)

Daha kısaca: Yayma, düğümleri yavaşça yukarı ve aşağı doğru hareket ettirir.


Rotasyon algoritmalarının tamamen aynı olduğunu düşünüyorum, benimki sadece daha kısa ve daha anlaşılabilir. Büyükanne ve büyükbabalara bakmak yerine ebeveyni sadece bir döner adımda görürüm. Kesinlikle aynı sonucu vermiyor mu?
Bober02

Sanırım biri yukarıdan aşağıya, diğeri yukarıdan aşağıya doğru iki SPLAYING algosundan bahsediyor olabilirsiniz, bu doğru mu?
Algo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.