Algorithm 计算给定直线的交点数

Algorithm 计算给定直线的交点数,algorithm,Algorithm,我正在准备谷歌的电话采访,遇到了这个问题: 给定二维空间中的直线列表,如何计算少于O(n^2)时间内的交点数 他们说受访者给出了一个O(n^2)的解决方案,然后面试官问他是否能想出一个更好的解决方案 谢谢。二维中的两条线要么相交一次,要么平行。如果没有平行线,则存在n*(n-1)/2个交点。O(n logn)解决方案是按斜率对线进行排序,然后扫描平行度,为找到的每一组m条平行线减去m*(m-1)/2 当然,这忽略了浮点舍入的任何实际问题,但我假设如果需要考虑的话,问题中会提到这一点。lines(

我正在准备谷歌的电话采访,遇到了这个问题:

给定二维空间中的直线列表,如何计算少于O(n^2)时间内的交点数

他们说受访者给出了一个O(n^2)的解决方案,然后面试官问他是否能想出一个更好的解决方案


谢谢。

二维中的两条线要么相交一次,要么平行。如果没有平行线,则存在n*(n-1)/2个交点。O(n logn)解决方案是按斜率对线进行排序,然后扫描平行度,为找到的每一组m条平行线减去m*(m-1)/2


当然,这忽略了浮点舍入的任何实际问题,但我假设如果需要考虑的话,问题中会提到这一点。

lines(仅供参考,我不能保证问题100%正确,因此如果有人知道没有更好的解决方案,这也是答案)如果是线段,对于
n
直线和
k
交叉点,可以使用在O((n+k)log n)时间内运行的。我认为这是一个相当常见的面试问题。@agou-问题是有多少个十字路口,而不是有多少个十字路口。后者要复杂得多。因为有O(n^2)个交叉点,我认为面试者的答案无法改进。好的,因为我不确定问题本身,你的答案有道理,我再等几个小时,看看是否有更好的解决方案。谢谢。基本上,对坡度进行排序后,当您遍历已排序的坡度“数组”时,对于找到的每对相等坡度,递减1。是吗?@goldenmean-如果
m
直线是平行的,那么它们之间就有
m*(m-1)/2对相等的斜率。(或者,换句话说,
m*(m-1)/2
避免了交点。)这就是减法的来源。