【发布时间】:2015-06-11 01:46:54
【问题描述】:
我正在从一些数据构建一个 btree。一旦我构造了 btree(即插入所有元素),我就不再插入或删除元素。但是,从某种意义上说,如果我可以非常频繁地为每个节点拥有 n 个最大元素,那么生成的 btree 并不是最优的,那么我的节点包含的元素少于 n 个(n越大,问题就越严重> 是)。这是我的 btree 中的一个部分,包含数百个元素并且 n 等于 5。该部分包含根节点和几个最底部的节点
如您所见,不少节点的元素数少于 5 个。我的问题是: 有没有办法在构建后“压缩”btree,以便所有(可能除了一些最底部的节点)都包含准确的 n 元素。将作为键存储在节点中的内容将是 32 位值,但我不能保证它们会以任何特定顺序插入。
【问题讨论】:
-
我没有时间阅读这篇论文,但是您能否改变构建 btree 的方式以使其在构建期间变得紧凑? sciencedirect.com/science/article/pii/0020019083900844
-
这表明你可以在线性时间内从头开始构建一个紧凑的 btree(在顶部的摘要中):cpsc.yale.edu/sites/default/files/files/tr167.pdf
-
那些论文谈论“按顺序”插入键,我不能保证。我想我可以在第一个之后重建我的 btree(因为我会知道顺序)但这会占用很多内存......如果没有其他方法,我会这样做......
-
您的数据来自哪里?
-
问题是我有不止一个 btree 同时获取密钥。密钥在 btree 之间共享,但我只能保证第一个 btree 的顺序。其余的都不是,因为说碰巧插入到我的第一个 btree 中的第一个键(将是 0)可能是我的第二个 btree 中的第 25 个键(它仍然是零,但我已经有 25 个其他值了那里...)