你有许多不同高度的杆,均匀分开,还有一根横跨它们顶部的绳索。绳子拉紧,不下垂。显然,绳子不一定会碰到所有杆子的顶部 - 例如,如果杆子比杆子的两侧短,那么绳子就永远不会碰到那根杆子。
我们如何找到哪根杆子碰到了绳子,哪根杆子没有?
我被告知有一种比n平方快的算法。
(不是作业)
答案 0 :(得分:7)
这基本上是convex hull problem。 (多边形顶点是所有极点的顶部以及第一个和最后一个极点的底部。)链接的维基百科页面提供了几个比O更好的算法(n 2 )。最好的似乎是marriage-before-conquest和Chan's algorithm,两者都是O(n log h),其中n是极数(+2),h是绳子实际上的极数触摸(也是+2)。
实际上,如果极点已按x坐标排序,则Graham scan和Monotone Chain算法为O(n)。