Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Algorytmy
Algorytmyhard

KMP vs naiwne szukanie wzorca — na czym polega idea KMP?

Tagi
#kmp#string-search#pattern-matching
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

KMP liczy funkcję prefiksową (LPS), dzięki czemu przy niedopasowaniu przesuwa wzorzec bez ponownego sprawdzania znaków. To daje O(n+m) zamiast O(n·m).

Odpowiedź zaawansowana

Głębiej

KMP unika powtarzania porównań, wykorzystując informację o wzorcu.

Idea:

  • Precomputujesz LPS (najdłuższy właściwy prefiks będący jednocześnie sufiksem) dla prefiksów wzorca.
  • Przy mismatch na indeksie j w wzorcu przeskakujesz j na LPS[j-1] zamiast wracać do 0.

Dzięki temu indeks tekstu nie cofa się, więc łączna złożoność to O(n+m).

Typowe pułapki

  • Off-by-one przy budowie LPS.
  • Po znalezieniu dopasowania ustaw j = LPS[j-1], żeby szukać dalej.
  • Użycie KMP, gdy prostsze podejście wystarczy (trade-off inżynierski).

Powiązane pytania

Algorytmy
KMP: jak tablica LPS/prefix pomaga uniknąć ponownego porównywania znaków?
#kmp#string#pattern-matching
Struktury danych
Do czego służy suffix array (lub suffix tree)?
#strings#suffix-array#suffix-tree