2010-11-04 82 views

回答

1

如果沒有約束,說當你在做多節點缺失的樹必須保持平衡,它似乎是合理的,我認爲你可以做多的刪除後修復樹。

每次刪除後均衡樹的目的是爲了確保刪除操作的計算成本是一致的。如果您不需要刪除以這種方式保持一致,則可以用不同的方式編寫刪除算法。雖然,修復操作將比僅僅一次刪除後的計算更爲冗長。它也可能是一個更復雜的一個。

+0

對不起,但這沒有任何意義。如果從樹中刪除節點而未修復樹,則會留下指向左右分支的指針。 – 2011-03-14 13:21:32

+0

我認爲Phillis意味着指針會在節點刪除後被連接,但是直到要刪除的節點的整個LL被刪除後纔會重新平衡指針。 – reuscam 2011-03-14 13:49:22

+1

我認爲這可能是一個糟糕的方法,無論 - 在多次刪除後重新平衡樹的複雜性可能會比單次刪除的總和過高。它已經有一段時間了,因爲我已經與這些工作。 – reuscam 2011-03-14 13:50:34

0

我解決這個問題的方法是創建一個要刪除的節點的鏈表並連續使用它們的標準刪除方法。我很想知道是否有更好的大規模刪除算法。

2

如果超過一半的節點被刪除,您可以扔掉現有的樹並在更短的時間內建立一個新樹,因爲插入和刪除的成本相同。

1

您可能會感興趣的數據結構TeardownTree。它支持delete_range操作,在O(k + log n)時間內工作,其中n是樹中項目的初始數量,k是刪除項目(並返回給調用者)的數量。充分披露:我是作者。

我必須強調的是,數據結構不支持insert操作,但針對clonedelete_range進行了優化。我寫了一個非正式的description of the algorithm。通過所有優化,代碼現在與該文檔顯着不同,但它應該足以抓住這個想法。