2016-04-13 4 views
0

私は整数値とセグメント[L、R]を持つバランスの取れたAVLツリーを持っています。
この範囲の値を持つすべてのノードを削除し、残りのノードがバランスの取れたAVLツリーを形成するようにツリーを再調整したいとします。AVLツリーから一連の要素を削除する最も効率的な方法は何でしょうか?

この操作の計算量はどのくらいですか?

+0

'(R-L)* O(logN)+ K * O(logN)'?すなわち「R-L」回はK回の検索と削除を行い、Kは見つかったノードの数である。 –

+0

@GiorgiNakeuriこれは素朴なアプローチです。私は、任意の与えられた範囲の木の要素の数だけに依存して、最悪の場合の複雑さを持つ解を探しています。 – kichatos

答えて

1

慎重に実行すると、AVLツリーの分割と結合はO(log n)になります。 2つの分割と1つの結合と、ファイナライザ/デストラクタを呼び出す場合は、LからRのすべての値を破棄するためのコストを加えて、操作を行うことができます。したがって、総コストは、デストラクタを呼び出すかどうかによって、O(log n)またはO(log n + k)になります。

私はAVLツリーの分割/結合をやり直すことはありません。挿入や削除のような退屈なケース分析のほんの一握りだからです。 However, I did that elaboration a few years ago for red-black trees.

関連する問題