Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 找出可见的线条_Algorithm_Time Complexity_Computational Geometry - Fatal编程技术网

Algorithm 找出可见的线条

Algorithm 找出可见的线条,algorithm,time-complexity,computational-geometry,Algorithm,Time Complexity,Computational Geometry,最近我在接受采访时,面试官问我“线路可见性” 问题是这样的-有x轴和y轴,假设一个人(p)站在(0,∞). 现在在这个平面上画了一些线,注意这些是线而不是线段。我们必须找到P可以看到的所有线。他说你可以假设线是以对象的形式给出的,有一个函数返回两条线的交点。为了简单起见,让我们假设没有平行线 现在我确定了两条直线,分别是最左边和最右边(具有最大坡度和最小坡度)将是可见的,但如何找到线段位于极端直线之间的直线?我确信接下来的问题是-解的时间复杂度是什么以及如何优化它?在极性对偶下,这相当于计算一组

最近我在接受采访时,面试官问我“线路可见性”

问题是这样的-有x轴和y轴,假设一个人(p)站在(0,∞). 现在在这个平面上画了一些线,注意这些是线而不是线段。我们必须找到P可以看到的所有线。他说你可以假设线是以对象的形式给出的,有一个函数返回两条线的交点。为了简单起见,让我们假设没有平行线


现在我确定了两条直线,分别是最左边和最右边(具有最大坡度和最小坡度)将是可见的,但如何找到线段位于极端直线之间的直线?我确信接下来的问题是-解的时间复杂度是什么以及如何优化它?

在极性对偶下,这相当于计算一组点的上凸包,具体地说,每条直线
y=mx+b
corre响应点
(m,b)
。上船体有大量的算法选择;Graham扫描非常简单,并在时间
O(n log n)中运行

感谢David的回答。因此,基本上直线是作为平面上的点投影的。然后我们找到两个极值点,并使用Graham扫描得到上凸包。对于上凸包,Andrew的变体将是完美的。