Vysvetlite princíp fungovania algoritmu vyhľadávania podreťazca Knuth-Morris-Pratt.
sobes.tech AI
Odpoveď od AI
Algoritmus Knuth-Morris-Pratt (KMP) je navrhnutý na vyhľadávanie podreťazca v reťazci v lineárnom čase, pričom sa vyhýba opakovaným porovnaniam znakov.
Hlavná myšlienka je predbežne vypočítať pre podreťazec pole prefixových funkcií (alebo "π-pole"), ktoré ukazuje, koľko znakov sa zhoduje s začiatkom podreťazca pri neúspešnom porovnaní. To umožňuje pri neshode nespať na začiatok pôvodného reťazca, ale posunúť podreťazec o optimálny počet pozícií.
Príklad:
- Text: "ABABDABACDABABCABAB"
- Hľadaný podreťazec: "ABABCABAB"
Algoritmus najskôr vytvorí prefixovú funkciu pre podreťazec, potom prechádza text a porovnáva znaky. Pri neshode využíva prefixovú funkciu na určenie, od ktorého znaku podreťazca pokračovať v porovnávaní, bez začínania od začiatku.
Toto zabezpečuje zložitosť O(n + m), kde n je dĺžka textu, m je dĺžka podreťazca, a je efektívnejšie ako naivné vyhľadávanie.