是否存在允許刪除RB中的多個節點的算法或從RB刪除節點的唯一算法是以某種方式刪除節點:
1.刪除一個
2.如果需要修復樹用於從紅黑樹中刪除多個元素的算法
1
A
回答
1
如果沒有約束,說當你在做多節點缺失的樹必須保持平衡,它似乎是合理的,我認爲你可以做多的刪除後修復樹。
每次刪除後均衡樹的目的是爲了確保刪除操作的計算成本是一致的。如果您不需要刪除以這種方式保持一致,則可以用不同的方式編寫刪除算法。雖然,修復操作將比僅僅一次刪除後的計算更爲冗長。它也可能是一個更復雜的一個。
0
我解決這個問題的方法是創建一個要刪除的節點的鏈表並連續使用它們的標準刪除方法。我很想知道是否有更好的大規模刪除算法。
2
如果超過一半的節點被刪除,您可以扔掉現有的樹並在更短的時間內建立一個新樹,因爲插入和刪除的成本相同。
0
我會建議使用Treap而不是紅黑樹,因爲在Treap v/s紅黑樹中平衡樹在各種情況下似乎更容易。我和你有同樣的問題,但與Treaps。 https://cstheory.stackexchange.com/questions/20495/algorithm-to-bulk-delete-nodes-from-a-treap
我不能確定預期的高度限制在批量刪除後是否仍然有效(問題中提到的算法)。
1
您可能會感興趣的數據結構TeardownTree。它支持delete_range
操作,在O(k + log n)
時間內工作,其中n
是樹中項目的初始數量,k
是刪除項目(並返回給調用者)的數量。充分披露:我是作者。
我必須強調的是,數據結構不支持insert
操作,但針對clone
和delete_range
進行了優化。我寫了一個非正式的description of the algorithm。通過所有優化,代碼現在與該文檔顯着不同,但它應該足以抓住這個想法。
相關問題
- 1. 紅黑樹的刪除算法
- 2. 紅黑樹 - 刪除
- 3. 紅黑樹中的刪除方法
- 4. 在紅黑樹中刪除
- 5. 紅黑樹 - 無dummys元素去除
- 6. 紅黑樹〜1子刪除
- 7. 刪除左傾紅黑樹
- 8. 紅黑樹刪除根
- 9. 紅黑樹刪除算法(CLR第3版)
- 10. 紅黑樹的刪除操作
- 11. 在另一個紅黑樹的節點中使用紅黑樹
- 12. 刪除紅黑樹的整個子樹會保留其屬性?
- 13. 紅黑樹的迭代算法
- 14. 紅黑樹刪除問題C#
- 15. 從二叉搜索樹製作紅黑樹的算法
- 16. 從堆樹中刪除根元素
- 17. 從數組中刪除多個元素
- 18. 紅寶石鞋,多元素刪除
- 19. 控制元素插入紅黑樹的Java TreeSet方法
- 20. 紅寶石 - 從哈希刪除元素
- 21. 紅黑樹和多圖
- 22. 使用jquery從多個元素中刪除多個類
- 23. 如何插入和刪除紅黑樹比AVL樹更快?
- 24. RedBlack Trees:我想了解刪除紅黑樹中的節點?
- 25. CLRS第二版中的紅黑樹刪除修復,Clojure
- 26. 在紅黑樹中插入相同的元素?
- 27. 紅黑樹,
- 28. 從元素中刪除元素而不刪除元素後
- 29. 刪除數組元素中紅寶石
- 30. 紅黑樹的應用
對不起,但這沒有任何意義。如果從樹中刪除節點而未修復樹,則會留下指向左右分支的指針。 – 2011-03-14 13:21:32
我認爲Phillis意味着指針會在節點刪除後被連接,但是直到要刪除的節點的整個LL被刪除後纔會重新平衡指針。 – reuscam 2011-03-14 13:49:22
我認爲這可能是一個糟糕的方法,無論 - 在多次刪除後重新平衡樹的複雜性可能會比單次刪除的總和過高。它已經有一段時間了,因爲我已經與這些工作。 – reuscam 2011-03-14 13:50:34