データ構造とアルゴリズム
第八回 (2008年11月
21日)
平衡木と二次記憶装置への応用
http://www.sw.it.aoyama.ac.jp/2008/DA/lecture8.html
Martin J. Dürst
duerst@it.aoyama.ac.jp
© 2008 Martin
J. Dürst 青山学院大学
目次
- 前回の残りとまとめ
- 平衡木
- 2-3-4 木
- 赤黒木
- AVL 木
先回のまとめ
- 抽象データ型の辞書
- 二分木とその辿り方
- 探索木での探索・挿入・削除
探索木の実装
平衡木
- 一般の探索木は最悪、連結リストの形を取る
- 乱数などで分割項目を決めることは不可能
- 完全二分木の場合、追加・削除の手間が過大
解決策: 完全ではないがある程度平衡性を保つ木
トップダウン 2-3-4 木
(top-down 2-3-4 tree)
- 各ノードの子数は 2、3 または 4
- 子数が k の場合、ノードに k-1
のデータ項目を保持
- ノード内のデータ項目のキーは部分木の分岐点
- 木の高さは一定
- それによって操作が O(log n)
赤黒木
(red-black-tree)
- 2-3-4 木の二分木での実装方法として定義可能
- 元の木の辺は黒
- 3子や4子のノードは複数ノードに分割、その内部の辺は赤
- 二つの赤の辺は連続不可能
- 黒の辺だけを数えると木の高さが一定
- 最大の高さは最小の高さの二倍以内
AVL 木
(AVL-tree)
- Adelson-Velskii と Landis (Адельсон-Вельский と
Ландис) が 1962 年に提案
- 最古の平衡木 (二分木)
- 制約: どの頂点 (ノード)
でも、左と右の部分木の高さの差は 1 以下
- 高さが 1.44 log2 n
に限定
- 検索は赤黒木より速い
- 挿入・削除は赤黒木より遅い
二次記憶装置
(secondary storage)
- 内部メモリは
- ワード単位でアクセス
(現在のマシンで 32ビットや64ビットなど)
- アクセスは非常に速い (ナノ秒単位)
- 二次記憶装置 (ハードディスクなど) は
- 一気に沢山のデータにアクセス
(1ページ、512バイト~4096バイトなど)
- アクセスは非常に遅い (ミリ秒単位)
(二次記憶装置 (テープ) は線形アクセス限定で論外)
B 木
(B-tree)
- 2-3-4 木の変形と考えられる
- 1ページを1ノードとして使用
- ページごとのキーの容量を最大化
- ページごとの最低のキーの数は容量の半分
- キー以外のデータを一番下の層だけに配置
まとめ
- 平衡木によって辞書の基本操作は全て O(log
n) で可能
- 二次記憶装置で B
木はデータベースなどで非常に重要