计算给定线的交点数

时间:2013-04-14 07:16:25

标签: algorithm

我正准备接受谷歌的电话采访,并遇到这个问题:

给定2D空间中的行列表,如何在小于O(n ^ 2)的时间内计算交叉点的数量?

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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