2011-12-14 1 views
5

Ad esempio, ho il seguente modello b-tree con ogni nodo contenente coppie tag/valore. L'albero indica la precedenza (o priorità), con la radice più alta, più bassa delle foglie (ma questa è un'applicazione specifica). Voglio unire una nuova sezione ad albero nel genitore, con la nuova sezione contenente coppie di valori/tag potenzialmente comuni fino al nodo appena sopra un nodo foglia (una nuova sezione ad albero completamente duplicata non verrebbe semplicemente unificata). Per esempio.C++ b-tree merge

esistenti albero (tag, valore) coppie indicate:

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

nuovo albero per unire:

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

finale albero di fusione:

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

Domanda: c'è un elegante La soluzione C++ a questa fusione di alberi b usando i contenitori std, o possibile con una libreria come boost? Grazie.

+0

Il modo più sicuro per farlo è tramite l'inserimento manuale di tutti gli elementi del secondo b-tree all'interno del primo. In alternativa, dare un'occhiata a www.ccs.neu.edu/home/bradrui/index_files/parareorg.pdf. – izogfif

+0

C'è un (in fase di sviluppo) boost.btree, non sono sicuro se sarà d'aiuto, ma eccolo qui: https://github.com/Beman/Boost-Btree –

+0

Si potrebbe anche voler controllare questa implementazione di un b- tree: http://touc.org/btree.html – nevero

risposta

1

È possibile utilizzare la libreria tree.hh di Kasper Peeter, è GPLv2 e GPLv3.

È un'implementazione simile a un AWL per un albero n-ario.

Il documentation dice che esiste un algoritmo mutabile, denominato unione, che può unire due alberi. Spiega anche come è stato realizzato.