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

第十一回 (2013年12月13日)

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

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

Martin J. Dürst

AGU

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

目次

これからの予定

前回の残り

前回のまとめ

文字列照合の概要

長い文書の中に短いパターンを見つける

文字列照合の状況

素朴な実装

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 のアルゴリズムの計算量

文字列照合と文字コード

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

来年度への展望

まとめ

宿題: