3
2016/11/17 1 データ構造とアルゴリズム (第10回) ー文字列照合(KMP法、BM法)ー 文字列照合 text中のpatの位置(複数可)を求める。 単純照合法 jはtext 中の照合位置 ipat 中の照合位置 ntext の長さ、 mpat の長さ 単純照合法の無駄 単純照合法の無駄: 常に大きくスキップできる訳ではない KMPtext中のk番目の文字で、pati番目の文字との比較に失敗した時、 textk` 番目と、patnext[i] 番目の文字との比較から再開する。 next[i]

データ構造とアルゴリズム (第10回)vrl.sys.wakayama-u.ac.jp/~twada/DA2016/var/uploads/00001/DA10Handout.pdf · ー文字列照合(KMP法、BM法)ー 文字列照合

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: データ構造とアルゴリズム (第10回)vrl.sys.wakayama-u.ac.jp/~twada/DA2016/var/uploads/00001/DA10Handout.pdf · ー文字列照合(KMP法、BM法)ー 文字列照合

2016/11/17

1

データ構造とアルゴリズム(第10回)

ー文字列照合(KMP法、BM法)ー

文字列照合

text中のpatの位置(複数可)を求める。

単純照合法 jはtext中の照合位置iはpat中の照合位置nはtextの長さ、mはpatの長さ

単純照合法の無駄

単純照合法の無駄:常に大きくスキップできる訳ではない

KMP法text中のk番目の文字で、patのi番目の文字との比較に失敗した時、textのk`番目と、patのnext[i]番目の文字との比較から再開する。

next[i]

Page 2: データ構造とアルゴリズム (第10回)vrl.sys.wakayama-u.ac.jp/~twada/DA2016/var/uploads/00001/DA10Handout.pdf · ー文字列照合(KMP法、BM法)ー 文字列照合

2016/11/17

2

next[i]の例ABABBA0 1 0 1 3 0

0:共通文字列は存在しない→空であると想定しても,その直後の文字が同じなので矛盾する

1:共通文字列は存在しない→空であると想定すると,その直後の文字と先頭文字が異なるため矛盾しない

3:共通文字列はAB→直後の文字もAとBで不一致

next[i]の例(続き)ABCDABD0 1 1 1 0 1 3

0:共通文字列は存在しない→空であると想定しても,その直後の文字が同じなので矛盾する

1:共通文字列は存在しない→空であると想定すると,その直後の文字と先頭文字が異なるため矛盾しない

3:共通文字列はAB→直後の文字もAとBで不一致

KMP法:アルゴリズム BM法:アイデア1パターンの末尾から照合し,照合に失敗したテキストの側の文字種が、パターン中の照合に失敗した位置よりも左にあるかどうかを探す。

BM法:アイデア1の実現法 BM法:アイデア2

k+m-i

Page 3: データ構造とアルゴリズム (第10回)vrl.sys.wakayama-u.ac.jp/~twada/DA2016/var/uploads/00001/DA10Handout.pdf · ー文字列照合(KMP法、BM法)ー 文字列照合

2016/11/17

3

BM法:shift(j) BM法:アルゴリズム