簡體   English   中英

支持刪除的不相交集數據結構

[英]Disjoint set data structure supporting deletion

假設我們有一組n個不相交的節點{節點1 ,節點1 ,...,節點n }

以下3個操作的最快數據結構和算法是什么:

  1. Union(x,y):在節點x和節點y之間添加無方向邊,兩個節點之間最多可以有一條邊。

  2. IsConnected(x,y):如果節點x和節點y直接或間接連接,則返回true,即節點x和節點y在同一個連接組件中。

  3. Un-union(x,y):刪除節點x和節點y之間的邊(如果存在)。

Disjoint-set是前兩個操作的完美數據結構,但它不能直接支持第3個操作。 有什么選擇?

如果我們模擬過程,第一個和第三個操作可以在O(1)中實現,但第二個操作是O(n),所以我想看看是否可以在O(logn)時間內運行所有三個操作或更少。

鏈接/剪切樹可以在O(log N)時間內執行這3個操作。

您可以在本書中閱讀“鏈接/剪切樹”和相關數據結構: “數據結構和應用手冊” (第35章)。

鏈接/剪切樹不允許在已經(間接)連接的節點之間添加邊緣。 如果您需要“Union(x,y)”操作來支持此操作,則問題會變得更加復雜,您可以將其解決為無向圖中的動態連接問題。 (參見同一本書或本pdf中的第36.4章)。 在這種情況下,插入/刪除復雜性增加到O(log 2 N)。

Kaplan,Shafrir和Tarjan提出了一種通過增量重建向聯合查找數據結構添加刪除的一般技術,並且顯示刪除分別采用O(t_f(n)+ t_i(n)),這是尋找和插入節點的成本。 一般的想法是在每個集合中保留已刪除項目的數量,並在此數量達到特定閾值時重建集合。

Alstrup,Gørtz,Rauhe,Thorup和Zwick通過指出樹中的哪些元素被占用以及哪些是空的並且在刪除操作之后“整理”樹來顯示如何在恆定時間內實現刪除。

暫無
暫無

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

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