นอกเหนือจากคะแนน Macneils ...
ต้นไม้สีแดงดำอาจมีประโยชน์มากกว่าโดยตรงเนื่องจากมีการดำเนินการที่มีประสิทธิภาพและไม่ได้รับการสนับสนุนอย่างแพร่หลายในการใช้งานไลบรารีมาตรฐานเช่น C ++ std::map
(อย่างน้อย AFAIK) ต้นไม้สีแดงดำสามารถรองรับ "แยก" (ตัดต้นไม้ออกเป็นสองส่วนหนึ่งมีคีย์น้อยกว่าคีย์ที่ระบุและหนึ่งมีคีย์มากกว่า) และ "เข้าร่วม" (ย้อนกลับรวมต้นไม้ของปุ่มขนาดใหญ่ด้วยต้นไม้ขนาดเล็ก คีย์) สามารถทำได้ในเวลา O (log n) แต่ถ้าสิ่งเหล่านี้ได้รับการสนับสนุนในไลบรารีคอนเทนเนอร์มาตรฐานดูเหมือนว่าจะเป็นสิ่งที่ซ่อนอยู่
อย่างไรก็ตามโครงสร้างข้อมูล "augmenting" เป็นเรื่องธรรมดา ตัวอย่างง่ายๆคือการเพิ่มข้อมูลขนาดของทรีย่อยให้กับโหนดในเกือบทุกโครงสร้างข้อมูลทรีเพื่อรองรับการห้อย O (log n) ตัวอย่างที่ซับซ้อนยิ่งขึ้น ได้แก่ ต้นไม้ช่วงเวลา
เมื่อคุณได้รับแนวคิดในการเพิ่มโครงสร้างข้อมูลมีหลากหลายรูปแบบที่สามารถเป็นประโยชน์สำหรับแอปพลิเคชันเฉพาะ - และมีจำนวนน้อยที่มีการจัดทำแพ็กเกจไว้ล่วงหน้าเป็นไลบรารี โครงสร้างข้อมูลไลบรารีมาตรฐานที่มีอยู่ (เช่นstd::map
) ไม่สามารถเติมให้สั้นลงในการคัดลอกซอร์สโค้ดและแก้ไขมันโดยตรง - คุณไม่สามารถเพิ่มพวกเขาโดยใช้พารามิเตอร์เทมเพลต
แน่นอนว่าการพัฒนาโครงสร้างข้อมูลแบบเพิ่มเติมคุณต้องเข้าใจโครงสร้างข้อมูลแบบไม่เติมข้อมูล
ต้นไม้ AVL นั้นเร็วกว่าต้นไม้สีแดงดำถ้าคุณทำการค้นหามากกว่าแทรก / ลบ (และหากคุณไม่ต้องการการแบ่ง / เข้าร่วม) ดังนั้นขึ้นอยู่กับแอปพลิเคชันซึ่งอาจเป็นฐานที่ดีสำหรับ augmenting