私はこれをいくつかの論文で見ましたが、AVLツリーのノードを削除すると最大でlog(n)回のローテーションが発生する可能性があると誰かが主張しました。これは、可能な限り偏ったAVLツリーを生成することで実現できると思います。問題はこれをどのように行うかです。これは、除去ローテーションのことを研究するのに大いに役立ちます。どうもありがとう!
1540 次
1 に答える
9
最大に偏ったAVLツリーを作成する場合は、次のように帰納的に定義されるフィボナッチツリーを探します。
- 次数0のフィボナッチツリーは空です。
- 次数1のフィボナッチツリーは単一ノードです。
- 次数n+2のフィボナッチツリーは、左の子が次数nのフィボナッチツリーであり、右の子が次数n+1のフィボナッチツリーであるノードです。
たとえば、次の5次のフィボナッチツリーは次のとおりです。
フィボナッチツリーは、AVLツリーが持つことができるスキューの最大量を表します。これは、バランスファクターがこれ以上偏っている場合、各ノードのバランスファクターがAVLツリーによって設定された制限を超えるためです。
この定義を使用すると、最大に偏ったAVLツリーを非常に簡単に生成できます。
function FibonacciTree(int order) {
if order = 0, return the empty tree.
if order = 1, create a single node and return it.
otherwise:
let left = FibonacciTree(order - 2)
let right = FibonacciTree(order - 1)
return a tree whose left child is "left" and whose right child is "right."
お役に立てれば!
于 2012-01-25T05:05:59.657 に答える