通过快速研究算法找到多边形内点的可见性多边形,我发现如果多边形没有孔,可以在O(n)时间内完成。
我想要找到的是多边形内部的一组点,整个多边形可以从中看到。
我的主要问题是:
这是否可以在O(n)时间和空间中进行?
我知道我会解释这个问题,我会稍后尝试上传图片,但这是我的一些想法。
我的想法是绕过多边形的边界。多边形的相邻点形成相对于x轴具有一定角度的线。如果下一行的角度大于前一个角度,将这两条线向多边形的内部延伸,则此时我们得到可见性多边形。
重复这个过程,我们找到几对分割我们正在制作的多边形的线,并且每次将多边形边增加1。
如果多边形有n个点,那么绕过它的边界需要一个1 - > n循环。这使我的运行时间" n次循环内的过程" 。
循环内的过程改变了由此构成的多边形,并考虑了穿过它的2条新线。要找到新的多边形,我必须使用多边形的每一行测试新的线条。这意味着另一个for循环从1到增加的多边形边数。由于边缘在时间上增加,因此该算法介于O(n)和O(n ^ 2)之间。
绕过边界并找到最终多边形的点是绝对必要的。这让我觉得O(n)算法可能是不可能的。