数据结构 - 多边形直径

时间:2016-10-10 17:49:35

标签: polygon convex-hull

我需要一个允许

的数据结构
  • 在O(logN)
  • 中添加点(x,y)
  • printDiameter()in O(logN)

其中N是多边形中当前的点数 显然,这两个点将位于多边形的凸包上。使用反节点对(Rotating-Callipers)的概念,我们可以发现N点的直径是O(N)。
This巧妙地解释了O(n)解决方案,但它不支持插入点。

1 个答案:

答案 0 :(得分:0)

k-d树可以在O(logN)中插入,只要它以某种方式balanced即可。对于直径部分,您必须检查每个节点以找到最远的部分,因此它应该是O(N)。 另一种解决方案是使用QuadTree,并遍历它以便仅获取位于树外部的节点。