【问题标题】:Find the lines which are visible找到可见的线条
【发布时间】:2020-07-04 14:45:46
【问题描述】:

最近我在接受采访,面试官问我“线路能见度”。

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

现在我确定有两条极左和极右的线(具有最大和最小斜率)将是可见的,但是如何找到其线段位于极端线之间的线?我相信下一个后续问题是 - 解决方案的时间复杂度是多少以及如何优化它?

【问题讨论】:

    标签: algorithm time-complexity computational-geometry


    【解决方案1】:

    在极对偶下,这相当于计算一组点的上凸包,具体来说,每条线y = m x + b 对应于点(m, b)。上层船体有大量的算法选择; Graham 扫描非常简单,并且可以及时运行O(n log n)

    【讨论】:

    • 感谢大卫的回答。所以基本上线被投影为平面上的点。然后我们找到两个极值点并使用格雷厄姆扫描得到上凸包。
    • 对于上层船体,安德鲁的变体将是完美的。
    猜你喜欢
    • 2018-02-16
    • 2016-01-05
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2018-11-16
    相关资源
    最近更新 更多