【发布时间】:2014-03-02 17:11:59
【问题描述】:
似乎有一个类似的问题here,但我对答案的清晰度和实用性都不满意。在最近的一次采访中,有人问我将存储我的大量浮点数的数据结构,以便我为自己或最近的邻居查找新来的。我说我会使用二叉搜索树,并尝试使其平衡以实现 O(log n)。
然后问题扩展到两个维度:我将使用什么数据结构来存储大量 (x,y) 对,例如地理坐标以便快速查找?我想不出一个令人满意的答案,当扩展到 K 维时完全放弃了。直接使用使用坐标值来“分割”空间的 k 维树似乎不起作用,因为靠近原点但在不同象限内的两个接近点可能最终在很远的叶子上。
采访结束后,我想起了很好地划分 K 维空间的 Voronoi 图。使用什么数据结构实现这一点的最佳方法是什么?如何进行查找?我觉得这个问题在计算机科学中是如此普遍,以至于现在它甚至有一个专门的数据结构。
【问题讨论】:
-
对于浮点数,我将从二叉搜索树开始。如果那是一个瓶颈,我会切换到散列整数部分(或沿着该概念的东西)。对于地理坐标,我可能会有一个坐标向量网格,或者(再次)一个相似坐标向量的散列。
标签: voronoi space-partitioning