更改M树中的最大节点容量会影响结果

问题描述 投票:0回答:1

为该问题发布整个树的代码将毫无意义(太长且混乱),而且我已经尝试了一段时间来解决此问题,所以我并不是真的想要一些具体的解决方案,而是为什么会发生这种情况的想法。因此:

  • 我有一个1.000.000坐标的数据集,并将其插入树中。在MaxCapacity=10之后,我进行了范围搜索,然后得到了正确的结果(对于任何大于等于10的数字)。如果我切换到MaxCapacity=4,则结果是错误的。但是,如果我将数据集缩小到大约20.000坐标,则结果对于MaxCapacity=4还是正确的。

因此,对于我来说,这似乎是不正确的分割算法,它仅显示了小的MaxCapacity和大型数据集,其中我们有大量分割。但是该算法几乎检查了所有内容,因此我在那里真的找不到错误。还有其他想法吗? Tree用SCALA语言编写,升级策略提升了彼此之间最远的两个点,对于拆分策略,我们遍历溢出节点的条目,然后将每个条目放入更接近的升级点组中。

scala search tree
1个回答
0
投票

不知道是否有人对此感兴趣,但是我找到了造成这种情况的原因。我以为问题是分裂的,但我错了。问题是当我在“插入递归”算法中选择要放置到下一个节点的下一个节点时。因此,我通过计算每个节点的中心与入口点之间的距离来选择此节点。选择具有最小所述距离的节点。如果该条目恰好位于多个节点的半径之内,则此方法很好。在这种情况下,minDistance可以按预期工作,但是如果条目不位于任何节点的半径内?在这种情况下,我们还必须扩大半径以包含条目。因此,如果要在其子节点中包含条目,则需要找到其半径会减小的节点。对于节点,其与入口点的距离可能最小,但所需的扩展可能会灾难性地很大。我没有考虑过这种情况,因此将条目放置在错误的节点上,从而导致巨大的扩展和重叠。当我实施此案例时,问题已解决!

© www.soinside.com 2019 - 2024. All rights reserved.