java-优化算法以查找2d道路(线)中的交点

我有一个代表道路的线列表,因此每条道路都有一个“起点”和“终点”.我的目标是找到每条道路的“下一条”道路.如果一条道路的起点或终点落在另一条道路的起点或终点的顶部,则该道路为另一条道路的下一条.例如 :

道路A:起点(0,0)和终点(2,0)
道路B:起点(2,0)和终点(5,0)
C路:起点(2,0)和终点(4,2)

因此,Roads Next将是:

下一个{B,C}
B下一页{A}
C下一个{A}

我目前的算法是通过比较一条道路的每个起点与另一条道路的起点和终点来在O(n ^ 2)中进行的.如何使它更快.我认为整理道路可能会奏效,但我不确定.请告诉我你的想法!

注意:那些说者使用Hashmap< Start / EndPoint,Road>您的解决方案仍然是O(N ^ 2).

解决方法:

这取决于您要如何处理结果.计算结果的大小为O(#roads ^ 2).这意味着,如果要对其进行迭代,则最多将需要O(#roads ^ 2).这就是说,如果您只想回答诸如“返回给定道路的所有邻接关系”之类的问题,则可以使用实现的算法在O(#roads)中做到这一点.

上一篇:我如何排序多个mysql foreach数组,并在php中需要它们一致?


下一篇:MapReduce(Python)-如何对Top-N列表的reducer输出进行排序?