【问题标题】:C++ b-tree mergeC++ b 树合并
【发布时间】:2012-01-20 17:32:08
【问题描述】:

例如,我有以下 b 树模型,每个节点都包含标签/值对。树表示优先级(或优先级),根最高,叶子最低(但这是特定于应用程序的)。我想将一个新的树部分合并到父节点中,新部分包含潜在的公共标签/值对,一直到叶节点上方的节点(完全重复的新树部分不会被合并)。例如

指示现有的树(标签,值)对:

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

要合并的新树:

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

最终合并树:

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

问题:是否有一个优雅的 C++ 解决方案可以使用 std 容器来处理这种 b-tree 合并,或者可以使用 boost 之类的库?谢谢。

【问题讨论】:

  • 最安全的方法是手动将第二个 b-tree 的所有项插入第一个 b-tree 中。或者,看看 www.ccs.neu.edu/home/bradrui/index_files/parareorg.pdf。
  • 有一个(正在开发中的)boost.btree,不确定它是否有帮助,但这里是:github.com/Beman/Boost-Btree
  • 您可能还想检查 b-tree 的实现:touc.org/btree.html
  • 您可以使用 boost 图形库手动完成

标签: c++ boost b-tree


【解决方案1】:

您可以使用 Kasper Peeter 的 tree.hh 库,它是 GPLv2 和 GPLv3。

这是一个类似于 STL 的 n 叉树实现。

documentation 表示有一个名为 merge 的可变算法可以合并两棵树。它还解释了它是如何实现的。

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 2011-09-23
    • 2014-09-20
    • 1970-01-01
    • 2011-11-26
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多