文字列探索アルゴリズムの一種で、発明者3名の名前を冠しています。このアルゴリズムでは、複数回文字への探索(比較)をしないようにあらかじめ、部分マッチ用の表を作成しておく必要があります。この前処理や複雑な処理のせいで単純な力まかせ探索に比べ、余計なオーバーヘッドが発生し、実用上力まかせ探索より処理速度が遅くなったりもします。探索する場合のものです。まで探索(比較)しているのに、マッチしないので3文字目からやり直しています。この比較位置の後戻りが無駄な処理として効率化できるということで、理論上はより高速に動作します。A本来上記の例では3回目の探索で、探索対象文字の7文字目まで比較したのだから、その情報を持って、7文字目からパターン文字との比較を再開すべきです。4回目以降の探索でも同様です。探索対象文字列の比較位置を後戻りしないように工夫すると、次の表のような比較順序になります。A一度進めた探索対象文字列の位置が後戻りしないため効率的な探索を可能にしているのが見て取れます。探索を再開しています。比較位置はそのままにします。対してパターンの比較位置を何文字目から比較するかで無駄な処理を省きます。探索(比較)から処理を再開することができます。部分として考えることができるからです。探索(比較)から処理を再開できるのです。探索開始前に、パターン文字列において不一致になった文字(位置)ごとに、パターン文字の比較再開位置(ずらし位置)を保持した対照表を用意しなければなりません。これをずらし表と呼ぶことにします。ずらし表ずらし表の作成には、パターン文字列に対してパターン文字列自身を比較することで求まります。ついて2文字目から自身の文字列と比較していきます。一致しない時点で何文字一致していたかが、ずらし位置です。1文字目は当然ずらすので0とします。パターン文字列との比較時点で直前までに何文字一致していたかがずらす数になります。表の最終行の数がそれです。まで戻り探索(比較)を再開します。上の比較順序の表と見比べてその意味を理解する必要があります。パターン文字列の文字数を越えない条件でループします。探索対象文字列i文字目とパターン文字列p文字目を比較します。