如何在范围搜索中使用Morton Order?
在wiki中,在“使用一维数据结构进行范围搜索”段落中,
它说
我的问题是:
1)为什么 F 是19?为什么 F 不应该为16?
2)如何获取 BIGMIN ?
3)是否有任何网络博客演示了如何进行范围搜索?
最佳答案
编辑:现在,AWS数据库博客具有a detailed introduction to this subject。
This blog post合理地说明了该过程。
搜索矩形空间x=[2,3], y=[2,6]
时:
x
和y
值的最低位分别为2和2,可以找到最小的Z值(12)。 x
和y
值的最高位分别为3和6,可以找到最大的Z值(45)。 一个明显的优化是尝试使必须遍历的多余数据量最小化。这很大程度上取决于您在数据中穿过的``接缝''数量-``Z''曲线必须进行大幅度跳跃才能继续其路径(例如,从Z值31到下面的32)。
这可以通过使用
BIGMIN
和LITMAX
函数来标识这些接缝并导航回矩形来缓解。为了最大程度地减少我们评估的不相关数据的数量,我们可以:maxConsecutiveJunkData
)。顶部链接的博客文章使用3
表示该值。 maxConsecutiveJunkData
段,我们将启动BIGMIN
和LITMAX
。重要的是,在我们决定使用它们的时候,我们现在位于线性搜索空间内(Z值12到45),但在矩形搜索空间之外。在Wikipedia文章中,他们似乎选择了maxConsecutiveJunkData
的4
值;他们从Z = 12开始,一直走到矩形之外(超过15)有4个值,然后才决定现在该使用BIGMIN
了。由于maxConsecutiveJunkData
随您的口味而定,因此BIGMIN
可以用于线性范围内的任何值(Z值12至45)。令人困惑的是,本文仅将19处的区域显示为阴影线,因为这是当我们使用BIGMIN
为4的maxConsecutiveJunkData
时将被优化的搜索的子范围。当我们意识到我们已经在矩形之外徘徊太远时,我们可以得出结论,该矩形是非连续的。
BIGMIN
和LITMAX
用于标识拆分的性质。 BIGMIN
的设计是,给定线性搜索空间中的任何值(例如19),找到第二个最小值,该最小值将返回具有较大Z值的拆分矩形的一半内(即,将我们从19跳到36)。 LITMAX
与之类似,可帮助我们找到最大的值,该值将位于Z值较小的拆分矩形的一半内。在链接的博客文章中的 BIGMIN
函数说明中深入介绍了LITMAX
和zdivide
的实现。