绳索接触杆的算法

时间:2012-02-27 19:04:32

标签: algorithm

你有许多不同高度的杆,均匀分开,还有一根横跨它们顶部的绳索。绳子拉紧,不下垂。显然,绳子不一定会碰到所有杆子的顶部 - 例如,如果杆子比杆子的两侧短,那么绳子就永远不会碰到那根杆子。

我们如何找到哪根杆子碰到了绳子,哪根杆子没有?

我被告知有一种比n平方快的算法。

(不是作业)

1 个答案:

答案 0 :(得分:7)

这基本上是convex hull problem。 (多边形顶点是所有极点的顶部以及第一个和最后一个极点的底部。)链接的维基百科页面提供了几个比O更好的算法(n 2 )。最好的似乎是marriage-before-conquestChan's algorithm,两者都是O(n log h),其中n是极数(+2),h是绳子实际上的极数触摸(也是+2)。

实际上,如果极点已按x坐标排序,则Graham scanMonotone Chain算法为O(n)。