我有两组点A和B.我正在寻找A的子集,其凸包最多包含来自B的n个点和
要么没关系。
有一种有效的算法吗?我的问题是2D。
答案 0 :(得分:0)
不确定如何破解这个。但我首先考虑A的Delaunay三角剖分并计算每个三角形内的点数。现在我们想要在凸子集上最大化区域(2D右,体积是滑动?)或点数。
现在每个三角形都是凸的。我们将超过n个点的任何一个标记为“坏”,但是我们分配点,这些三角形不能包括在内。其余的都是候选人。对于每个候选人,去邻居,并尝试增长它。因此,我们得到大约3 *个三角形的数量作为复合四元候选者,并且每个成功生长的三角形不再是候选者,但仍然不是“坏”。所有的四边形都必须是凸的。如果一个三角形根本没有增长,它仍然是 一个“候选人”,但它已经“完成”。一旦有更好的候选人出现, 它不再是候选人并且变得“糟糕”,没有成功的集合可能包括 它
现在进入下一阶段,这是一个基本的想法,尝试与所有人联合起来 可能的邻居,并从候选人名单中删除任何你 吸收。如果你不能成功成长,你就会“完成”。但 你不能只与任何人联合,如果不是凸起的,你必须添加 额外的三角形变成凸面。
最终我们所有的候选人都会被吸收或“完成”,我们有一个胜利者。
问题是这个算法是否会创造一个指数级别的候选人,或者我们是否可以足够快地消除它们以防止这种情况发生。我不知道答案。但我认为如果你首先尝试与较大的邻居团结起来,你可以很快地消除大部分可能的子集。