web-dev-qa-db-ja.com

二分探索木のバランスを保つ

アルゴリズムとデータ構造について学びます。そのために、私は次のような行を読み取る簡単なプログラムを実行しています。

bdhj 168.24
dahf 42.88
dhfa 128.92

最初の列はアカウント名を表し(4文字である必要はありません)、2番目の列はそのアカウントに追加(または値が負の場合は削除)する値を表します。さまざまなアルゴリズムのプロファイルを作成できる膨大なテストデータがあります。私はこの情報をリンクされたリストと動的配列に保存してみました。動的配列はバイナリ検索を可能にするのに優れていましたが、要素を挿入するにはmemmoveを呼び出す必要があり(ソート済みを挿入しているため)、時間がかかります。このプログラムで二分探索木を試したいのですが、探索木をバランスよく保つ方法がわかりません。グーグル検索を試しましたが、使用できるアルゴリズムの説明やポインタがまったく見つかりませんでした。私がチェックできるポインタやソースを教えていただけますか?

2
yasar

赤黒木やAVL木などの自己バランス型の木がいくつかあります。詳細については、以下を参照してください。

Wikipedia:Self-balancing binary search tree

Wikipedia:Red–Black tree

ウィキペディア:AVLツリー

または CRLSブックの第13章

8
Aligus