2014-10-26 37 views
1

任務

給定一組小號 = {大號}, ∈ [折線0,Ñ大號 =( p,...,p M i),加入具有共同點的多段線。加入設置折線的快速

的折線 =(1,2,3,4), =(6,5,4)和Ç =(6,7,8)應(1,2,3,6,4,5,6,7,8)或K =(8,7,6,5,4,3,2,1)組成的折線。 Example

對於每一個點p ù大號,U ∈ {0,中號}檢查每大號ĴS \ {大號}如果p v = p ü; p v大號Ĵ,V ∈ {0,中號Ĵ}。如果是,請加入L iL j

問題

這是非常緩慢的,因爲ñ ≈ 1,000,000 ∑中號 ≈億。

問題

你有一個建議,以改善我的樸素算法嗎?

+0

你能列出角落案件的行爲嗎? – 2014-10-26 15:45:11

+0

對不起,我想我不明白你的問題。 :-( – user2033412 2014-10-26 15:46:59

+0

你用什麼數據結構來表示一條線?反轉和拼接成本高嗎? – Beta 2014-10-26 15:49:20

回答

0

只要找到匹配項,請不要連接兩行。記下匹配項,並從考慮中的端點池中刪除兩個端點。然後當所有比賽都找到時,開始倒車線。這樣每條線最多可以顛倒一次。

當您加入線條時,您可能有必要爲一條大線分配空間並將所有小線條複製到其中。根據實施情況,連接兩條線路可能很昂貴(O(M)),所以最好不要零碎地連接線路。

+0

瓶頸不是加入,瓶頸是檢查,s因爲它是O(N^2)。我是Loopings以減少複雜性。 – user2033412 2014-10-26 18:58:48

+1

@ user2033412:那你爲什麼把ΣMi帶進這個,當它不相關?將空間分成多個分箱,比較落在同一分箱中的端點。 – Beta 2014-10-26 20:04:40