我需要一个有效的数据结构,它将对映射到值
(x,y) => v
并允许查找匹配2d范围表达式的键值对:
x1 < x < x2 && y1 < y < y2
比完整搜索更快。我有一些解决方案,但实施起来很重要。这种任务有没有标准的算法/方法?我相信数据库开发人员在解决复合索引问题时必须解决这个问题。
答案 0 :(得分:1)
如果您想要一个非常简单的解决方案,请尝试以下方法:
将密钥保存在x;
给定查询范围,通过二分法找到x范围内的第一个点;
循环x直到x范围结束并在y上测试。
假设您的密钥均匀分布,如果x范围占据整个域的分数Fx,则与穷举搜索相比的加速比为1 / Fx(不幸的是,不是1 / Fx.Fy)。
尽管获得的收益可能看起来微不足道,但实施它以将其与穷举搜索和您可以尝试的任何更复杂的方法进行比较是值得的。
另一个简单的解决方案是 gridding ,即将点存储在与每个网格单元相关联的链表中。然后搜索可以限于与范围重叠的单元格。
您需要在细胞大小上找到一个很好的折衷方案;远大于范围的典型大小的单元是低效的;但细胞太小而且大多数都是空的也是低效的。
四叉树数据结构可视为网格化的自适应版本。