Алгоритм Кнута-Морриса-Пратта (КМП-алгоритм) работает следующим образом: ru.wikipedia.org
- Даны образец (строка) S и строка T. ru.wikipedia.org Требуется определить индекс, начиная с которого образец S содержится в строке T. ru.wikipedia.org Если S не содержится в T — вернуть индекс, который не может быть интерпретирован как позиция в строке (например, отрицательное число). ru.wikipedia.org
- Идея алгоритма состоит в том, чтобы не прикладывать подстроку к строке со сдвигом всего в один символ, а максимально увеличить это расстояние, сократив таким образом количество сравнений. web.snauka.ru
- Первоначально необходимо найти все префиксы строки W, равные её суффиксам, то есть найти грани текста. web.snauka.ru Для каждой позиции j в слове будет своя величина грани, и величина граней не зависит от подстроки, а зависит только от строки W, поэтому необходимо предварительно вычислить массив (коллекцию) значений граней подстроки W. web.snauka.ru
- Перед началом работы алгоритма Кнута-Морриса-Пратта необходимо вычислить массив граней подстроки W, а затем прикладывать подстроку к строке со сдвигом, где — текущая позиция в слове, — величина грани слова в позиции. web.snauka.ru
Время работы алгоритма линейно зависит от объёма входных данных, то есть разработать асимптотически более эффективный алгоритм невозможно. ru.wikipedia.org