找到最大可能三角形区域的最快方法

时间:2013-11-09 13:36:34

标签: arrays algorithm geometry plane

让我们假设我们在平面上有一组点,每个点都由一对整数坐标描述。有没有办法找到这个点上具有顶点的三角形,其最大可能区域比O(n ^ 3)算法更快?

1 个答案:

答案 0 :(得分:1)

  1. 找到凸包。
  2. 对于位于凸包上的点(A,B)的每个,找到给三角形ABC的最大区域的第三点C.这可以使用O(log n)中的二进制搜索来完成。
  3. 要进行二分搜索,请按某种顺序(例如逆时针方向)排列凸包上的点。 A和B之间有两个点序列,一个从A到B,另一个从B到A.分别考虑每一个。

    二进制搜索步骤如下。在点间隔的中间取三个连续的点C,C',C''。计算三个区域CAB,C'AB,C''AB。如果C'是三者中最大的,则它是全局最大值并且搜索结束。如果C是最大的,则最大值在间隔的左半部分。如果C''是最大的,则最大值在右半部分。 (编辑:注意,新的间隔应在其中一端包含C'。

    那里有一个在O(n ^ 2 log n)中工作的算法。

    编辑2 this question的答案显示了如何更快地完成此操作。你可以将两种方法结合起来做得更好(在建造凸壳之后在O(log n)中,虽然在船体的构造中它仍然是O(n log n))。