给定一组n个点,它们分布在3条水平线上(y = 0,y = 1,y = 2) 考虑算法找出是否存在与O(n ^ 2)的交叉线
答案 0 :(得分:0)
我相信这个算法在O(n ^ 2)。首先我们假设:
x
- y=2
行上各点的坐标可用有限位数表示。x
中排序的。如果没有,那么首先对它们进行排序是O(nlog(n))现在,构建一个哈希函数,如下所示:
y=2
行上相邻点之间的最小距离。由于x
- 坐标已排序,因此为O(n)。拨打此最小距离d
。y=2
上的每个点映射到一个唯一的bin。此操作也是O(n)。然后,执行以下操作:
y=0
和y=1
行上的每对点,计算其在y=2
上的相交点。这是O(n ^ 2)。y=2
上的每个交叉点,查找哈希表以查看该行y=2
中是否有一个点。如果有,看看它是否是相同的点(在机器的精度内),如果是,那么就有一条交叉线。否则,没有。这是O(n ^ 2),因为哈希查找是O(1)。因此,算法是O(n ^ 2)。没有代码,只有想法。