0Pricing
Competitive Programming Academy · Lektion

Polynomiales String-Hashing

Vergleichen Sie Teilstrings in konstanter Zeit

Polynomiales String-Hashing ist eine kostenlose Competitive Programming Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Competitive Programming Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Competitive Programming Academy-Kurs umfasst insgesamt 4 Lektionen.

Teilzeichenketten schnell vergleichen

Oft müssen Sie prüfen, ob zwei Teilzeichenketten gleich sind. Zeichenweise Vergleiche sind langsam, daher wandeln wir jede Zeichenkette in eine Zahl um. 🔢

Die Idee des Hashings

Ein Hash bildet eine Zeichenkette auf eine einzelne Ganzzahl ab. Wenn sich zwei Zeichenketten unterscheiden, sind auch ihre Hashes fast immer verschieden.

Zeichenketten als Polynome behandeln

Wir lesen jedes Zeichen als Ziffer zur Basis p. Diese Polynom-Betrachtung verwandelt die Zeichenkette in eine große gewichtete Summe.

h = ord(s[0]) + ord(s[1]) * p + ord(s[2]) * p * p

Eine Basis und einen Modul wählen

Wählen Sie eine Primzahl als Basis, etwa 31, sowie einen großen Primzahlmodul. Der Modulo-Operator hält die Zahlen klein und verhindert Überläufe.

BASE = 31
MOD = 10**9 + 9

Einen Hash berechnen

Gehen Sie die Zeichenkette durch und fügen Sie jedes Zeichen mithilfe des Horner-Schemas ein, wobei Sie in jedem Schritt den Modulo-Operator anwenden.

h = 0
for c in s:
    h = (h * BASE + ord(c)) % MOD

Präfix-Hashes

Speichern Sie für jede Position einen Präfix-Hash. Dann lässt sich jeder Teilzeichenketten-Hash durch eine schnelle Subtraktion berechnen.

pre[i + 1] = (pre[i] * BASE + ord(s[i])) % MOD

Potenzen der Basis

Berechnen Sie außerdem die Potenzen der Basis im Voraus. Sie bringen die beiden Präfixe beim Subtrahieren auf dieselbe Ausrichtung.

pw[i] = (pw[i - 1] * BASE) % MOD

Teilzeichenketten-Hash in O(1)

Der Hash von s[l..r] ist die um eine Potenz skalierte Subtraktion zweier Präfix-Hashes. Pro Anfrage konstante Zeit.

def sub(l, r):
    return (pre[r] - pre[l] * pw[r - l]) % MOD

Vorsicht vor Kollisionen

Zwei verschiedene Strings können denselben Hash haben – das ist eine Kollision. Das kommt selten vor, aber bei Wettbewerben werden manchmal Eingaben konstruiert, die eine solche Kollision auslösen.

Sicherheit durch doppeltes Hashing

Verwenden Sie zwei unabhängige Moduli und vergleichen Sie beide Hashwerte. Eine gleichzeitige Kollision bei beiden ist praktisch unmöglich.

Wo Hashing glänzt

Hashing ermöglicht den Substring-Vergleich, das Finden von Wiederholungen und die Mustersuche. Es ist ein vielseitiges Schweizer Taschenmesser.

Kurzer Check

Wählen Sie das richtige Werkzeug, um viele Substrings sicher zu vergleichen.

Zusammenfassung: Hashing gewinnt

Sie können Strings jetzt in polynomiale Hashwerte umwandeln, jeden Substring in O(1) abfragen und sich gegen Kollisionen absichern. 🚀

Häufig gestellte Fragen

Ist die Lektion „Polynomiales String-Hashing“ kostenlos?

Ja — der vollständige Text von „Polynomiales String-Hashing“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Competitive Programming Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Competitive Programming Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Polynomiales String-Hashing“?

Vergleichen Sie Teilstrings in konstanter Zeit Du übst Competitive Programming Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Competitive Programming Academy zu starten?

Keine Vorkenntnisse erforderlich. Competitive Programming Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Polynomiales String-Hashing“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Competitive Programming Academy-Lektion Code schreiben und ausführen?

Ja. Jede Competitive Programming Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. KMP-Präfixfunktion
  2. Polynomiales String-Hashing
  3. Z-Funktion für Mustersuche
  4. Tries für Präfixabfragen
← Zurück zu Competitive Programming Academy