1

令 P 是一个简单但不一定是凸多边形,q 是一个不一定在 P 中的任意点。

设计一种有效的算法来找到一条源自 q 且与 P 的最大边数相交的线段。

换句话说,如果站在 q 点,你应该把枪瞄准哪个方向,这样子弹才能穿过最多的墙壁?

子弹穿过 P 的一个顶点,只获得一堵墙的功劳。

O(n log n) 算法是可能的。n 是顶点或边的数量,因为它是一个多边形,边的数量大致等于顶点的数量。

这与这个问题相同, 但是我无法理解答案,更具体地说,答案似乎不涉及 q,头部和臀部的事情也不清楚,因为多边形上的每个点都是头部和对接,因为每个点都连接到两个边缘,如果这有意义的话。谢谢

4

1 回答 1

2

因此,任何不与任何顶点附近的多边形相交的最佳答案都会有一个几乎与多边形顶点相交的最佳答案。

也就是说,如果您有一条穿过 10 个“墙”的线并且它不在顶点附近,您可以将它沿某个方向平移到顶点,同时仍然保持 10 个墙相交。

通过这种推理,您只需搜索通过接近顶点的解决方案。

因此,对顶点进行排序(nlogn),然后搜索几乎与一个(3n)相交的每个可能的线段。您可以在不重新计算每条候选线上的全部交点的情况下执行此操作,因为当线从一个顶点移动到另一个顶点时,它会添加或丢失 2 面墙(或保持不变)。您可以在每一步的固定时间跟踪这种增量变化。

于 2012-06-14T06:57:32.200 回答