Macneils puanlarına ek olarak ...
Kırmızı-siyah ağaçlar daha doğrudan faydalı olabilir, çünkü C ++ gibi standart kütüphane uygulamalarında std::map
(en azından AFAIK) yaygın olarak desteklenmeyen faydalı verimli işlemler vardır . Kırmızı-siyah ağaçlar, "bölünmüş" (bir ağacı belirtilen bir anahtardan daha az anahtar içeren ve bir anahtar daha büyük anahtar içeren) ikiye bölebilir ve "birleştir" (tersine, büyük anahtarlardan oluşan bir ağacı küçük bir ağaçla birleştirerek) anahtarlar) her ikisi de O (log n) zamanında yapılabilir, ancak bunlar standart kapsayıcı kitaplıklarında destekleniyorsa, iyi gizlenmiş bir şey gibi görünüyor.
Ancak, veri yapılarının "artırılması" yaygındır. Basit bir örnek, O (günlük n) aboneliğini desteklemek için hemen hemen her ağaç veri yapısındaki düğümlere alt ağaç boyutu bilgisi eklemektir. Daha sofistike örnekler aralık ağaçlarını içerir.
Veri yapılarını genişletme fikrini edindikten sonra, belirli uygulamalar için yararlı olabilecek birçok varyasyon vardır - ve çok azı önceden kütüphane olarak paketlenmiştir. Varolan standart kütüphane veri yapıları (örneğin, std::map
) kaynak kodu kopyalamaktan ve doğrudan değiştirmekten yoksun olamaz - şablon parametrelerini kullanarak bunları arttıramazsınız.
Elbette, artırılmış bir veri yapısı geliştirmek için, temelde artırılmamış veri yapısını anlamanız gerekir.
Ekler / silmelerden çok daha fazla arama yaparsanız (ve bu bölme / birleştirme işlemlerine ihtiyacınız yoksa) AVL ağaçları kırmızı-siyah ağaçlardan daha hızlı olabilir, bu nedenle uygulamaya bağlı olarak, bunlar için çok iyi bir temel olabilir. artırmada.