【问题标题】:Find k closest points in large number of points在大量点中找到k个最近的点
【发布时间】: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


【解决方案1】:

这似乎是K-Means Algorithm 的理想问题,您的结果应该类似于this

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多