00:00

String Matching Algorithm: Brute-Force Approach Explained

Brute-force string matching algorithm involves creating substrings of the text and comparing them with the pattern string sequentially until a full match is found. If a mismatch occurs, the algorithm resets and moves to the next element in the array for comparison. This method outlines the step-by-step process and the number of comparisons required for matching patterns in text strings.

casenave
Download Presentation

String Matching Algorithm: Brute-Force Approach Explained

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 文字列の照合 文字列の照合

  2. 力任せの探索法とは 力任せの探索法とは ① ① 力任せの探索 力任せの探索 ❶ ❶ テキスト文字列の中に テキスト文字列の中に ❷ ❷ パターン文字列と同じ長さの部分文字列をつくり、 パターン文字列と同じ長さの部分文字列をつくり、 ❸ ❸ パターン文字列の対応する文字と順次比較し、 パターン文字列の対応する文字と順次比較し、 ❹ ❹ 全文字が一致すれば探索成功である。 全文字が一致すれば探索成功である。 ❺ ❺ 比較途中で不一致になると、 比較途中で不一致になると、 配列の次の要素に移動して、 配列の次の要素に移動して、 ❻ ❻ 新しい部分文字列を作りパターン文字列と比較する。 新しい部分文字列を作りパターン文字列と比較する。 ② ② テキスト文字列のすべての要素と比較して テキスト文字列のすべての要素と比較して 不一致ならば探索不成功となる。 不一致ならば探索不成功となる。

  3. 最初の比較 最初の比較 Lを先頭に部分文字列をつくる テキスト文字列 L D L E A S U B 対応する要素を比較し不一致に なればリセットする L E A パターン文字列

  4. 2回目の比較 2回目の比較 Dを先頭に部分文字列をつくる テキスト文字列 L D L E A S U B 対応する要素を比較し不一致に なればリセットする L E A パターン文字列

  5. 3回目の比較 3回目の比較( (探索成功 探索成功) ) Lを先頭に部分文字列をつくる テキスト文字列 L D L E A S U B 対応する要素を比較し最後まで 一致すれば探索成功 L E A パターン文字列

  6. 力任せの探索法の手順 力任せの探索法の手順 ① ① ポインタの初期化 ポインタの初期化 ❶ ❶ 一つのポインタiをテキスト文字列 一つのポインタiをテキスト文字列( (長さn ❷ ❷ 一つのポインタjをパターン文字列上に置く。 一つのポインタjをパターン文字列上に置く。 ❸ ❸ iおよびjを1で初期化する。 iおよびjを1で初期化する。 長さn) )上に、 上に、 ② ② テキスト文字列上に部分文字列を作成 テキスト文字列上に部分文字列を作成 ❶ ❶ テキスト上にポインタiを先頭に テキスト上にポインタiを先頭に ❷ ❷ 長さm(m<n)の部分文字列を作成する。 長さm(m<n)の部分文字列を作成する。 ❸ ❸ 部分文字列の要素の添字をi+j-1で表す。 部分文字列の要素の添字をi+j-1で表す。

  7. ③ 添字jを操作して文字列を比較する。 添字jを操作して文字列を比較する。 ❶ ❶ テキスト上の部分文字列と テキスト上の部分文字列と パターン文字列の対応する要素を比較する。 パターン文字列の対応する要素を比較する。 ❷ ❷ 対応する要素の内容が一致するとき、 対応する要素の内容が一致するとき、 jのインクリメントを行う。 jのインクリメントを行う。 ❸ ❸ パターンの長さに等しい一致が生じると パターンの長さに等しい一致が生じると 照合が得られる。 照合が得られる。 ❹ ❹ 対応する要素の内容が 対応する要素の内容が 比較途中で不一致になると④に移る。 比較途中で不一致になると④に移る。

  8. ④ 比較途中で不一致になるか 比較途中で不一致になるか または照合が得られた場合、 または照合が得られた場合、 ❶ ❶ パターンの添字jをリセットし、 パターンの添字jをリセットし、 ❷ ❷ テキスト文字列上のポインタiを テキスト文字列上のポインタiを インクリメントする。 インクリメントする。 ❸ ❸ ②に戻る。 ②に戻る。 ⑤ ⑤ iがテキスト上のn-m+1の要素を超えると iがテキスト上のn-m+1の要素を超えると 文字列の探索を終了する。 文字列の探索を終了する。

  9. 力任せの探索法の比較回数 力任せの探索法の比較回数 ① ① テキスト長N、パターン長Mとすると、 テキスト長N、パターン長Mとすると、 最悪の比較回数は、次の式で求まる。 最悪の比較回数は、次の式で求まる。 最悪の比較回数= 最悪の比較回数=( (N-M+1 N-M+1) )× ×M M ② ② テキスト長Nの値が、パターン長Mの値に比べて、 テキスト長Nの値が、パターン長Mの値に比べて、 大きい場合はNMとなる。 大きい場合はNMとなる。

  10. ボイヤ・ムーアの文字列探索法 ボイヤ・ムーアの文字列探索法 ① ① ボイヤ・ムーア ボイヤ・ムーア ❶ ❶ パターンをテキストと照合させる時に パターンをテキストと照合させる時に 右から左へポインタを動かす走査を取り入れる 右から左へポインタを動かす走査を取り入れる ❷ ❷ かなり速い文字列探索法を開発することができる。 かなり速い文字列探索法を開発することができる。 ② ② パターンだけでなく不一致を生じた パターンだけでなく不一致を生じた テキスト文字も考慮してスキップの文字数を決定する。 テキスト文字も考慮してスキップの文字数を決定する。 ③ ③ スキップの文字数は、 スキップの文字数は、 テキストの各要素T テキストの各要素T( (i i) )に対して、 移動距離として、配列d 移動距離として、配列d( (T T( (i i)) ))に設定する。 に対して、 に設定する。

  11. ボイヤ・ムーアの比較回数 ボイヤ・ムーアの比較回数 ① ① ボイヤ・ムーアの文字列探索における ボイヤ・ムーアの文字列探索における 文字の比較回数の上限はM+Nに比例する。 文字の比較回数の上限はM+Nに比例する。 ② ② テキスト文字列の文字の種類が テキスト文字列の文字の種類が パターンの長さに比べて十分多ければ、 パターンの長さに比べて十分多ければ、 比較回数はN/M回である。 比較回数はN/M回である。 ③ ③ 平均的な比較回数はN/Mとなる。 平均的な比較回数はN/Mとなる。

  12. ④ パターンの中に現れる文字は、 パターンの中に現れる文字は、 アルファベットの一部にすぎないことが多い。 アルファベットの一部にすぎないことが多い。 ⑤ ⑤ このような場合、比較が行われるごとに このような場合、比較が行われるごとに M文字スキップされるようになる。 M文字スキップされるようになる。 ⑥ ⑥ このアルゴリズムは最悪の場合は線形となる。 このアルゴリズムは最悪の場合は線形となる。

  13. 移動距離の計算要領 移動距離の計算要領 ① ① 部分文字列の後方から 部分文字列の後方から テキストとパターンを比較する場合、 テキストとパターンを比較する場合、 ❶ ❶ テキストの最初の比較文字が テキストの最初の比較文字が パターンの比較の最後にある場合、 パターンの比較の最後にある場合、 ❷ ❷ パターンの中に存在しない場合、 パターンの中に存在しない場合、 ❸ ❸ パターン長mだけ、 パターン長mだけ、 部分文字列の先頭位置を移動させる。 部分文字列の先頭位置を移動させる。

  14. ② テキストの最初の比較文字が テキストの最初の比較文字が パターンの中にある場合、 パターンの中にある場合、 ❶ ❶ 二つの文字の移動距離を求め、 二つの文字の移動距離を求め、 ❷ ❷ 移動距離分だけ 移動距離分だけ 部分文字列の先頭位置を移動する。 部分文字列の先頭位置を移動する。 ③ ③ テキストの最初の比較文字が テキストの最初の比較文字が パターンの中に複数個ある場合、 パターンの中に複数個ある場合、 ❶ ❶ 最後尾の文字までの移動距離を使用する。 最後尾の文字までの移動距離を使用する。

  15. 移動距離計算例1 移動距離計算例1 ① ① 移動距離計算例1の図 移動距離計算例1の図 最初の比較文字 テキスト文字列 L D L E A S U B テキストの部分文字列の最初の比較文 字Lとパターンの中のLの距離2だけ 部分文字列の先頭を移動する L E A パターン文字列

  16. ② 移動距離計算例1の説明 移動距離計算例1の説明 ❶ ❶ テキストの部分文字列LDLと テキストの部分文字列LDLと パターン文字列LEAを後方から比較する。 パターン文字列LEAを後方から比較する。 ❷ ❷ 最初の比較文字Lは、 最初の比較文字Lは、 パターンの先頭のLと一致する。 パターンの先頭のLと一致する。 ❸ ❸ 計算要領の②に相当する。 計算要領の②に相当する。 ❹ ❹ パターン文字列の移動距離は2となる。 パターン文字列の移動距離は2となる。 ❺ ❺ 次の部分文字列はLEAとなる。一致する。 次の部分文字列はLEAとなる。一致する。

  17. 移動距離計算例2 移動距離計算例2 ① ① 移動距離計算例2の図 移動距離計算例2の図 最初の比較文字 テキスト文字列 L D L E A S U B テキストの部分文字列の後方からパ ターンの対応する要素を比較しすべ てが一致すれば探索成功 L E A パターン文字列

  18. ② 移動距離計算例2の説明 移動距離計算例2の説明 ❶ ❶ 次のテキストの部分文字列はEASである。 次のテキストの部分文字列はEASである。 ❷ ❷ テキストの最初の比較文字はSとなる。 テキストの最初の比較文字はSとなる。 ❸ ❸ Sはパターンの中に存在しないため、 Sはパターンの中に存在しないため、 ❹ ❹ 部分文字列の先頭位置は3要素分移動し、 部分文字列の先頭位置は3要素分移動し、 ❺ ❺ テキスト文字列の範囲外となる。 テキスト文字列の範囲外となる。 ❻ ❻ この場合の移動距離は3となる。 この場合の移動距離は3となる。

  19. 文字列探索の要領 文字列探索の要領 ① ① テキスト文字列の テキスト文字列の 最初の比較文字は先頭からM番目とする。 最初の比較文字は先頭からM番目とする。 ② ② パターン文字列の最初の比較文字は パターン文字列の最初の比較文字は 最後のM番目の文字からはじめる。 最後のM番目の文字からはじめる。 ③ ③ テキストの部分文字列の要素と テキストの部分文字列の要素と パターン文字列の要素とが一致する間、 パターン文字列の要素とが一致する間、 iおよびjのディクリメントを行い比較対象を変える。 iおよびjのディクリメントを行い比較対象を変える。

  20. ④ T T( (i i)≠ )≠P P( (j j) )となると、 となると、 照合を中断して、照合ループから脱出する。 照合を中断して、照合ループから脱出する。 ⑤ ⑤ 照合ループを脱出後、 照合ループを脱出後、 テキストの文字列の位置を テキストの文字列の位置を 最初のMの位置に戻す。 最初のMの位置に戻す。 ⑥ ⑥ 照合開始時のテキストの 照合開始時のテキストの 文字列の要素T 文字列の要素T( (i i) )に対する移動距離を求める。 に対する移動距離を求める。 ⑦ ⑦ 次の照合の開始点をi+d 次の照合の開始点をi+d( (T T( (i i)) ))を求める。 を求める。

  21. ⑧ 照合を繰り返し、j 照合を繰り返し、j≦ ≦0となると、 0となると、 ❶ ❶ 照合ループから脱出し、1 照合ループから脱出し、1→ ❷ ❷ 更にi+1 更にi+1→ →iを求めて、 iを求めて、 ❸ ❸ パターン文字列と一致する パターン文字列と一致する →found foundとして、 として、 テキスト上の位置を決め、 テキスト上の位置を決め、 ❹ ❹ 処理を終了する 処理を終了する ⑨ ⑨ ⑦で新しく求めた開始点を起点として、 ⑦で新しく求めた開始点を起点として、 ③~⑧の操作を繰り返す。 ③~⑧の操作を繰り返す。 ⑩ ⑩ ③~⑨の操作を繰り返して、 ③~⑨の操作を繰り返して、 i>Nとなると、照合不成立で処理を終了する。 i>Nとなると、照合不成立で処理を終了する。

  22. パターン長5 パターン長5( (STING STING) )の場合の具体例 の場合の具体例

  23. パターンSTINGの操作要領 パターンSTINGの操作要領 ① ① まず、最初に まず、最初に テキストの左端の5文字と テキストの左端の5文字と パターンの5文字を比較する。 パターンの5文字を比較する。 A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン

  24. ② パターンの右端の文字と パターンの右端の文字と それに対応するテキスト上の文字を比較し、 それに対応するテキスト上の文字を比較し、 一致すると、⑪の操作に移る。 一致すると、⑪の操作に移る。 A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン

  25. ③ 一致しなければ、 一致しなければ、 テキストとパターンの比較は テキストとパターンの比較は パターンの右端の文字Gに対応する パターンの右端の文字Gに対応する テキスト上の文字Rと テキスト上の文字Rと パターンの各文字を比較する。 パターンの各文字を比較する。 ④ ④ テキスト上の文字Rが テキスト上の文字Rが パターンの中に現れない文字であることがわかると、 パターンの中に現れない文字であることがわかると、 パターン全体を5文字右に移動する。 パターン全体を5文字右に移動する。 A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン

  26. ⑤ 次に、テキストの10番目の文字Sと 次に、テキストの10番目の文字Sと パターンの文字を比較する。 パターンの文字を比較する。 文字Sとパターンの右端の文字が不一致で 文字Sとパターンの右端の文字が不一致で パターンの先頭の文字Sが一致する。 パターンの先頭の文字Sが一致する。 A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン 4文字右に移動する前 4文字右に移動する前

  27. ⑥ そこで、テキストの文字SとパターンのSが一致するまで そこで、テキストの文字SとパターンのSが一致するまで パターンの文字列全体を パターンの文字列全体を 右に4文字移動させる。 右に4文字移動させる。 A STRING SEARCHING EXAMPLE CONSISTING STING テキスト パターン 4文字右に移動させた結果 4文字右に移動させた結果

  28. ⑦ 次に、テキスト上文字Cと 次に、テキスト上文字Cと パターン文字列を比較する。 パターン文字列を比較する。 ❶ ❶ テキスト上文字Cがパターンの中に テキスト上文字Cがパターンの中に 存在しないことが分かる。 存在しないことが分かる。 ❷ ❷ そこで、パターン文字列を右に5文字分移動させる。 そこで、パターン文字列を右に5文字分移動させる。 ❸ ❸ 以下、同じことを繰り返す。 以下、同じことを繰り返す。 A STRING SEARCHING EXAMPLE CONSISTING STING

  29. ⑧ 同様の移動を3回行うと、 同様の移動を3回行うと、 CONSISTINGのTに到着する。 CONSISTINGのTに到着する。 A STRING SEARCHING EXAMPLE CONSISTING STING A STRING SEARCHING EXAMPLE CONSISTING STING A STRING SEARCHING EXAMPLE CONSISTING STING

  30. ⑨ このテキスト上の文字Tが このテキスト上の文字Tが ❶ ❶ パターンの右端の文字と不一致であるが、 パターンの右端の文字と不一致であるが、 パターンの中に存在するため、 パターンの中に存在するため、 ❷ ❷ パターン文字列のTが パターン文字列のTが テキスト上の文字Tと一致するまで テキスト上の文字Tと一致するまで パターンを右に移動させる。 パターンを右に移動させる。 A STRING SEARCHING EXAMPLE CONSISTING STING

  31. ⑩ テキスト上の文字Gが テキスト上の文字Gが パターンの右端の文字Gと一致する。 パターンの右端の文字Gと一致する。 ⑪ ⑪ テキスト上の文字と テキスト上の文字と パターン上の右端の文字が一致すると、 パターン上の右端の文字が一致すると、 ❶ ❶ それぞれの文字列の比較対象文字を それぞれの文字列の比較対象文字を ❷ ❷ 一つ前の文字に移動し、 一つ前の文字に移動し、 ❸ ❸ 二つの文字の比較を繰り返す。 二つの文字の比較を繰り返す。 ⑫ ⑫ テキストの文字列とパターンの文字列が テキストの文字列とパターンの文字列が 完全に一致すると、探索成功になる。 完全に一致すると、探索成功になる。

  32. ⑬ テキスト文字列と テキスト文字列と パターン文字列の不一致が途中で発生すると、 パターン文字列の不一致が途中で発生すると、 ❶ ❶ パターン文字列の右端の文字に対応する パターン文字列の右端の文字に対応する テキスト上の文字と同じ文字が テキスト上の文字と同じ文字が パターン上にあれば、 パターン上にあれば、 ❷の処理を行う。 パターン上になければ、 パターン上になければ、 ❸の処理を行う。 ❷ ❷ 二つの文字が一致するまで、 二つの文字が一致するまで、 パターン文字列を右に移動させる。 パターン文字列を右に移動させる。 ❸ ❸ パターン文字列の長さ分だけ パターン文字列の長さ分だけ パターン文字列を右に移動させる。 パターン文字列を右に移動させる。 ❷の処理を行う。 ❸の処理を行う。

  33. 特殊なパターン文字列の照合1 特殊なパターン文字列の照合1 テキスト文字列 テキスト文字列 AABAAABAAAAB AABAAABAAAAB パターン文字列 パターン文字列 AAAA AAAA テキスト文字列がAABAAABAAAAB、パターン文字列が4 テキスト文字列がAABAAABAAAAB、パターン文字列が4 文字AAAAでできている場合の処理手順について考える。 文字AAAAでできている場合の処理手順について考える。

  34. ① テキスト文字列の テキスト文字列の 最初の4文字とパターン文字列を比較する。 最初の4文字とパターン文字列を比較する。 テキスト文字列 テキスト文字列 AABAAABAAAAB AABAAABAAAAB パターン文字列 パターン文字列 AAAA AAAA ② ② テキスト文字列の3文字目で不一致になり、 テキスト文字列の3文字目で不一致になり、 この間の比較は無意味である。 この間の比較は無意味である。 ③ ③ パターン文字列の先頭を パターン文字列の先頭を テキストの文字列の4番目まで移動できる。 テキストの文字列の4番目まで移動できる。 テキスト文字列 テキスト文字列 AABAAABAAAAB AABAAABAAAAB パターン文字列 パターン文字列 AAAA AAAA

  35. ④ テキスト文字列の テキスト文字列の 7番目で不一致になり、 7番目で不一致になり、 それまでの比較は無意味となる。 それまでの比較は無意味となる。 テキスト文字列 テキスト文字列 AABAAABAAAAB AABAAABAAAAB パターン文字列 パターン文字列 AAAA AAAA ⑤ ⑤ パターン文字列が同じ文字列の場合、 パターン文字列が同じ文字列の場合、 途中で不一致になると、 途中で不一致になると、 テキスト文字列の不一致になった テキスト文字列の不一致になった 次の文字までパターン文字列の先頭を 次の文字までパターン文字列の先頭を 移動させることができる。 移動させることができる。

  36. 特殊なパターン文字列の照合2 特殊なパターン文字列の照合2 テキスト文字列 テキスト文字列 AABAAABAAAAB AABAAABAAAAB パターン文字列 パターン文字列 AABB AABB パターン文字列がAABBの場合について考える。 パターン文字列がAABBの場合について考える。

  37. ① パターン文字列の移動は次のようになる。 パターン文字列の移動は次のようになる。 テキスト文字列 テキスト文字列 AABAAABAABB AABAAABAABB パターン文字列 パターン文字列 AABB AABB AABB AABB AABB AABB AABB AABB ② ② 不一致になったパターンの文字が、 不一致になったパターンの文字が、 パターン文字列の先頭文字と異なる場合、 パターン文字列の先頭文字と異なる場合、 テキスト文字列の不一致になった位置まで、 テキスト文字列の不一致になった位置まで、 パターン文字列の先頭を移動させることができる。 パターン文字列の先頭を移動させることができる。

More Related