Обяснете принципа на работа на алгоритъма за търсене на поднизове на Кнут-Морис-Прат.
sobes.tech AI
Отговор от AI
Алгоритъмът на Кнут-Морис-Прат (КМП) е предназначен за търсене на подниз в низ с линейно време, като избягва повторното сравняване на символи.
Основната идея е предварително да се изчисли за подниза масив от префикс функции (или "π-масив"), който показва колко символа съвпадат с началото на подниза при неуспешно сравнение. Това позволява при несъвпадение да не се връщаме назад в оригиналния низ, а да преместим подниза с оптималното количество позиции.
Пример:
- Текст: "ABABDABACDABABCABAB"
- Търсим подниз: "ABABCABAB"
Алгоритъмът първо изгражда префикс-функцията за подниза, след което преминава през текста, сравнявайки символите. При несъвпадение използва префикс-функцията, за да определи от кой символ на подниза да продължи сравнението, без да започва отначало.
Това осигурява сложност O(n + m), където n е дължината на текста, m е дължината на подниза, което е по-ефективно от наивното търсене.