0
私は整数値とセグメント[L、R]を持つバランスの取れたAVLツリーを持っています。
この範囲の値を持つすべてのノードを削除し、残りのノードがバランスの取れたAVLツリーを形成するようにツリーを再調整したいとします。AVLツリーから一連の要素を削除する最も効率的な方法は何でしょうか?
この操作の計算量はどのくらいですか?
私は整数値とセグメント[L、R]を持つバランスの取れたAVLツリーを持っています。
この範囲の値を持つすべてのノードを削除し、残りのノードがバランスの取れたAVLツリーを形成するようにツリーを再調整したいとします。AVLツリーから一連の要素を削除する最も効率的な方法は何でしょうか?
この操作の計算量はどのくらいですか?
慎重に実行すると、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.
'(R-L)* O(logN)+ K * O(logN)'?すなわち「R-L」回はK回の検索と削除を行い、Kは見つかったノードの数である。 –
@GiorgiNakeuriこれは素朴なアプローチです。私は、任意の与えられた範囲の木の要素の数だけに依存して、最悪の場合の複雑さを持つ解を探しています。 – kichatos