Optimization 从一组n个点中找出m个最远的点

Optimization 从一组n个点中找出m个最远的点,optimization,graph,Optimization,Graph,我想从nd维点的集合中找出m个点的最大距离子集 注意:我在这个主题上发现了一个类似的问题,但不幸的是,建议的答案需要凸优化(QP),这不适用于我需要(n)的大量点 我尝试了以下算法 将nD维点添加到kd树 而子集S的大小大于n 从kd树中找到距离其任何邻居最近的点q 从kd树和子集S中删除点q 返回m个最大距离点的子集S 这显然是不确定的,因为删除点的顺序会影响S的最终子集(但有时会返回正确的解决方案)。但复杂度为(n-m)log(n),考虑到n将大于100000,这是有利的 是否有人

我想从nd维点的集合中找出m个点的最大距离子集

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

我尝试了以下算法

  • 将nD维点添加到kd树
  • 而子集S的大小大于n
    • 从kd树中找到距离其任何邻居最近的点q
    • 从kd树和子集S中删除点q
返回m个最大距离点的子集S

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


是否有人想到如何在保持复杂度的同时改进/替换上述算法?< /P> < P>你可以尝试一条希尔伯特曲线并沿曲线预先排列点,例如在CGAL和三角剖分中使用。mathoverflow@JulienS. 我不知道这个网站,但我可能会把我的问题转到那里,谢谢!这是一个非常有趣的建议。我为3D实现了这一点,但不幸的是,这并没有提供一个我可以使用的解决方案。这导致点集沿希尔伯特曲线分布。例如,对于位于球体上的输入三维点,第一个排序点将与最后一个排序点重合。我真正想要的是第一点与最后一点的距离最大。很有趣的东西@扩散者:你绝对肯定吗?您可以将点转换为二进制文件并将其交错。我想你一定做错了什么。只有在摩尔曲线中,曲线才在起点附近结束。我将再看一看实现——我还需要找到一些合理的测试用例作为现实检查。