まとめアルゴリズムTweet今回、多くの要素を持ち、必ずしもソートされていないコレクションに対して特定の値を探す際に効果的なHash-Basedサーチアルゴリズムについてまとめます。日本語ではハッシュ法による探索アルゴリズムと呼ばれることもあります。Hash-Basedサーチアルゴリズム一般的によく知られたアプローチの一つは、hash関数をつかって、検索対象のコレクションの要素内の特徴を使ってハッシュテーブルのインデックスに変換することです。ハッシュ法によるサーチは、シーケンシャルサーチやバイナリサーチよりも、average-caseでのパフォーマンスがより良いものとなっています。Hash-Basedサーチにおいて、n個の要素を持つ集合Cは最初にHと呼ばれるハッシュテーブルと、配列構造を持つb個のビンにロードされる。後の検索においてパフォーマンスが向上する。ハッシュ関数のコンセプトはこのパフォーマンス向上を可能にする。ハッシュ関数は各要素Ciを整数値hiに変換する決定関数です。H[hi]のビンに格納される。hash(Cj)となることを保証します。これは、集合Cの中の要素のうち、ハッシュ値が同じ場合がありうることを意味します。これはハッシュ衝突として知られ、ハッシュテーブルはこの状況に対応する方法が要求されます。listを保持し、すべてのハッシュ衝突したデータをハッシュテーブルに格納する手法があります。listの要素数は非常に少ないため、探索時間は短くすみます。linked-listの振る舞いを書いているUを取りうるハッシュ値の集合とする。Uに属するハッシュテーブルHはb個のビンを持っている。各ビンは集合Cの中からn個の要素を持つ。falseendHash-Basedサーチの2つの問題Hash-Basedサーチを実装するにあたって、主要な問題は2つあります。ハッシュ値衝突のハンドリング綿密に設計されていないハッシュ関数は、ハッシュキーをハッシュテーブルに分配するロジックが良くないため、ハッシュテーブルへの値の格納において、偏りがでてしまいます。特定のビンに多くの値が格納されるので、ハッシュ衝突が起きる割合が多くなります。searchにおいては、サーチ対象のコレクションCは必ずしもソートされる必要がない。Cがソートされていた場合、Cの各要素をハッシュテーブルHに格納するハッシュ関数は、H内部で元のソート情報を保持することがないので意味がないHash-Based-Searchにおける入力は、既に作成済みのハッシュテーブルHと、サーチ対象の要素tです。hash(t)として、H[h]のビンに含まれている場合trueを返す。17.70)の探索が必要です。Searchの場合比較回数は、コレクションのサイズというよりも、ハッシュテーブルの各ビンが保持するlinked-listの長さに依存します。ハッシュ化は何十年にも渡って研究されてきているが、その多くの手法はサーチ以外の目的に対しても使うことができる。特別なハッシュ関数は暗号化に使われたりする。サーチにおいては、ハッシュ関数はハッシュテーブルへの値のばらつきが均一であることと、計算時間が短いものが良いです。ハッシュ関数の実装については後日まとめます。config.'月別アーカイブ参加グループプログラミングテクノロジーはてなブログをはじめよう!kaktsさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。