这是一个有趣的练习:
令 P 是一个简单但不一定是凸多边形,q 是一个不一定在 P 中的任意点。
设计一种有效的算法来找到一条源自 q 且与 P 的最大边数相交的线段。
换句话说,如果站在 q 点,你应该把枪瞄准哪个方向,这样子弹才能穿过最多的墙壁?
子弹穿过 P 的一个顶点,只获得一堵墙的功劳。
O(n log n) 算法是可能的。n 是顶点或边的数量,因为它是一个多边形,边的数量大致等于顶点的数量。
这是我的想法:
首先将 q 与 P 中的所有顶点(假设有 N 个顶点)连接起来。将有 N 行,或 N-1 对行。
最后的射击线必须在这些对之间。所以我们必须找到包含最多边数的对。
我不认为这个解决方案是 O(n log n)。
有任何想法吗?