Transcript ppt

大阪電気通信大学 情報通信工学部 光システム工学科 2年次配当科目
コンピュータアルゴリズム
探索アルゴリズムの復習
第13講: 平成21年1月8日 (金) 4限 E252教室
中村 嘉隆(なかむら よしたか)
奈良先端科学技術大学院大学 助教
[email protected]
http://narayama.naist.jp/~y-nakamr/
各探索アルゴリズムの計算量
名前
探索
追加
削除
備考
線形探索
O(n)
O(1)
O(n)
配列,リスト
どっちも可
2 分探索
O(log n)
O(n)
O(n)
配列で実現,
リスト不可
2 分探索木
平均 O(log n)
最悪 O(n)
平均 O(log n)
最悪 O(n)
平均 O(log n)
最悪 O(n)
整列されたデー
タの追加に弱い
平衡木
(AVL 木)
O(log n)
O(log n)
O(log n)
追加・削除時に
再構成が必要
ハッシュ法
平均 O(1)
最悪 O(n)
平均 O(1)
最悪 O(n)
平均 O(1)
最悪 O(n)
レコード数とハッ
シュ値数の比,
ハッシュ関数の
精度に依存
2010/1/8
第13講 探索アルゴリズムの復習
2
今日の講義の内容
探索アルゴリズムの演習
2分探索木
AVL 木
ハッシュ法
2010/1/8
第13講 探索アルゴリズムの復習
3
復習: 探索(サーチング)問題とは
 サーチング: Searching,探索
 n 個のレコード列から,キーの値を指定して,それと等しいキー
を持つレコードを選ぶ処理
 レコード(record)とキー(key)
 レコードとは,ひとかたまりのデータ
 キーとは,レコードの中にある 1 つのフィールド(要素)
 例:成績{学籍番号,名前,出席点,試験点}
 レコードは 1 人分のデータ(例:{5433,中村,30,55})
 キーは,要素のどれか(例えば,学籍番号)
 ここでは簡単のため同じキーを持つレコードは複数存在しないとする
2010/1/8
第13講 探索アルゴリズムの復習
4
復習: 探索するレコードの表とサイズ
 探索はある列 (表) に対して行う
 その表を作るのに必要な計算量も考慮が必要
 問題のサイズ
番号
名前
=レコード数
 表の分類
 静的な表
問題の
サイズ n
点数
1
たろう
76
2
はな
82
3
こん
74
一度表を作ると二度と作り替えない
探索さえ早くすればよい
レコード
キー
 動的な表
表を作ったあとでも,レコードの追加,削除がある
レコードの追加,削除の手間も考慮
2010/1/8
第13講 探索アルゴリズムの復習
5
復習: 線形探索
 線形探索: linear search,sequential search,逐
次探索,順探索
アルゴリズム
配列,またはリストに並べられたデータを一つ一つ順に端か
ら調べる
5 回優勝した横綱は?(キー: 優勝回数)
143kg の横綱は?(キー: 体重)
朝青龍 武蔵丸 若乃花 貴乃花
曙
旭富士 大乃国
139kg 235kg 134kg 159kg 232kg 143kg 203kg
15回
12回
5回
22回
11回
4回
2回
[1]
2010/1/8
[2]
[3]
[4]
第13講 探索アルゴリズムの復習
[5]
[6]
[7]
6
復習: 線形探索のまとめ
入力
レコードの列(並び方は自由)
アルゴリズム
前から順番にキーを調べていく
計算量
探索 O(n),表への追加 O(1),削除 O(n)
その他
番兵による高速化
応用例: 自己再構成リスト
2010/1/8
第13講 探索アルゴリズムの復習
7
復習: 2 分探索
2 分探索: binary search
入力はキーであらかじめ整列された列(表)とする
整列は前に勉強した
キーの大小判定することで,目的のキーが列(表)
の前にあるか後ろにあるか判断できる
列の中央の要素のキーと探索したいキーを比較
し,探索する領域を半減させる
2010/1/8
第13講 探索アルゴリズムの復習
8
復習: 2 分探索の概念図
 キー 21 を持つ動物を探したい
 lo = 1, hi = 16, mid = 8
[1] [2]
[3]
[4] [5]
[6]
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
5 8 13 19 21 26 33 34 36 40 45 55 58 69 74 81
虎 牛 馬 猫 鶏 犬 鷹 鼠 狸 兎 羊 豚 猿 狐 人 魚
キー
 lo = 1, hi = 7, mid = 4
[1] [2]
[3]
[4] [5]
[6]
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
5 8 13 19 21 26 33 34 36 40 45 55 58 69 74 81
虎 牛 馬 猫 鶏 犬 鷹 鼠 狸 兎 羊 豚 猿 狐 人 魚
 lo = 5, hi = 7, mid = 6
[1] [2]
[3]
[4] [5]
[6]
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
5 8 13 19 21 26 33 34 36 40 45 55 58 69 74 81
虎 牛 馬 猫 鶏 犬 鷹 鼠 狸 兎 羊 豚 猿 狐 人 魚
 lo = 5, hi = 5, mid = 5 見つかった!!
2010/1/8
第13講 探索アルゴリズムの復習
9
復習: 2 分探索のまとめ
 入力
 探索するキーで整列されたレコードの列
 アイデア
 探索するキーと,列の中央の要素のキーの大小関係で探索範
囲を半減させる
 計算量
 探索 O(log n),表への追加 O(n),削除 O(n)
 その他
 線形探索に比べて,探索の計算量は小さいが,追加の計算量
が多い
 表への追加が多い(動的な)場合はおすすめできない
 静的な表への探索に向いている
2010/1/8
第13講 探索アルゴリズムの復習
10
演習: 2 分探索
 次の列からキー 144 のレコードを探してください
 lo ← 1, hi ← 16, mid ← (lo+hi)/2 = 8
[1] [2]
[3]
[4] [5]
[6]
1
3
5
13 21 34 55 89 144 233 377 610 987 999
2
8
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
 144 > a[8] なので lo ← mid + 1 = 9
 hi = 16, mid ← (lo+hi)/2 = 12
[1] [2]
[3]
[4] [5]
[6]
1
3
5
13 21 34 55 89 144 233 377 610 987 999
2
8
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
 144 < a[12] なので hi ← mid - 1 = 11
 lo = 9, mid ← (lo+hi)/2 = 10
[1] [2]
[3]
[4] [5]
[6]
1
3
5
13 21 34 55 89 144 233 377 610 987 999
2010/1/8
2
8
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
第13講 探索アルゴリズムの復習
11
演習: 2 分探索
 次の列からキー 144 のレコードを探してください
 つづき (mid=10)
[1] [2]
[3]
[4] [5]
[6]
1
3
5
13 21 34 55 89 144 233 377 610 987 999
2
8
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
 144 > a[10] なので lo ← mid + 1 = 11
 hi = 11, mid ← (lo+hi)/2 = 11
[1] [2]
[3]
[4] [5]
[6]
1
3
5
13 21 34 55 89 144 233 377 610 987 999
2
8
[7]
[8] [9] [10] [11] [12] [13] [14] [15] [16]
 144 = a[11] なので終了
 キー144 は 11番目の位置にあった (探索終了)
2010/1/8
第13講 探索アルゴリズムの復習
12
復習: 2 分探索木とは
 2分探索木:binary search
tree
 以下の特徴を持つ木構
造
27
小
各節点は最大で 2 個の子
を持つ
7
その 2 個の子は,左の子, 小
右の子である
2
左の子(子孫)は,
親より小さな値を持つ
右の子(子孫)は,
親より大きな値を持つ
2010/1/8
大
大
1
5
3
小
14
大
小
41
小
第13講 探索アルゴリズムの復習
大
33
大
20
51
大 小
39
44
大
48
13
復習: 2 分探索木での探索概念図
キー 5 を持つノードを探したい
根(キー: 27)からはじめる
5 < 27 なので,左の子へ
5 < 7 なので,左の子へ
2 < 5 なので,右の子へ
2
5 = 5 なので,終了
1
27
7
5
3
2010/1/8
第13講 探索アルゴリズムの復習
41
14
33
20
51
39
44
48
14
復習: 2 分探索木のデータ構造
レコードの追加
探索して入るべき位置を探す
例: キー 30 のデータ
27
 27 → 41 → 33 → 30
探索 O(log n)
挿入は O(1)
全体で
O(log n) + O(n)
= O(log n)
7
2
1
14
5
3
2010/1/8
41
第13講 探索アルゴリズムの復習
33
20
30
51
39
44
48
15
演習:2 分探索木への追加
 以下のキーの列が与えられたとして,2分探索木を構築
しなさい
 {34, 12, 24, 56, 78, 44, 32, 87, 66, 92, 6}
34
12
6
56
24
44
32
78
66
87
92
2010/1/8
第13講 探索アルゴリズムの復習
16
復習: 2 分探索木からの削除
レコードの削除
例えば,このノードを
削除したい
探索して入るべき位置を探す
 探索 O(log n)
27
削除するノードが葉ノード
の場合は,そのまま削除
7
41
27
7
2
1
14
中間ノードの場合は?
2010/1/8
2
削除
14
5
3
第13講 探索アルゴリズムの復習
33
20
51
39
44
48
17
復習: 2 分探索木からの削除
 中間ノードの削除
27
27
子が 1 つの場合
子を親とつなげる
33
子が 2 つの場合
41
41
39
31
第13講 探索アルゴリズムの復習
51
どちらかと交換
27
左の部分木の最大値の
ノード(最も右奥の子)か, 左の部分木
右の部分木の最小値の
ノード(最も左奥の子)を
持ってきて代わりをさせる
33
以降では左の部分木の最大
値のノードを選ぶ
2010/1/8
39
51
右の部分木
41
51
39
44
18
2 分探索木の最小値
 木(部分木)の最小値は根から左の子を辿る
 左の子が辿れない(左の子がない)ノードがあればそれが最小
値
27
7
最小値
3
1
子があるが,
右の子であって,
左の子でない
2010/1/8
41
14
5
33
20
51
39
44
48
2
第13講 探索アルゴリズムの復習
19
2 分探索木の最大値
 木(部分木)の最小値は根から右の子を辿る
 右の子が辿れない(右の子がない)ノードがあればそれが最大
値
27
7
3
1
41
14
5
33
20
51
39
44
48
2
2010/1/8
最大値
第13講 探索アルゴリズムの復習
子があるが,
左の子であって,
右の子でない
20
部分木も同様
 部分木の最小値(最大値)は部分木の根から左(右)の
子を辿る
 左(右)の子が辿れないノードがあればそれが最小値(最大値)
27
部分木の根
7
3
1
最小値
2010/1/8
14
5
2
41
33
20
51
39
最大値
第13講 探索アルゴリズムの復習
44
48
21
演習: 2 分探索木からの削除
 以下の 2 分探索木から {6, 24, 78} の順にノードを削除
したときの木の形を答えなさい
6 を削除
34
34
12
6
葉ノード
12
56
24
44
32
24
78
66
56
44
32
87
78
66
87
92
92
2010/1/8
第13講 探索アルゴリズムの復習
22
演習: 2 分探索木からの削除
 以下の 2 分探索木から {6, 24, 78} の順にノードを削除
したときの木の形を答えなさい
24 を削除
34
34
12
24
子が 1 つ
44
32
その子
2010/1/8
12
56
32
78
66
56
44
78
66
87
87
92
92
第13講 探索アルゴリズムの復習
23
演習: 2 分探索木からの削除
 以下の 2 分探索木から {6, 24, 78} の順にノードを削除
したときの木の形を答えなさい
78 を削除
34
12
56
32
左の部分木
44
左の部分木の最大値 or 右の部分木の最小値
(ここでは左の部分木の最大値を選ぶとする)
34
子が 2 つ
56
32
78
66
12
右の部分木
87
44
66
87
92
92
2010/1/8
第13講 探索アルゴリズムの復習
24
復習: 2 分探索木のまとめ
 入力
 左の子孫は小さなキー,右の子孫は大きなキーを持つ 2 分木
 アイデア
 各ノードのキーと探索したいキーを大小比較することで,探索
範囲を片方の部分木に限定していく
 計算量
 探索 平均 O(log n),最悪 O(n)
 表への追加 平均 O(log n),削除 平均 O(log n)
 その他
 最悪で O(n) になるため注意が必要(平均は O(log n))
 整列されたデータを追加していくと木の形が直線的になり,計
算量が最悪に近づく
2010/1/8
第13講 探索アルゴリズムの復習
25
復習: AVL 木のアイディア
 要素の追加,削除が起こったときに
木の形が偏るなら再構成する
 ただし再構成の計算量が O(log n) を
超えてはいけない
 完全にバランスさせる必要はない
 最悪でも O(log n) にさえなれば良い
41
 各節点の左右の部分木の高さの差
が 2 以上になったら,木を再構成す
る
 部分木
31
 ある節点より子孫で構成される
部分的な木
 高さの差 -1, ±0, +1 は許す
2010/1/8
33
51
39
左の部分木
第13講 探索アルゴリズムの復習
44
右の部分木
26
復習: AVL 木
左右の部分木の高さの差が高々 1 の 2 分探
索木
左の部分木の高さ 3
右の部分木の高さ 3
27
左の部分木
の高さ 2
左の部分木
7 1
の高さ
2
1
2010/1/8
14
5
右の部分木
41 2
の高さ
33
11
第13講 探索アルゴリズムの復習
右の部分木
の高さ 2
51
44
27
復習: AVL 木への要素の追加,削除
 手順は次の 2 ステップ
2 分探索木と同様に場所を探し,挿入・削除
その結果,木の形が AVL 木の条件を満たさなくなっ
たら再構成
 挿入後の木の形の可能性
各節点の左右の部分木の高さの差が高々 1 以内
AVL 木の条件を満たすので再構成なし
高さの差が 2 以上になる節点が出てくる
再構成
2010/1/8
第13講 探索アルゴリズムの復習
28
復習: AVL 木の再構成を必要とする形
追加・削除した後の木の形
A
A
(i)
(ii)
(iii)
1
1
B
B
c
b
ここに追加
した場合
2010/1/8
1
B
c
a
A
2
ここから削除
した場合
a
b
c
a
2
ここから削除
した場合
第13講 探索アルゴリズムの復習
b
ここに追加
した場合
2
ここから削除
した場合
29
復習: AVL 木の再構成 (i)
A と B を付け替え,B を親とする
節点 A と B のキーの大小関係は B < A なので,
A は B の右の子になる
部分木 b は
A の左の
部分木にする
1
1
A
B
部分木 b は
A の左の子孫
つまり全て
A より小さい
a
2010/1/8
B
A
c
a
b
b
c
2
第13講 探索アルゴリズムの復習
30
復習: AVL 木の再構成 (ii)(削除のみ)
a < B <
b
<A<c
a < B < ( d < C < e ) < A < c
A
A
C
1
1
B
1
B
B
A
1
C
c
a
b
2010/1/8
c
2
a
d
e
2
第13講 探索アルゴリズムの復習
a
d
e
c
1
どちらか片方は高さが
1 低い可能性がある 31
1
復習: AVL 木の再構成 (ii)(削除のみ)
(ii) の再構成をした結果,以下の a と d のよう
に,まだ高さの差が 2 ある場合は,B 以下の
部分木を再構成
C
1
B
a
2010/1/8
A
d
1
e
1
c
C
こっちなら
AVL 木の条件を
満たす
再構成後でも a
と d の高さの差
が 2 の場合は
再々構成
第13講 探索アルゴリズムの復習
1
B
A
d
a
e
c
2
32
復習: AVL 木の再構成 (iii)
a < B <
b
<A<c
a < B < ( d < C < e ) < A < c
A
A
C
1
1
B
1
B
B
A
1
C
c
a
b
2010/1/8
c
a
2
a
d
e
d
e
c
1
2
第13講 探索アルゴリズムの復習
どちらか片方は高さが
1 低い可能性がある
33
演習: AVL 木への追加
 次の AVL 木にキー 42 を追加した後の形を答えよ
 まずキー 42 を 2 分探索木と同様に追加
27
7
41
2
1
14
5
33
51
11
44
42
2010/1/8
ノード 51 において,左右の
部分木の高さの差が 2 に
なったので再構築
0
2
第13講 探索アルゴリズムの復習
34
演習: AVL 木への追加
 次の AVL 木にキー 42 を追加した後の形を答えよ
27
7
41
2
1
14
5
これはパターン (i)
A
33
11
44
1 42
0
2
1
B
51
B
A
1
0
a b
c
a
2
b c
A=51, B=44, a={42}, b={},c={}
2010/1/8
第13講 探索アルゴリズムの復習
35
演習: AVL 木への追加
 次の AVL 木にキー 42 を追加した後の形を答えよ
27
7
41
2
1
14
5
これはパターン (i)
11
A
33
1 42
1
B
44
52
1
a b
B
c
A
a
2
1
b c
A=51, B=44, a={42}, b={},c={}
2010/1/8
第13講 探索アルゴリズムの復習
36
演習: AVL 木への追加
 次の AVL 木からキー 51 を削除した後の形を答えよ
 まずキー 51 を2分探索木と同様に追加
ノード 27 において,左右の部分木の高
さの差が 2 になったので再構築
27
27
7
41
2
1
14
5
4
2010/1/8
11
9
33
16
7
51
44
41
2
1
5
4
第13講 探索アルゴリズムの復習
33 2
14
11
4
44
16
9
37
演習: AVL 木への追加
 次の AVL 木からキー 51 を削除した後の形を答えよ
これはパターン (ii)
A
A
A 27
B
a
41
5
11
16
B
c
4
1
B
B
A
1
33 2
44
c
e
a b
9
1
C
C
14
4d
1
1
7
2
C
c
2
a d e
2
a
d e c
1
第13講 探索アルゴリズムの復習
A=27, B=7, C=14, a={2,1,5},
d={11,9}, e={16}, c={41,33,44}
2010/1/8
38
1
演習: AVL 木への追加
次の AVL 木からキー 51 を削除した後の形
を答えよ
A 27
B
a
7
41
C
14
2
4d
1
5
11
9
4
16
C
C
1
c
B
B
A
a
33 2 44
e
a
d e c
1
1
A
27
7
d
11
2
1
5
14
9
e
16
41
33
44
4
第13講 探索アルゴリズムの復習
A=27, B=7, C=14, a={2,1,5},
d={11,9}, e={16}, c={41,33,44}
2010/1/8
c
39
復習: AVL 木のまとめ
 2 分探索木の拡張
 各節点において,左右の部分木の高さの差が
高々 1 になるように常に保つ
 要素の追加・削除時に必要に応じて木の再構成
を行う
 計算量
探索の計算量 最悪でも O(log n)
探索 O(log n),追加 O(log n),削除 O(log n),再構
成 O(log n)
 木の再構成の操作の分,アルゴリズムが複雑
2010/1/8
第13講 探索アルゴリズムの復習
40
復習: ハッシュ法のアイディア
 いままでの探索アルゴリズム
 キーの値の比較が基本
 最も効率が良くても探索領域の
半減 → O(log n)
キー レコード
[1]
[2]
1 ada
未使用
3 few
キー 3
[3]
 キーの値の範囲が分かっている
とする
例: 1 から 100
 その場合,添え字 1 から 100 ま
での配列を用意
 キー x のデータがほしい場合 キー 9
は,配列 [x] にダイレクトアクセ
ス
→ O(1)!!!!!
[4]
未使用
[5]
未使用
 ハッシュ法のアイデア
2010/1/8
第13講 探索アルゴリズムの復習
[6]
[7]
6 def
未使用
[8]
8 beg
[9]
9 cek
[10]
10 rok
[11]
[12]
未使用
12 ff
41
復習: ハッシュ法のアイディア
 先ほどの配列を使う方法の欠点
 なかなかキーの範囲が分かることは少ない
 それにキーが正整数のみとも限らない
 範囲が広すぎるとメモリがたくさん必要
mod とは剰余
(余り)を求める
演算子
 ある関数を定義して,キーを変換
例: キーが整数のとき,下 2 桁の添え字を持つ配列の位
置に格納する(この場合,関数 h(x) = x mod 100 となる)
 このような下 2 桁の値をそのキーのハッシュ値という
 キー 1345 のレコードはハッシュ値 45 なので配列 [45] へ
 メモリ領域も 100 で済む
 じゃ,キー 945 のレコード(これもハッシュ値 45)もあった場合どう
する??
2010/1/8
第13講 探索アルゴリズムの復習
42
復習: チェイン法と開番地法
 チェイン法
ハッシュ値
 レコードを追加するとき,既に
同じハッシュ値を持つレコー
ドがあるときはリストでつなげ
る
 探索するとき,同じハッシュ値
を持つレコードが 2 つ以上あ
る場合はリストを辿る

1
2
3
レコード
4
5
ハッシュ値 使用済 キー
開番地法
1 ○
 レコード x を追加するとき,
2
ハッシュ値 h(x) の場所にレ
3 ○
4 ○
コードがある場合は,h(x)+1
5
にそのレコードを格納する
6
 探索するとき,h(x) の位置か
7
2010/1/8
ら順に調べる必要がある
第13講 探索アルゴリズムの復習
レコード
43
復習: ハッシュ関数
 元のレコードのキーからハッシュ値を求める関数
 異なる入力に対して,できるだけバラけたハッシュ値を返
すようにする
 よく使われる手法
 剰余(割り算の余り)を使う h(x) = x mod 567
 偏りをなくす工夫
 複数のハッシュ関数を組み合わせる
 h0(x),h1(x),h2(x),h3(x),…… を用意すると同じハッシュ
値を持つ可能性が減る
 と言っても,たくさん用意するのは面倒なので 2 つ h(x)と
g(x) を用意し, h0(x) = h(x),h1(x) = h(x) + g(x),h2(x) =
h(x) + 2 × g(x),h3(x) = h(x) + 3 × g(x) ,…… とする
2 重ハッシュ法(double hashing)
2010/1/8
第13講 探索アルゴリズムの復習
44
演習: ハッシュ法(チェイン法)
 ハッシュ法(チェイン法)を使って以下のキーの列の表を
ハッシュ値
表す図を作れ
 ハッシュ関数は
h(x) = x mod 10 とせよ
 列:
{23, 54, 55, 14, 49,
7, 4, 5, 63, 17}
2010/1/8
0
1
2
3
4
5
6
7
8
9
第13講 探索アルゴリズムの復習
23
63
54
14
55
5
7
17
4
49
45
演習: ハッシュ法(開番地法)
 ハッシュ法(開番地法)を使って以下のキーの列の表を
ハッシュ値
表す図を作れ
 ハッシュ関数は
h(x) = x mod 20
とせよ
 {23, 54, 55, 14, 49,
7, 4, 5, 63, 17} の
順で追加
 {55}を削除
 {74}を追加
2010/1/8
0
1
2
3
4
5
6
7
8
9
o
23
o
4
o
5
o
63
o
7
o
49
第13講 探索アルゴリズムの復習
10
11
12
13
14
15
16
17
18
19
o
54
o
55
o
14
o
17
46
演習: ハッシュ法(開番地法)
 ハッシュ法(開番地法)を使って以下のキーの列の表を
ハッシュ値
表す図を作れ
 ハッシュ関数は
h(x) = x mod 20
とせよ
 {23, 54, 55, 14, 49,
7, 4, 5, 63, 17} の
順で追加
 {55}を削除
 {74}を追加
2010/1/8
0
1
2
3
4
5
6
7
8
9
o
23
o
4
o
5
o
63
o
7
o
49
第13講 探索アルゴリズムの復習
10
11
12
13
14
15
16
17
18
19
o
54
o
55
o
14
o
17
47
演習: ハッシュ法(開番地法)
 ハッシュ法(開番地法)を使って以下のキーの列の表を
ハッシュ値
表す図を作れ
 ハッシュ関数は
h(x) = x mod 20
とせよ
 {23, 54, 55, 14, 49,
7, 4, 5, 63, 17} の
順で追加
 {55}を削除
 {74}を追加
2010/1/8
0
1
2
3
4
5
6
7
8
9
o
23
o
4
o
5
o
63
o
7
o
49
第13講 探索アルゴリズムの復習
10
11
12
13
14
15
16
17
18
19
o
54
o
74
55
o
14
o
17
48
復習: ハッシュ値のまとめ
 レコード数 n,ハッシュ値数 h のとき,探索 O(n/h),追
加・削除 O(n/h) の計算量
 ハッシュ値数が十分あれば,全て平均 O(1)
 ハッシュ値が重なったレコードの処理
 チェイン法: リストでつなぐ
 開番地法: その番地以降で開いているところに入れてい
く
 ハッシュ関数
 ハッシュ値を導く関数
 できるだけバラけた値を導出することが望ましい
 剰余関数(mod)が良く使われる
 複数のハッシュ関数を組み合わせる 2 重ハッシュ法がある
2010/1/8
第13講 探索アルゴリズムの復習
49
第13講のまとめ
探索アルゴリズムの演習
2分探索
2分探索木
AVL木
ハッシュ法
2010/1/8
第13講 探索アルゴリズムの復習
50