设X是某个中等空间中n个点的集合 - 现在,比如R ^ 5。设S为X的凸包,让p为S中的一个点,让v为任意方向。最后,让L = {p + lambda v:lambda a real number}是在方向v上通过p的直线。
我有兴趣找到一个合理有效的算法来计算S与L的交集。如果知道没有这样的算法,我也有兴趣听听!注意,这个交点可以用L与S边界的(极端)两个交点表示。我特别感兴趣的是找到一个在n很大时表现良好的算法。
我应该说,在两个方面很容易做到这一点。在这种情况下,可以从p看到以“顺时针顺序”排序X的点,然后进行二分搜索。因此,初始排序采用O(n log(n))步骤,然后进一步查找采用O(log(n))步骤。我没有看到更高维度的类比算法应该是什么。部分问题在于,二维凸体具有n个顶点和n个面,而3个或更高维度的凸体可以具有n个顶点,但是多个,多于n个面。
答案 0 :(得分:2)
您可以为此编写一个简单的线性程序。您希望最小化/最大化lambda受x + lambda v位于输入点的凸包中的约束。 “在凸壳中的位置”是两点之间的坐标相等,其中一个点是输入点的非负加权平均值,使得权重总和为1.
作为一个实际问题,从一些随机选择的点开始,获得凸组合或不可行性证书可能是有用的,然后将不可行性的证书解释为线性不等式并找到最违反的输入点它。如果你正在使用一个实际的解算器,这意味着你想要制定双重,切换一堆预解决的东西,并使用无限制的证书来运行上面的基本上作为切割平面方法。除非您有病理数据,否则您可能只需告诉LP求解器一小部分输入点。