快速加入折线组

时间:2014-10-26 15:35:48

标签: performance algorithm polyline

任务

给定 S = { L i }, i ∈[0, N )折线 L i =( p 0 ,..., p M i ),加入具有共同点的折线。

实施例

折线 A =(1,2,3,4), B =(6,5,4)和 C =应该连接(6,7,8)以形成折线 J =(1,2,3,4,5,6,7,8)或 K =(8,7,6,5,4,3,2,1)。 Example

解决方案

对于每个点 p u L i ,u∈{0, M < sub> i }检查每个 L j S \ { L i }如果 p v = p u ; p v L j ,v∈{0, M j }。如果是,请加入 L i L j

问题

它非常慢,因为 N ≈1,000,000且ΣM i ≈100,000,000。

问题

您是否有建议改进我的天真算法?

1 个答案:

答案 0 :(得分:0)

找到匹配后,请勿加入两行。记下匹配项,并从正在考虑的端点池中删除两个端点。然后,当找到所有匹配项时,开始反转线。这样每条线最多可以反转一次。

当您加入线条时,您可能需要为一条大线分配空间并将所有小线条复制到其中。根据实现情况,加入两行可能很昂贵(O(M)),所以最好不要零碎地加入这些行。