Knuth-Morris-Pratt（kmp）アルゴリズムは、線形時間にテキスト文字列のパターン文字列の発生を検索する文字列に一致するアルゴリズムです。弦。このアルゴリズムは、ドナルド・クヌースとヴォーン・プラットによって開発され、後にジェームズ・モリスによって修正されました。

KMPアルゴリズムの背後にある基本的なアイデアは、テキスト文字列の不必要なバックトラッキングを避けるために、既に一致しているパターン文字列に関する情報を使用することです。具体的には、アルゴリズムは部分的な一致テーブル（故障関数またはプレフィックス関数とも呼ばれる）を構築します。これは、パターンの各位置について、その位置で終了するサブストリングエンディングのプレフィックスでもある最長の適切な接尾辞の長さを示します。

このテーブルを使用すると、アルゴリズムは、既に一致している文字に基づいて、パターン文字列と一致できないテキスト文字列の特定の位置をスキップできます。パターン文字列の特定の位置でミスマッチが発生した場合、アルゴリズムは部分マッチテーブルの情報を使用して次の位置を決定して、パターンストリングの先頭までバックトラックする必要なく、パターンストリングの一致を開始します。。
The Knuth-Morris-Pratt (KMP) algorithm is a string matching algorithm that searches for occurrences of a pattern string in a text string in linear time, i.e., `O(n)`, where `n` is the length of the text string. The algorithm was developed by Donald Knuth and Vaughan Pratt, and later modified by James Morris.

The basic idea behind the KMP algorithm is to use the information about the pattern string that has already been matched to avoid unnecessary backtracking in the text string. Specifically, the algorithm builds a partial match table (also called failure function or prefix function), which indicates for each position in the pattern string the length of the longest proper suffix that is also a prefix of the substring ending at that position.

This table allows the algorithm to skip over certain positions in the text string that cannot possibly match the pattern string, based on the characters that have already been matched. If a mismatch occurs at a particular position in the pattern string, the algorithm uses the information in the partial match table to determine the next position to start matching the pattern string from, without having to backtrack all the way to the beginning of the pattern string.