簡體   English   中英

一個有效的數據結構,用於在某個時間之前收回事件?

[英]An efficient data structure for evicting events before some time?

我有一個由ID和日期組成的對象集合。 我想以一種可以按ID有效查找它們的方式存儲這些對象,並且還刪除在某個時間點之前發生的所有事件。

我在考慮使用HashMap和TreeMap,其中HashMap持有ID,而TreeMap存儲按日期排序的元素。 這樣可以通過ID查找O(1),並讓我有效地刪除所有舊事件。 我還嘗試使用日期排序的TreeMap,但不包含ID的哈希表。

是否存在更有效的數據結構來存儲信息以有效支持這些操作?

鑒於您要支持的操作是

  • 插入,
  • 通過ID查找,以及
  • 刪除一段時間之前發生的所有事情,

我認為您可能想使用由鏈表哈希表和展開樹組成的數據結構。 基本思想如下:哈希表將ID值映射到所討論的對象,展開樹存儲按日期排序的對象。 要插入結構中,您可以在O(log n)攤銷時間內將元素插入ID哈希表和splay樹中。 您可以在哈希表的O(1)預期時間內進行查找。

根據問題的參數,您可以非常有效地刪除一段時間之前出現的所有元素。 這個想法如下。 有效的展開樹(攤銷O(log n))支持刪除樹中時間在某個特定值之前的所有內容。 現在,如果您插入到此結構中的條目具有以下屬性:每當您刪除某個時間以下的所有值時,便永遠不會在該時間之前插入條目,則可以使用以下刪除過程:首先,使用高效算法刪除所有需要在總攤銷時間O(log n)中從splay樹中刪除的條目,然后記錄剛剛刪除的時間。 從那時起,無論何時您在哈希表中進行查找,如果您看到某個元素的時間低於給定的時間閾值,則只需刪除它即可。 如果在重新哈希處理期間執行此操作,則可以將需要刪除的所有操作從哈希表中刪除,以將需要刪除的所有O(n)分散到需要的瞬間,這樣就可以分攤工作。 這仍然為您提供ID的O(1)查找時間和O(1)攤銷到哈希表中的插入時間。 簡而言之,如果您可以進行此假設,則將獲得以下運行時:

  • 插入:O(log n)攤銷。
  • 通過ID查找:預期為O(1)。
  • 刪除所有在時間T之前的內容:攤銷O(log n)。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM