Download presentation
Presentation is loading. Please wait.
Published byIvan Kusuma Modified 約 5 年前
1
新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ 須田 哲生
2
なぜハッシュ法? 高速探索法と言われるハッシュ法だが何故高速なのか? 他の探索法と何が違うのか? → アルゴリズムの理解が必要
→ アルゴリズムの理解が必要 本当に高速なのか? → 検証を行う
3
目的 ① 他の探索法との比較を行い ハッシュ法の高速探索の理由を探る ② コーディングを行い ハッシュ法の性能を検証する
4
ハッシュ法とは 格納されたデータの個数によらず 探索・削除・挿入などの操作を一定時間で行う ことができる高速な探索アルゴリズムである
5
ハッシュ法の特徴 キーから計算によりデータの格納場所を決定 (ハッシュ関数の利用) <文字列データ> a b c d e \0
(ハッシュ関数の利用) <文字列データ> a b c d e \0 97 98 99 100 101 + = 395 1 2 395 mod 4 (配列数) = 3 (ハッシュ値) 3 (ハッシュ表)
6
ハッシュ法の特徴 異なるキーでもデータ格納場所が同じになることがある (衝突の発生) 1 2 3 a b c d \0 97 98 99
(衝突の発生) 1 2 3 a b c d \0 97 98 99 100 + 394 mod 4 = 2 2 a c d e \0 97 99 100 101 + 394 4 mod = 2
7
衝突対策 衝突が起こらないように ① テーブルサイズを大きくする ② ハッシュ関数を工夫する 衝突が起きたときに ① テーブルの空き欄を探す
① テーブルサイズを大きくする ② ハッシュ関数を工夫する 衝突が起きたときに ① テーブルの空き欄を探す ② 外部にリストをつなげる
8
衝突回避 最適なハッシュ関数の利用 a b c d e \0 +99 +100 +101 1 2 3 97 +98
1 2 3 97 ×A +98 = 97A4+98A3+99A2+100A+101 ( A = 37 とする ) = mod 4(配列数) = 2
9
衝突時対策 同じ表内で空き欄を探す オープンアドレス指定法 1 2 3 4 5 6 7 8 9 10 11 12 7 ハッシュ値 = 1
ハッシュ値 = 1 1 2 3 4 5 6 7 8 9 10 11 12 データが入っている → データが入っている → 同じ表内で空き欄を探す 7
10
衝突時対策 外部にリストをつなげる 外部連鎖法(チェーン法) 1 2 3 4 5 6 7 8 9 10 11 12 1‘ 1‘
ハッシュ値 = 1 1 2 3 4 5 6 7 8 9 10 11 12 1‘ 1‘ ← データが入っている 外部にリストをつなげる
11
他の探索法 ① 逐次探索法 端から順にデータを比較しながら探索 ② 2分探索木
① 逐次探索法 端から順にデータを比較しながら探索 ② 2分探索木 ツリーの根(ルート)から探索を開始し下に向かう経路を、各節点(ノード) とのデータの比較から選択する
12
他の探索法 ① 逐次探索法 aaa bbb ddd eee ggg hhh jjj mmm ppp kkk aaa bbb ddd eee
① 逐次探索法 キー = kkk aaa bbb ddd eee ggg hhh jjj mmm ppp kkk aaa bbb ddd eee ggg hhh jjj 7 mmm ppp kkk kkk kkk
13
他の探索法 ② 2分探索木 ggg ddd mmm eee jjj ppp aaa bbb hhh kkk kkk キー = kkk
② 2分探索木 キー = kkk ( ggg < kkk) ggg ( mmm > kkk) ddd mmm ( iii < kkk) eee jjj ppp aaa ( kkk = kkk) bbb hhh kkk kkk
14
これまでのまとめ なぜハッシュ法は高速探索ができるのか? ハッシュ関数を用いた 対象データへの一意的なアプローチ
15
検証 本当にハッシュ探索法は速いのか? 他の探索法との比較 逐次探索法(リスト構造) < 条件 >
格納データ スペルチェック用文字列 格納データ数 20000件 探索データ数 200件×100回
16
検証 本当にハッシュ探索法は速いのか? テスト項目 Test 1 : 無作為に選択(200単語)
逐次探索 リスト構造 ハッシュ探索 リスト構造(チェーン法) ハッシュテーブルサイズ 449
17
検証結果 探索時間の比較 本当にハッシュ探索法は速かった テスト 1 テスト 2 逐次探索 147.7 242.7 ハッシュ法 0.22
0.28 単位 [s]
18
最後に ハッシュ法のアルゴリズムをより深く知ることで 実際にプログラムを組んでみることができた
動かしてみることで高速であるということを納得できた
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.