问题:
给N(<=5W)个点
从中取出三个点使组成的三角形面积最大
答案:
最大三角形的三个顶点都在凸包上。
先求凸包,
假设凸包上的点依次是 P_0, P_1, ..., P_n-1。
先考查包含顶点 P_0 的所有三角形,
记顶点 P_0 和顶点 P_i 构成的线段是 S_i,
以 S_i 为一条边的三角形中,
最大的三角形的另外一个顶点应该是凸包上距离 S_i 最远的点。
设线段 S_i 的两侧距离 S_i 最远的点分别是 P_a, P_b,
设 S_i+1 的两侧距离 S_i+1 最远的点分别是 P_c, P_d,
必有 c >= a, d >= b。
因此,求出以 S_i 为一条边的最大三角形后,
求以 S_i+1 为一条边的最大三角形时,
可以顺序的往后扫描顶点。
求出所有以 P_0 为一个顶点的最大三角形需要扫描顶点一圈,O(n)
需要扫描 n 次,总的是 O(n^2) 的。
似乎一遍扫描当中还有优化的余地...