เหตุใดอัลกอริทึมการหมุนแผนภูมิต้นไม้จึงคำนึงถึงทั้งโหนดหลักและโหนดปู่ย่าตายาย


25

ฉันไม่เข้าใจว่าทำไมการหมุนในโครงสร้างข้อมูลแผนภูมิต้นไม้ไม่ได้คำนึงถึงเฉพาะพาเรนต์ของโหนดการจัดอันดับ แต่ยังรวมถึงปู่ย่าตายาย (การดำเนินการ zig-zag และ zig-zig) ทำไมสิ่งต่อไปนี้ถึงไม่ทำงาน:

ในขณะที่เราแทรกเช่นโหนดใหม่ไปยังทรีเราตรวจสอบว่าเราแทรกลงในทรีย่อยทางซ้ายหรือขวา หากเราแทรกเข้าไปทางซ้ายเราจะหมุน RIGHT ผลลัพธ์และในทางกลับกันสำหรับแผนผังย่อยที่เหมาะสม มันจะเป็นแบบนี้ซ้ำ ๆ ซ้ำ ๆ

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

ที่ควรหลีกเลี่ยงกระบวนการ "กาง" ทั้งหมดคุณคิดหรือไม่?

คำตอบ:


30

อัลกอริธึมการทรงตัวที่ง่ายกว่านั้นอาจต้องใช้เวลาต่อการหมุนในกรณีที่แย่ที่สุด สมมติว่าต้นไม้เป็นเพียงเส้นทางที่ไม่สมดุลของเด็ก ๆ ไม่มีโหนดที่มีลูกที่เหลือ ใบไม้เดียวในต้นไม้นี้คือต้นไม้ที่มีคีย์สูงสุด หากคุณหมุนทีละขั้นไปจนถึงรูทคุณจะใช้การหมุนแบบn - 1และต้นไม้ที่ได้จะยังไม่สมดุลกันโดยสิ้นเชิงΩ(n)n-1

ตัวอย่างที่ไม่ดีสำหรับการหมุน

n2/2Ω(n)Ω(n)

ตัวอย่างที่ไม่ดีอย่างต่อเนื่อง

ตัวอย่างที่ไม่ดีนี้จะปรากฏในกระดาษทรีสเลย์ดั้งเดิมของ Sleator และ Tarjan

xxx

พ่นตัวอย่างที่ไม่ดี

ข้อดีของอัลกอริธึมที่ซับซ้อนกว่านี้คือมันไม่เพียง แต่นำโหนดที่เข้าถึงได้ไปยังรูท แต่ยังย้ายบรรพบุรุษของโหนดที่เข้าถึงได้เกือบครึ่งทางไปยังรูททั้งหมด แต่ไม่ย้ายโหนดใด ๆ มากกว่าระดับคงที่ ราก.

Sleator และ Tarjan พิสูจน์ว่าเวลาที่ตัดจำหน่ายต่อสเปรย์เป็นเพียงเท่านั้น O(เข้าสู่ระบบn)Ω(n)

สั้น ๆ เพิ่มเติม: การเล่นจะย้ายโหนดขึ้นและลงอย่างช้าๆ


ฉันคิดว่าอัลกอริทึมการหมุนเหมือนกันทั้งหมดของฉันนั้นสั้นและเข้าใจง่ายกว่ามาก แทนที่จะมองดูปู่ย่าตายายฉันพิจารณาเฉพาะผู้ปกครองในขั้นตอนเดียวที่หมุนได้ มันไม่ได้ให้ผลลัพธ์ที่เหมือนกันหรือไม่
Bober02

ฉันเดาว่าคุณอาจหมายถึง algos ที่มีการสไลเดอร์สองอันคืออันหนึ่งจากบนลงล่างอีกอันหนึ่งขึ้นมาไม่ใช่ของฉันถูกต้องหรือไม่ ฉันอ้างถึงสัญลักษณ์ของฉันจากล่างขึ้นบน
Bober02
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.