了解R-Tree的时间复杂性?

时间:2018-02-15 20:39:25

标签: database indexing r-tree

在维基百科上进行的快速搜索显示,R-Tree在搜索时的最差情况是未定义的,平均情况为O(logMn)。

我认为最糟糕的情况就是这种方式,因为我们无法知道在此结构中必须执行多少次搜索才能找到该项目,事实上,Guttman确实说过#34;不止一次可能需要搜索被访问节点下的子树,因此无法保证良好的最坏情况性能。"我们能否根据必须执行的搜索次数来表达最坏的情况?

关于平均情况,我不明白这是如何计算的。最好的情况呢?

1 个答案:

答案 0 :(得分:2)

我说最坏的情况是O(n + logM n):想象一下,你在R树中存储了很多重叠的矩形。现在存储一个位于所有其他矩形重叠区域的小矩形。对该矩形的查询必须遍历所有子树:节点 - > O(logM n)和条目 - >上)。

最好的情况是O(log n)。 R-Tree在每个分支中具有相同的深度,并且数据仅存储在叶节点中,因此您将始终必须遍历O(logM n)节点和该节点中的所有条目,因此它应该是O(M * logM n)。

我不确定你是否真的可以计算平均O(logM n)。但是,如果你有一些平均正态分布的数据(无论这意味着什么),几乎没有重叠(无论多少手段),而不是你的平均查询(无论平均值是什么),不应该遍历超过几个(1或2?)的子树。我实际上说平均值是O(M * logM n),因为遍历节点中的M个条目。