Loading AI tools
来自维基百科,自由的百科全书
在数据处理中,R*树(英语:R*-tree)是R树的一种变体,可用来索引空间信息。R*树的构造花费比标准R树略高,因为数据可能需要被重新插入,但生成的树通常能获得更好的查询性能。像标准R树一样,它能存储点和空间数据。它在1990年由诺伯特·贝克曼(Norbert Beckmann)、汉斯-彼得·克里戈尔、拉尔夫·施奈德(Ralf Schneider)和伯恩哈德·西格(Bernhard Seeger)提出。[1]
此条目翻译品质不佳。 (2017年12月2日) |
R*树 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
发明时间 | 1990年 | ||||||||||||||||
发明者 | 诺伯特·贝克曼、汉斯-彼得·克里戈尔、拉尔夫·施奈德、伯恩哈德·西格 | ||||||||||||||||
用大O符号表示的时间复杂度 | |||||||||||||||||
|
覆盖和重叠的最小化对于R树的性能至关重要。重叠意味着,在数据查询和插入时,需要扩展树的多个分支(由于数据会被拆分到许多可能重叠的区域)。覆盖率的最小化提高了修剪性能,允许更频繁地从搜索中排除整个页面,特别是负范围查询。
R*树通过结合修改后的节点拆分算法和在节点溢出时强制重新插入的概念,去尝试减少覆盖和重叠。这是基于观察到 R-tree 结构非常容易受到其条目插入顺序的影响,因此插入构建(而不是批量加载)结构可能不是最优的。条目的删除和重新插入可能让它们“找到”树中比其原始位置更合适的位置。
当一个节点溢出时,它的一部分条目会从节点中删除并重新插入到树中。(为了避免由后续节点溢出导致的无限级联重新插入,在插入任何新条目时,在树的每一级中,重新插入的例程可能只被调用一次。)这带来了在节点中生成更多聚集良好的条目组的效果,从而减少节点覆盖。此外,实际的节点拆分经常被推迟,导致平均节点占用率上升。重新插入可以看作是节点溢出触发的增量树优化的一种方法。
因此,最坏情况下R*树的查询和删除复杂度与R树相当。R*树的插入策略的比R树线性拆分策略的复杂度高(),但比R树取页大小为时的二次拆分策略()复杂度低,并且对总复杂度没有太大的影响。R*树总的插入复杂性仍与R树相当。重插至多影响一个树支,因此重插操作具有的复杂度,这与正规R树的拆分操作相当。总体而言,R*树的复杂度与正规R树处于同一数量级。
一个完整的算法实现必须考虑诸多未在此处涉及的边角案例与特殊情况。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.