2011-08-27 79 views
2

我讀過一些Q &關於自平衡二叉樹,但我並不十分熟悉它們。關於平衡二叉搜索樹的比較

我知道的第一個是AVL,第二個是紅黑樹。

有些東西我不太明白:根據一些書籍和文章,AVL可以執行比紅黑樹快一點的搜索,好吧,這是可以理解的。

  1. 那麼什麼是紅黑樹對AVL的優勢?

  2. 在AVL中,可能在每次插入之後,我們必須檢查平衡,但在紅黑樹中我們不必經常這樣做,對吧?

PS: 我搜索了類似的東西,但我沒有得到滿意的答案。 希望有些朋友可以給我一個自平衡樹木的詳細比較。

回答

2

AVL樹具有以下性質:從每個節點,在左側的高度和差的右子樹是至多2

在紅黑樹,在另一方面,該高度的任何節點的左邊或右邊的子樹最多是兩倍另一棵樹的高度。也就是說,它們最多相差2倍。

這直觀地表明,在AVL樹中平均查找確實更快。但是,在插入或刪除一個節點時,我們必須更經常地重新平衡AVL樹,以保持更嚴格的高度不變(另一方面,紅黑樹中的重新平衡在算法上更復雜)。這意味着在實踐中,紅黑樹可能比AVL樹更好,特別是當它經常變化時。

+0

感謝您的回答。你的意思是,rb-tree對AVL的唯一優勢是rb-tree執行的重新平衡操作較少,如果我們更新(插入/刪除)很多,應該很方便嗎? – Alcott

+0

@Alcott基本上是的。在實踐中,rb-trees在大多數情況下勝過AVL樹。 AVL樹在您構建樹一次*的情況下執行得更好,然後僅將其用於查找。但在這種情況下,根本不需要自平衡樹:因爲它是靜態的,所以可以手動平衡一次。 –

+0

我知道B樹在數據庫中很流行,我也讀過幾篇關於B樹在數據庫中的應用的文章,但是我還是不太明白數據如何排列在磁盤上,以及如何保持B樹結構在磁盤? – Alcott