新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ          須田 哲生.

Slides:



Advertisements
Similar presentations
1 T HE U NIVERSITY OF T OKYO D EPARTMENT OF M ATHEMATICAL I NFORMATICS 数理情報工学演習第一C プログラミング演習 ( 第 6 回 ) 2014/05/19.
Advertisements

【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
基本情報技術概論 I 演習(第5回) 埼玉大学 理工学研究科 堀山 貴史
  スケジュール管理手法PERT-Time      解 説    “最早開始時間計算のアルゴリズム”
Generic programming と STL
2分探索.
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
2章 データ構造.
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
情報工学概論 (アルゴリズムとデータ構造)
【事例演習2】               2001年11月更新      「最短経路探索 (1)」           その1      解 説    “最短ルート探索のアルゴリズム”
アルゴリズムとデータ構造 補足資料13-4 「2分探索木の追加・削除(ダイジェスト)」
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
オペレーティングシステムJ/K 2004年11月4日
2009/11/20 探索アルゴリズム(2) 第8講: 平成21年11月20日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
エージェントを管理するボスの苦悩 問題 n人のエージェントを部下に持つボスがいる. エージェントは出張・帰還を頻繁に繰り返す.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
アルゴリズムとデータ構造 2011年6月20日
集合、辞書とハッシュ法 第8回 集合と辞書 ~ データ構造(4)~.
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
二分探索木によるサーチ.
データ構造とアルゴリズム論 第8章 再帰処理 平成15年12月2日 森田 彦.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
「ユーザー設定リスト」の作成と削除 ◎ 新しい「リスト」の作成法
型付きアセンブリ言語を用いた安全なカーネル拡張
ハッシュテーブル.
Cプログラミング演習 中間まとめ2.
ハッシュ表 データ構造とプログラミング(12)
アルゴリズムとデータ構造1 2005年7月26日
アルゴリズムとデータ構造1 2006年6月16日
アルゴリズムとデータ構造1 2005年7月15日
エクセル(6)の目次 「ユーザー設定リスト」の作成と削除 「入力規則」での「リスト」 ユーザー定義による表示形式
アルゴリズムとデータ構造 補足資料14-2 「ダイレクトチェイニング法」
第9回 優先度つき待ち行列,ヒープ,二分探索木
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとデータ構造1 2009年7月9日
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
実装編②HashTable,JavaAPI
15.cons と種々のデータ構造.
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2006年7月4日
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
コンパイラ 2012年10月29日
アルゴリズムとデータ構造 2011年6月16日
算法数理工学 第4回 定兼 邦彦.
オペレーティングシステムJ/K (管理のためのデータ構造)
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
情報工学概論 (アルゴリズムとデータ構造)
第11回放送授業.
平面走査法を使った 一般線分の 交点列挙アルゴリズム
ヒープソート.
変数を一度にたくさん宣言するよ! それだけじゃないよ!
ネット時代のセキュリティ3(暗号化) 2SK 情報機器工学.
アルゴリズムとデータ構造 2013年6月20日
データ構造とアルゴリズム論 第9章 連結リスト
アルゴリズムとデータ構造 2012年6月21日
アルゴリズムとデータ構造1 2005年7月12日
アルゴリズムとデータ構造1 2007年7月6日
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ          須田 哲生

なぜハッシュ法? 高速探索法と言われるハッシュ法だが何故高速なのか? 他の探索法と何が違うのか? → アルゴリズムの理解が必要 →  アルゴリズムの理解が必要 本当に高速なのか? →  検証を行う

目的 ① 他の探索法との比較を行い    ハッシュ法の高速探索の理由を探る ② コーディングを行い    ハッシュ法の性能を検証する

ハッシュ法とは 格納されたデータの個数によらず 探索・削除・挿入などの操作を一定時間で行う ことができる高速な探索アルゴリズムである

ハッシュ法の特徴 キーから計算によりデータの格納場所を決定 (ハッシュ関数の利用) <文字列データ> 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 (ハッシュ表)

ハッシュ法の特徴 異なるキーでもデータ格納場所が同じになることがある (衝突の発生) 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

衝突対策 衝突が起こらないように ① テーブルサイズを大きくする ② ハッシュ関数を工夫する 衝突が起きたときに ① テーブルの空き欄を探す ① テーブルサイズを大きくする ② ハッシュ関数を工夫する 衝突が起きたときに ① テーブルの空き欄を探す ② 外部にリストをつなげる

衝突回避 最適なハッシュ関数の利用 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 とする ) = 186896943 mod 4(配列数) = 2 186896943

衝突時対策 同じ表内で空き欄を探す オープンアドレス指定法 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

衝突時対策 外部にリストをつなげる 外部連鎖法(チェーン法) 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‘ ← データが入っている 外部にリストをつなげる

他の探索法 ① 逐次探索法 端から順にデータを比較しながら探索 ② 2分探索木 ① 逐次探索法 端から順にデータを比較しながら探索 ② 2分探索木 ツリーの根(ルート)から探索を開始し下に向かう経路を、各節点(ノード)  とのデータの比較から選択する

他の探索法 ① 逐次探索法 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

他の探索法 ② 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

これまでのまとめ なぜハッシュ法は高速探索ができるのか? ハッシュ関数を用いた 対象データへの一意的なアプローチ

検証 本当にハッシュ探索法は速いのか? 他の探索法との比較 逐次探索法(リスト構造) < 条件 > 格納データ    スペルチェック用文字列 格納データ数      20000件 探索データ数    200件×100回

検証 本当にハッシュ探索法は速いのか? テスト項目 Test 1 : 無作為に選択(200単語) 逐次探索           リスト構造 ハッシュ探索      リスト構造(チェーン法) ハッシュテーブルサイズ    449

検証結果 探索時間の比較 本当にハッシュ探索法は速かった テスト 1 テスト 2 逐次探索 147.7 242.7 ハッシュ法 0.22 0.28 単位 [s]

最後に ハッシュ法のアルゴリズムをより深く知ることで 実際にプログラムを組んでみることができた 動かしてみることで高速であるということを納得できた