【问题标题】:Is the key count per node in a btree the same on average for large and small btrees?对于大型和小型 btree,btree 中每个节点的密钥计数是否平均相同?
【发布时间】:2013-10-09 13:02:27
【问题描述】:

我的数学需要一点帮助,这几天让我的大脑很痛苦。

我为许多 btree 的不同大小的节点使用一个池。如果大树的每个节点的平均键数与小树的 btree 的平均数相同,则效果很好。但是,如果分布不同,我可能会遇到一种情况,即池中的一种大小的节点有太多空闲而其他节点不足。

所有更改都不是拆分节点,而是创建一个具有新键数的新节点,并用它覆盖树中的旧节点。当它通过每个节点的最大键数时,它将平均分割节点。

我直觉地认为节点大小的分布对于大树和小树(除了非常小的树)是相同的。但我知道不要相信我的直觉。这是一个合理的假设,还是btree中给定键计数的节点百分比会随着树的大小而变化?

【问题讨论】:

    标签: c algorithm math data-structures b-tree


    【解决方案1】:

    btree 的经典实现是在树上使用单个基数(每个节点的最大键数),并在节点填充时拆分,并在节点填充减少到所选阈值以下时加入。 btrees 比二叉树 (AVL) 树的一个好处是平衡树被最小化。基数的选择、键的添加和删除的混合以及添加到 btree 中的键的分布都会影响填充率。 使用不同大小的节点会减少节点上的拆分次数,尤其是在向树中添加有序数据时。但是重新平衡树可以解决有序数据的问题。

    【讨论】:

    • 我从未听说过重新平衡 btree(我认为重点是您不必重新平衡它,但我承认我不是专家。)即使在添加顺序的情况下树的整数一次一个,它会保持平衡(例如,对于基数 = 4,1-4 进入第一个节点,添加 5 会导致分裂,使平衡树以 3 为根:[1,2,3 ][4,5]。我可以看到删除如何使树不平衡。它可以通过具有最小节点大小并在它们缩小超过该节点时合并节点来解决(即与拆分相反。)
    • 再读一点,这似乎是最坏的情况(你最终所有节点都半满了。)你必须在删除时保持最小节点填充率以保持树平衡.所以汇集不同大小的节点可能很糟糕。解决它的一种方法是在不完全匹配的情况下允许使用比必要更大的节点。
    猜你喜欢
    • 2015-06-11
    • 2011-12-08
    • 1970-01-01
    • 2011-07-02
    • 2014-04-17
    • 2014-03-06
    • 2017-10-28
    • 2011-05-29
    • 2010-12-13
    相关资源
    最近更新 更多