2010-02-06 64 views
10

我想知道如果任何人的數據結構將有效地處理以下情況的知悉:用於存儲數據結構的範圍

的數據結構應存儲幾個,可能重疊,可變長度範圍上一些連續的時間尺度。

  • 例如,您可能會添加範圍a:[0,3], b:[4,7], c:[0,9]

  • 插入時間不需要特別有效。

反演將採取的範圍作爲參數,並返回所有範圍,與所述範圍重疊組,例如:

  • Get(1,2)將返回a和c。 Get(6,7)將返回b和c。 Get(2,6)將返回所有三個。

  • 檢索需要儘可能高效。

回答

1

你可以去二叉樹,它將範圍存儲在層次結構中。從根節點開始,代表一個包含所有範圍的中間節點,您測試您嘗試插入的範圍屬於左側子範圍,右側子範圍還是兩者,然後在匹配的子節點中遞歸地繼續,直到您達到一定的深度,在此處保存實際的範圍。

對於查找,您可以根據頂部節點的左側和右側子範圍測試輸入範圍,然後跳入重疊的範圍,重複,直到達到您保存的實際範圍。

這樣,檢索具有對數複雜性。您仍然需要在檢索中管理重複項,因爲某些範圍將屬於多個節點。

3

您可以使用的一種數據結構是一維R-tree。這些旨在處理範圍和提供有效的檢索。您還將瞭解到Allen's Operators;時間間隔之間還有其他十幾種關係,而不僅僅是「重疊」。

有上,以便在這一領域侵犯其他問題,其中包括: