algorithm - 如何以规则的密度选择点

标签 algorithm geometry selection subset sampling

如何选择具有规则密度的点子集?更正式地说,

给定

  1. 一组 A 不规则间隔的点,
  2. 距离度量 dist (例如,欧氏距离),
  3. 和目标密度d

如何选择满足以下条件的最小子集B

  • 对于A中的每个点x
  • B中存在一个点y
  • 满足dist(x,y) <= d

我目前最好的办法是

  • A本身开始
  • 挑选出最接近(或特别接近)的几个点
  • 随机排除其中一个
  • 只要条件成立就重复

并重复整个过程以获得好运。但是还有更好的方法吗?

我正在尝试用 280,000 个 18-D 点来做到这一点,但我的问题是一般策略。所以我也想知道如何用二维点来做。而且我真的不需要保证最小的子集。欢迎使用任何有用的方法。谢谢。


自下而上的方法

  • 随机选择一个点
  • 在未选择的 y 中选择为此 min(d(x,y) for x in selected)是最大的
  • 继续前进!

我将其称为自下而上,而我最初发布的是自上而下。这在开始时要快得多,所以对于稀疏采样这应该更好?

绩效衡量

如果不需要保证最优性,我认为这两个指标可能会有用:

  • 覆盖半径:max {y in unselected} min(d(x,y) for x in selected)
  • 经济半径:min {y in selected != x} min(d(x,y) for x in selected)

RC 是允许的最小 d,这两者之间没有绝对的不平等。但是RC <= RE更可取。

我的小方法

为了演示该“性能度量”,我生成了 256 个均匀分布或按标准正态分布分布的二维点。然后我用它们尝试了自上而下和自下而上的方法。这就是我得到的:

bottom-up.norm top-down.norm

RC 是红色,RE 是蓝色。 X 轴是所选点的数量。你认为自下而上也一样好吗?看动画的时候我是这么认为的,但似乎自上而下要好得多(看看稀疏区域)。尽管如此,考虑到它的速度要快得多,也不算太糟糕。

我在这里打包了所有东西。

http://www.filehosting.org/file/details/352267/density_sampling.tar.gz

最佳答案

你可以用图来模拟你的问题,假设点为节点,如果两个节点的距离小于d,则用边连接两个节点,现在你应该找到最小的顶点数,使得它们是它们连接的顶点覆盖了图的所有节点,这是minimum vertex cover problem (这通常是 NP-Hard),但您可以使用快速 2 近似:重复将边的两个端点放入顶点覆盖中,然后将它们从图中移除。

P.S:确保您应该选择与图形完全断开连接的节点,在删除这些节点(意味着选择它们)之后,您的问题是顶点覆盖。

关于algorithm - 如何以规则的密度选择点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975241/

相关文章:

线段Java角

java - GA : ArrayIndexOutOfBoundsException error 中的轮盘选择

java - 复制图形节点以制作节点网络的全新复制

c++ - 两个瓦片之间的瓦片 map 冲突解决

algorithm - 将一个值映射到另一个值并返回

algorithm - 计算半铰接卡车的位移坐标

php - 判断一个点是否位于圆内 PHP

javascript - 如何使用 javascript 获取选定的文本 id 并替换文本并保持标签完整?

javascript - 浏览器页面中选定文本的坐标

java - 填充给定形状的选项数