Sobes.tech
Junior — Middle

Обяснете принципа на работа на алгоритъма за търсене на поднизове на Кнут-Морис-Прат.

sobes.tech AI

Отговор от AI

Алгоритъмът на Кнут-Морис-Прат (КМП) е предназначен за търсене на подниз в низ с линейно време, като избягва повторното сравняване на символи.

Основната идея е предварително да се изчисли за подниза масив от префикс функции (или "π-масив"), който показва колко символа съвпадат с началото на подниза при неуспешно сравнение. Това позволява при несъвпадение да не се връщаме назад в оригиналния низ, а да преместим подниза с оптималното количество позиции.

Пример:

  • Текст: "ABABDABACDABABCABAB"
  • Търсим подниз: "ABABCABAB"

Алгоритъмът първо изгражда префикс-функцията за подниза, след което преминава през текста, сравнявайки символите. При несъвпадение използва префикс-функцията, за да определи от кой символ на подниза да продължи сравнението, без да започва отначало.

Това осигурява сложност O(n + m), където n е дължината на текста, m е дължината на подниза, което е по-ефективно от наивното търсене.