データ構造とアルゴリズム

第十一回 (2014年12月5日)

文字列照合のアルゴリズム

http://www.sw.it.aoyama.ac.jp/2014/DA/lecture11.html

Martin J. Dürst

AGU

© 2009-14 Martin J. Dürst 青山学院大学

目次

 

前回の残り

 

前回のまとめ

 

体験のチャンス

 

文字列照合の概要

長い文書の中に短いパターンを発見

背景: 様々なプログラム言語の文字列照合アルゴリズム

...paternpattnetrnternapatternatnetnpttepneretanetpat...

 

文字列照合の状況

 

素朴な実装

 

Rabin-Karp のアルゴリズムの概要

 

ハッシュ関数の選択

 

ハッシュ関数の高速化

 

Rabin-Karp のアルゴリズムの実例

パターン: 081205

文書: 28498608120598743297

 (手作業の場合、九去法が便利)

Excell による Rabin-Karp のアルゴリズムの例: BRabinKarp.xls

Rabin-Karp のアルゴリズムの実装: Bstringmatch.rb

 

Knuth-Morris-Pratt のアルゴリズムの概要

 

Knuth-Morris-Pratt のアルゴリズムの詳細

 

Knuth-Morris-Pratt のアルゴリズムの計算量

 

Knuth-Morris-Pratt のアルゴリズムの事前計算

Knuth-Morris-Pratt のアルゴリズムの実装: Bstringmatch.rb

 

Boyer-Moore のアルゴリズムの概要

 

アイディアの詳細

パターンの移動に二つの「目安」を使用:

  1. パターンの内部比較
    (Knuth-Morris-Pratt の「逆方向版」)
  2. 不一致の文書の文字のパターン内の最も右の位置

どちらかシフトが大きい方を使用

 

Boyer-Moore のアルゴリズムの実例

 

 

 

Boyer-Moore のアルゴリズムの計算量

 

文字列照合と文字コード

 

文字コードごとのバイトパターン

 

来年度への展望

 

まとめ

宿題: