我有一个2D点集合,需要测试输入点
是否在的凸包内。由于这是一个二进制决策问题,理论上可以使用决策树实现O(log(N))。然而,我不知道如何组织数据和算法的实际实现,以便在O(log(N))内得到答案。在研究此想法时,我发现了以下内容:
我们如何更快地找到这两种情况呢?二分查找。只需在两个链中的点的第一个坐标中搜索x。如果它在链中,您已经找到了通过顶点的交叉点(而且您不必像以前那样仔细告诉交叉点的类型)。如果x不是链中顶点的坐标,则最接近它的两个值告诉您从(x,y)可能穿过的线段。因此,我们可以在 O(log n) 的时间内测试点是否在凸多边形中。事实证明,有数据结构可以在相同的 O(log n)时间限制下测试点是否在任意多边形中(或者在哪些多边形中)。但是它们更加复杂,所以我没有时间在这里描述它们;我会在ICS 164中谈论它们。(http://www.ics.uci.edu/~eppstein/161/960307.html)
你有什么想法吗:
- 数据结构应该如何设计才能达到
O(log(N))
?- 算法应该如何设计?