【发布时间】:2013-06-24 03:23:38
【问题描述】:
假设我们在 3 维空间(或 2d,目前无所谓)中有 10 亿个点,我们想找到 k closest points(大小为 k 的点的子集,它们之间的距离比任何其他这样的子集),我们该怎么做?
我知道有一个名为 cover tree 的数据结构,但我想它在这里可能没有用,因为它试图找到最接近一点的节点。
【问题讨论】:
-
Spatial indexes 可能会派上用场。
-
其实有很长的列表,我知道 R-tree 尤其是 Kd-tree ,但我猜这些和覆盖树一样工作,我们可以使用这些结构找到最近的节点到单个节点。
-
实际上我认为我们可以使用例如
kd-tree数据结构来存储节点,然后通过对节点进行一种按顺序遍历并保持固定长度的queue( k) 我们可以找到最接近的点,这需要O(nlogn)创建kd-tree 和O(n)遍历所有节点,所以总时间是O(nlogn),知道吗?跨度> -
在一组
k点中有k(k-1)/2距离。应该最小化什么?和?最大?还有什么? -
@n.m.每两个节点之间的距离总和必须最小化你是对的,有
k(k-1)/2距离,但我们可以在O(n)中做到这一点,因为我们在queue中添加了一个新点,我们在其他节点之间有距离,所以这可以在O(k)中完成
标签: algorithm data-structures computer-science