Algorithm 找出可见的线条
最近我在接受采访时,面试官问我“线路可见性” 问题是这样的-有x轴和y轴,假设一个人(p)站在(0,∞). 现在在这个平面上画了一些线,注意这些是线而不是线段。我们必须找到P可以看到的所有线。他说你可以假设线是以对象的形式给出的,有一个函数返回两条线的交点。为了简单起见,让我们假设没有平行线Algorithm 找出可见的线条,algorithm,time-complexity,computational-geometry,Algorithm,Time Complexity,Computational Geometry,最近我在接受采访时,面试官问我“线路可见性” 问题是这样的-有x轴和y轴,假设一个人(p)站在(0,∞). 现在在这个平面上画了一些线,注意这些是线而不是线段。我们必须找到P可以看到的所有线。他说你可以假设线是以对象的形式给出的,有一个函数返回两条线的交点。为了简单起见,让我们假设没有平行线 现在我确定了两条直线,分别是最左边和最右边(具有最大坡度和最小坡度)将是可见的,但如何找到线段位于极端直线之间的直线?我确信接下来的问题是-解的时间复杂度是什么以及如何优化它?在极性对偶下,这相当于计算一组
现在我确定了两条直线,分别是最左边和最右边(具有最大坡度和最小坡度)将是可见的,但如何找到线段位于极端直线之间的直线?我确信接下来的问题是-解的时间复杂度是什么以及如何优化它?在极性对偶下,这相当于计算一组点的上凸包,具体地说,每条直线
y=mx+b
corre响应点(m,b)
。上船体有大量的算法选择;Graham扫描非常简单,并在时间O(n log n)中运行
感谢David的回答。因此,基本上直线是作为平面上的点投影的。然后我们找到两个极值点,并使用Graham扫描得到上凸包。对于上凸包,Andrew的变体将是完美的。