给定 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)。
对于每个点 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。
您是否有建议改进我的天真算法?
答案 0 :(得分:0)
找到匹配后,请勿加入两行。记下匹配项,并从正在考虑的端点池中删除两个端点。然后,当找到所有匹配项时,开始反转线。这样每条线最多可以反转一次。
当您加入线条时,您可能需要为一条大线分配空间并将所有小线条复制到其中。根据实现情况,加入两行可能很昂贵(O(M)),所以最好不要零碎地加入这些行。