2011-12-14 22 views
5

Örnek olarak, her düğümün etiket/değer çiftlerini içeren aşağıdaki b-ağaç modelini kullanıyorum. Ağaç, kökü en yüksek olarak, en aşağıya kadar yapraklara (ancak bu uygulama özeldir) göre önceliği (veya önceliğini) gösterir. Yeni bir ağaç bölümünü ebeveynin içine birleştirmek istiyorum. Yeni bölüm, potansiyel olarak ortak etiket/değer çiftlerini, bir düğümün hemen üstündeki düğüme kadar tümüyle (tamamen yeni bir ağaç bölümü birleştirilemez) birleştirmek istiyorum. Örneğin.C++ b-ağacı birleştirme

Mevcut ağaç (etiket, değer) çiftleri belirtilen:

  A,0 
,----------,-------------, 
B,1  B,2   B,3 
     ,-------------, 
    C,1   C,2 

Yeni ağaç birleştirmek için:

Final birleştirilmiş ağaç
   A,0 
       | 
       B,3 
      ,-----------, 
     C,1   C,2 

: Soru

  A,0 
,----------,-----------------, 
B,1  B,2    B,3 
     ,-------------, ,-----------, 
    C,1   C,2 C,1   C,2 

: zarif var Bu b-tree birleştirme C++ çözüm kullanarak std kapları, ya da destek gibi bir kütüphane ile mümkün mü? Teşekkürler.

+0

Bunu yapmanın en güvenli yolu, birinci b-ağacındaki tüm öğelerin tümünün manuel olarak yerleştirilmesidir. Alternatif olarak, www.ccs.neu.edu/home/bradrui/index_files/parareorg.pdf adresine bakınız. – izogfif

+0

(Geliştirme aşamasında) bir boost.btree var, yardım edeceğinden emin değiliz, ama işte burada: https://github.com/Beman/Boost-Btree –

+0

Ayrıca bu uygulamayı kontrol etmek isteyebilirsiniz. ağaç: http://touc.org/btree.html – nevero

cevap

1

Kasper Peeter'in tree.hh kütüphanesini kullanabilirsiniz, GPLv2 ve GPLv3.

N-ary ağacı için STL benzeri bir uygulama.

documentation, iki ağaç birleştirebilecek birleştirme adlı bir değişken algoritmanın olduğunu söylüyor. Ayrıca nasıl başarıldığını da açıklıyor.