【问题标题】:Find m most distant points from a set of n points从 n 个点的集合中找到 m 个最远的点
【发布时间】:2014-12-03 21:35:35
【问题描述】:

我想从 n 个 d 维点的集合中找到最远的点子集。

注意:我在这个主题上发现了一个类似的问题,但不幸的是,提出的答案需要凸优化 (QP),这不适合我需要的大量点 (n)。

Most mutually distant k elements (clustering?)

我尝试了以下算法

  • 将 n 个 d 维点添加到 kd 树中
  • 当子集 S 的大小大于 n
    • 从 kd-tree 中找到距离其任何邻居最近的点 q
    • 从 kd-tree 和子集 S 中删除点 q

返回m个最远点的子集S

这显然是不确定的,因为删除点的顺序会影响 S 的最终子集(但这偶尔会返回正确的解决方案)。但复杂度为 (n - m)log(n),考虑到 n 将 > 100,000,这是有利的。

有没有人知道如何改进/替换上述算法,同时降低复杂性?

【问题讨论】:

  • 你可以考虑提交到mathoverflow
  • @JulienS。我不知道这个网站,但我可能会把我的问题转到那里,谢谢!

标签: optimization graph


【解决方案1】:

您可以尝试使用希尔伯特曲线并对曲线上的点进行预排序,例如在 cgal 和三角剖分中使用它。

【讨论】:

  • 这是一个非常有趣的建议。我为 3-d 实现了这个,但不幸的是,这并没有提供我可以使用的解决方案。这导致点集沿希尔伯特曲线分布。例如,在输入 3-d 点位于球体上的情况下,第一个排序点将与最后一个排序点重合。我真正想要的是第一点与最后一点的距离最大。非常有趣的东西!
  • @difftator:你确定吗?您可以将这些点转换为二进制文件并将其交错。我认为你一定做错了什么。只有在摩尔曲线中,曲线才在起点附近结束。
  • 我再看一下实现——我还需要找到一些合理的测试用例作为现实检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
相关资源
最近更新 更多