这是一个有趣的练习:
假设P是一个简单但不一定是凸多边形,q是一个任意点,不一定在P中。
设计一个有效的算法,从q出发找到一条线段,使其与尽可能多的P的边相交。
换句话说,在站在点q处时,应该向哪个方向瞄准枪才能穿过最多的墙壁?
通过P的顶点的子弹只得到一个点的信用。
可以使用O(n log n)算法。n是顶点或边的数量,因为它是一个多边形,因此边的数量大致等于顶点的数量。
我的想法是:
首先将q与P中所有的顶点连接起来(假设有N个顶点)。这将得到N条直线或N-1组直线。
最终的射击线必须在这些线对之间。因此,我们必须找到包含最多边的线对。
我认为这个解决方案不是O(n log n)的。
有什么想法吗?