簡體   English   中英

公平刪除二叉搜索樹中的節點

[英]Fair deletion of nodes in Binary Search Tree

在BST中刪除節點的想法是:

  1. 如果該節點沒有子節點,則將其刪除並將該節點的父節點指針更新為null

  2. 如果該節點有一個子節點,則通過更新該節點的父節點指向其子節點的指針,將該節點替換為其子節點

  3. 如果該節點有兩個子節點,請找到該節點的前任節點並將其替換為其前任節點,並通過將其指向其唯一的子節點(只能是左子節點)來更新前任節點的父節點的指針。

最后一種情況也可以使用后繼而不是前繼來完成!

有人說,如果在某些情況下使用前任產品,而在其他情況下使用后繼產品(給予它們同等的優先級),我們可以得到更好的經驗性能,

現在的問題是,如何完成? 基於什么策略? 以及它如何影響性能? (我猜按性能,它們表示時間復雜度)

我認為,我們必須選擇前任或后繼才能擁有更加平衡的樹! 但是我不知道該如何選擇使用哪一個!

一種解決方案是隨機選擇其中之一(相當的隨機性),但是基於樹形結構的策略不是更好嗎? 但是問題是什么時候選擇哪個?

如您所說,這是平衡的問題,因此通常最好選擇最小化平衡的方法。 您可以持有一些度量標准來衡量平衡水平(例如,與最大和最小葉高,平均高度的差等),但是我不確定開銷是否值得。 此外,還有一些自平衡數據結構(紅黑,AVL樹等)可通過在每次刪除后進行重新平衡來緩解此問題。 如果您想使用基本的BST,我想最好的策略是在沒有先驗知識的樹狀結構知識的情況下進行,而刪除順序將是在每次刪除的2種方法之間切換。

問題是根本的問題-為BST找到正確的刪除算法。 50年來,人們一直在嘗試解決它(就像就地合並一樣),他們沒有找到比通常的算法更好的東西(刪除前任/后繼)。 那么,經典算法有什么問題呢? 實際上,此刪除操作使樹不平衡。 經過多次隨機操作add/remove ,你會得到不平衡樹高度sqrt(n) 不管您選擇什么-刪除后繼者或前任者(或通過這些方式隨機選擇beetwen)-結果是相同的。

那么,該選擇什么呢? 我猜基於隨機(成功或掠奪)的刪除將推遲您的樹的不平衡。 但是,如果您想擁有完美平衡的樹,則必須使用紅黑樹或類似的東西。

暫無
暫無

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

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