KMP-Idee: Präfixfunktion

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

KMP vorberechnet eine longest-prefix-suffix-Tabelle (pi) für das Muster. Bei Mismatch springt der Algorithmus anhand von pi, ohne das Textfenster blind um 1 zu schieben.

Gesamt $O(n + m)$. Die Idee: bereits gelesene Information nutzen.

Wo gebraucht

Einmalig vorverarbeitete Pattern in Streaming-Scannern und Intrusion-Detection. Baustein für Verständnis von String-Automaten und Regex-Engines.

Vertiefung

KMP merkt sich für jedes bereits betrachtete Musterpräfix, wie weit ein sinnvoller Vergleich nach einem Fehler fortgesetzt werden kann. Die Vorverarbeitung beschreibt dazu Längen geeigneter Randstrukturen innerhalb des Musters. So muss der Textzeiger nach einer teilweisen Übereinstimmung nicht zurückgesetzt werden.

Während der Suche bewegt sich der Textindex nur vorwärts. Der Musterindex kann über vorberechnete Verweise zurückspringen, wobei bereits bestätigte Struktur erhalten bleibt. Vorverarbeitung und Suche benötigen jeweils Arbeit proportional zu ihren Eingabelängen.

Schwierigkeitsstufen

  1. Randlängen für kurze Muster schrittweise bestimmen.
  2. Einen Fehlvergleich mit dem vorberechneten Rücksprung fortsetzen.
  3. Begründen, warum der Text nicht mehrfach rückwärts durchlaufen wird.

Fallstricke

Die Präfixfunktion wird für das Muster, nicht für den durchsuchten Text, aufgebaut. Nach einem Fehler darf ausserdem nicht stets auf null zurückgegangen werden, sonst geht gerade der strukturelle Vorteil verloren.

University approvals: 0
Tasks
Question 1

Was speichert die pi-Tabelle bei KMP grob?

Question 2

Welchen Vorteil liefert die Vorverarbeitung nach einem Fehlvergleich?

Question 3

Implementiere die Präfixfunktion pi für das KMP-Verfahren.

Hint

Ein Ergebnisarray entsteht mit new int[pat.length()]. Zeichen werden über pat.charAt(index) gelesen.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy