【发布时间】:2018-05-03 15:00:32
【问题描述】:
这是一个与语言无关的问题,更多的是面向算法设计。
假设我们在 3D 空间中有两个点数组(每个看起来都像 [(1, 0, 2), (2, 4, 32), ...])
第一个数组表示点的第一个状态,第二个表示稍后的状态,其中点已经移动了少量(不一定每个都移动相同的距离)。 注意: 在第二个状态下,可能会删除一些点并添加一些新点。
问题: 给定这两个数组,如何将每个偏移点匹配(以合理的准确度)到其原始点,同时识别哪些点是新的并且不存在于第一个状态?
想法:我在想可以应用某种 k-means 聚类,但我不确定它会如何处理在州 - 所以我认为这种方法效果不佳。
编辑:
点不一定要添加到数组中的任何特定位置,并且不一定要为状态之间的持久点保持顺序。与独特点之间的距离相比,点在状态之间移动的距离应该相对较小——否则这个问题基本上是不可能的。
【问题讨论】:
-
添加点时,是添加在数组的末尾还是分散在数组内部?对于未添加或删除的点,它们在两个数组中是否保持相同的相对顺序?点可能移动的距离与点之间的距离相比如何?
-
@TedHopp 查看编辑。
-
那么最近邻搜索似乎是最简单的方法。如果你想走那条路,请参阅this thread。对于其他方法,请查看point set registration(又名点匹配)算法。
-
@FDavidov - 第二个数组没有进化。它是任何演化发生后的状态,两种状态之间的任何变化都满足“小运动”条件。您似乎在想象算法将被重复执行,因为第一个数组保持固定而第二个数组继续变化,但这是您注入问题的内容。在 OP 的问题中没有这样的东西。
-
@FDavidov - 你的“当然不是!!!”正是OP所要求的。问题正是在点集的小扰动后匹配对应的点。事实上,这是一个真正的问题,因为点可能已经消失,新的点可能已经出现(可能离现有的点相对较远),并且剩余的点可能不在两个数组中的相同索引处。 OP 要求一种算法来处理该特定情况。有效地解决这个问题并非易事,尤其是在涉及大量点的情况下。
标签: algorithm cluster-analysis