【发布时间】:2011-03-06 11:13:25
【问题描述】:
给定平面上的 n 个点。 No 3 是共线的。
给定数字 k。
找到 k 点的子集,使得 k 点的凸包在 k 点子集的任何凸包中具有最小周长。
我可以想到一个简单的方法在 O(n^k k log k) 中运行。 (找到每个大小为 k 的子集的凸包并输出最小值)。
我认为这是一个 NP 问题,但我找不到任何适合归约的东西。
有人对这个问题有想法吗?
一个例子,
the set of n=4 points {(0,0), (0,1), (1,0), (2,2)} and k=3
结果:
{(0,0),(0,1),(1,0)}
由于该集合包含 3 个点,因此结果的凸包和周长小于任何其他 3 个点的集合。
【问题讨论】:
-
您可能想为那些不知道从哪里开始学习凸包和计算几何,但可能想改进算法的人发布代码或伪代码。
-
是否会使用以点之间的距离作为权重的 MST 以某种方式简化问题?至少在某些情况下,我可以想到它如何让事情变得更容易一些(但我也可以想到它可能不是很有用的情况)。
-
我想知道 Voronoi 图是否有助于解决这个问题。因为这会给你所有最近的邻居到一个点,我希望你至少要为你测试的每个点少迭代几个点。 (哦,当然 MST 意味着您已经知道最近的邻居)
-
你能举一个例子说明一组点有多个可能的凸包吗?越想越觉得这是不可能的情况。
-
@MikeD 一组 n 个点只有一个外壳,但是这些点中的 k
标签: algorithm computational-geometry convex-hull