Sobes.tech
Junior — Middle

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.