文字列検索のためのハッシュ関数使用とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 文字列検索のためのハッシュ関数使用の意味・解説 

文字列検索のためのハッシュ関数使用

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/04/10 17:28 UTC 版)

ラビン-カープ文字列検索アルゴリズム」の記事における「文字列検索のためのハッシュ関数使用」の解説

スキップ方法洗練させるではなくラビン-カープ法ではハッシュ関数使って現在見ているテキストパターンが同じかどうかチェック高速化する。ハッシュ関数は文字列を数値変換する関数であり、その数値を「ハッシュ値」と呼ぶ。例えば、"hello" のハッシュ値は 5 などとなる。ラビン-カープ法では、文字列等しいならハッシュ値等しという事実を利用する。従って、ここですべきことはサブ文字列ハッシュ値計算し、同じハッシュ値を持つサブ文字列を見つけることである。 しかし、これには2つ問題がある。第一に文字列様々なので、ハッシュ値を(16ビットとか32ビットとか)小さくしている限り、必ず同じハッシュ値を持つ異なった文字列出現する。これはつまり、ハッシュ値一致して文字列一致しない可能性があることを意味する。従って、文字列そのもの比較もしなければならず、文字列長くなればなるほど時間がかかることになる。幸いハッシュ関数が妥当であれば通常の入力に対してこのような状況は滅多に発生せず平均検索時間小さく保たれるアルゴリズムは以下のようになる: 1 function RabinKarp(string s[1..n], string sub[1..m]) 2 hsub := hash(sub[1..m]) 3 hs := hash(s[1..m]) 4 for i from 1 to n 5 if hs = hsub 6 if s[i..i+m-1] = sub 7 return i 8 hs := hash(s[i+1..i+m]) 9 return not found 2行目、3行目、6行目、8行目は、Ω(m)の時間がかかる。しかし、2行目と3行目は1度しか実行されず、6行目はハッシュ値一致したときだけ実行され何度も実行される性質のものではない。5行目は n 回実行されるが、定数時間しか要しない。従って問題となるのは8行目のみである。 もし単純にハッシュ値サブ文字列 s[i+1..i+m] から計算したら、Ω(m)の時間要し、これはループ繰り返しのたびに実行されるので、このアルゴリズムは Ω(mn) を要することになり、単純な検索アルゴリズム何ら変わりない。これを解決する技法は、変数 hs が既に s[i..i+m-1] のハッシュ値保持しているという点にある。これを使って次のハッシュ値定数時間計算できれば問題解決する。 ここでは、いわゆる「ローリングハッシュ」を使用する。ローリングハッシュはこのような場合のために設計され特殊なハッシュ関数である。単純な例として、文字列構成する全文字の値を加算するなどが考えられるその場合、次のハッシュ値計算する計算式は以下のようになり、定数時間実行可能である: s[i+1..i+m] = s[i..i+m-1] - s[i] + s[i+m] この単純な関数でも十分使えるが、6行目の実行回数増える可能性がある。それを低減させるには次節解説する洗練されたローリングハッシュ関数利用しなければならない。 運が悪い場合ハッシュ関数不適切場合、6行目はほとんど n回実行されることもある。6行目の実行には Ω(m) の時間がかかるので、アルゴリズム全体として最悪場合で Ω(mn) の時間要することになる。

※この「文字列検索のためのハッシュ関数使用」の解説は、「ラビン-カープ文字列検索アルゴリズム」の解説の一部です。
「文字列検索のためのハッシュ関数使用」を含む「ラビン-カープ文字列検索アルゴリズム」の記事については、「ラビン-カープ文字列検索アルゴリズム」の概要を参照ください。

ウィキペディア小見出し辞書の「文字列検索のためのハッシュ関数使用」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「文字列検索のためのハッシュ関数使用」の関連用語

文字列検索のためのハッシュ関数使用のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



文字列検索のためのハッシュ関数使用のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのラビン-カープ文字列検索アルゴリズム (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS