我想知道如果任何人的數據結構將有效地處理以下情況的知悉:用於存儲數據結構的範圍
的數據結構應存儲幾個,可能重疊,可變長度範圍上一些連續的時間尺度。
例如,您可能會添加範圍
a:[0,3], b:[4,7], c:[0,9]
。插入時間不需要特別有效。
反演將採取的範圍作爲參數,並返回所有範圍,與所述範圍重疊組,例如:
Get(1,2)
將返回a和c。Get(6,7)
將返回b和c。Get(2,6)
將返回所有三個。檢索需要儘可能高效。
我想知道如果任何人的數據結構將有效地處理以下情況的知悉:用於存儲數據結構的範圍
的數據結構應存儲幾個,可能重疊,可變長度範圍上一些連續的時間尺度。
例如,您可能會添加範圍a:[0,3], b:[4,7], c:[0,9]
。
插入時間不需要特別有效。
反演將採取的範圍作爲參數,並返回所有範圍,與所述範圍重疊組,例如:
Get(1,2)
將返回a和c。 Get(6,7)
將返回b和c。 Get(2,6)
將返回所有三個。
檢索需要儘可能高效。
你可以去二叉樹,它將範圍存儲在層次結構中。從根節點開始,代表一個包含所有範圍的中間節點,您測試您嘗試插入的範圍屬於左側子範圍,右側子範圍還是兩者,然後在匹配的子節點中遞歸地繼續,直到您達到一定的深度,在此處保存實際的範圍。
對於查找,您可以根據頂部節點的左側和右側子範圍測試輸入範圍,然後跳入重疊的範圍,重複,直到達到您保存的實際範圍。
這樣,檢索具有對數複雜性。您仍然需要在檢索中管理重複項,因爲某些範圍將屬於多個節點。
您可以使用的一種數據結構是一維R-tree。這些旨在處理範圍和提供有效的檢索。您還將瞭解到Allen's Operators;時間間隔之間還有其他十幾種關係,而不僅僅是「重疊」。
有上,以便在這一領域侵犯其他問題,其中包括: