【发布时间】:2013-04-27 06:05:32
【问题描述】:
我最近在一次编程面试中被问到以下问题:
"给定一个笛卡尔图的连续的图点(X,Y)流,设计一个数据结构来存储它们,以便在任何时候搜索到与给定点距离为k的所有相邻点应该在最短时间内完成时间复杂度方面的有效方法。”
我的想法是使用关联列表。列表的每个节点都会有 X 点作为键,其对应的 Y 点作为值。请建议任何更好的数据结构。
谢谢
【问题讨论】:
-
四叉树......
我最近在一次编程面试中被问到以下问题:
"给定一个笛卡尔图的连续的图点(X,Y)流,设计一个数据结构来存储它们,以便在任何时候搜索到与给定点距离为k的所有相邻点应该在最短时间内完成时间复杂度方面的有效方法。”
我的想法是使用关联列表。列表的每个节点都会有 X 点作为键,其对应的 Y 点作为值。请建议任何更好的数据结构。
谢谢
【问题讨论】:
http://en.wikipedia.org/wiki/R_tree
另见 K-DTree、四叉树等。
例如,在 k-d 树中找到 k 个最近的邻居将花费 O(k log n),或者对于常数 k,时间为 O(log n)。
将点存储在 X -> Y 映射中对您没有帮助,因为如果 Y 坐标非常接近,沿 X 维度彼此远离的点仍然可以是最近的邻居。
【讨论】: