AVLの中央値。AVLを活用する方法?


8

これが私の質問の出典です。

自己均衡ツリー(AVL)を指定して、中央値を返すメソッドをコーディングします。

(中央値:データサンプルの上半分と下半分を区切る数値。例:系列が

2、7、4、9、1、5、8、3、6

中央値は5です。)

私は次の解決策を提供できます:

  1. 指定されたツリーをトラバースし、要素の数を返します。
  2. 木をトラバース n / 2 + 1n奇数の場合)して、順番にツリーウォークを適用します。値n / 2 + 1番目の要素は、中央値です。

しかし、二分探索木でそれを行うことができますか?AVLに適したアルゴリズムはありますか?


1
リンクはすでにあなたの質問に答えています—あなたは何をもっと探していますか?
Yuval Filmus

通常、バイナリ検索ツリーの検索アルゴリズムはAVLツリーで機能しますが、AVLを使用すると、ツリーの高さがノード数の対数であるという追加の保証が得られます。
jmite 2015

回答:


9

高さだけでなく各ノードのサブツリーのサイズを格納してAVLツリーを変更すると、ツリーのバランスが取れているという事実を使用して、時間の中央値を見つけることができます。これを実現するために、あなたは、より一般的な手順の書き込みを選択したノードの受け入れと番号、そして見つけたをルートとするサブツリーの最小番目のノード。O(logn)vkkv

左側のサブツリー(存在する場合)に個のノードがあるとします。場合、左のサブツリーに再帰します。場合は、我々は返す。そうでない場合は、正しいサブツリーに再帰し、を減らします。LkLk=L+1vkL+1

このアルゴリズムの実行時間は、ツリーの高さ線形です。O(logn)


例を挙げていただけませんか?
マクシムドミトリエフ2015

いいえ、自分で作成する必要があります。私のアルゴリズムが達成しようとしていることとその方法を理解してください。
Yuval Filmus


0

AVLは、いくつかの特別なプロパティを持つバイナリサーチツリーです。自己バランスツリーです。高さは常に対数です。最悪のシナリオの通常の二分木は、リンクされたリスト(並べ替えられたデータを追加する場合)になる可能性があるため、高さがnになります。最悪のシナリオのAVLツリーはフィボナッチツリーです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.