/ Compilerbau & Formale Sprachen

NFA zu DFA Zustandsexplosion

Maximale Zustandsanzahl des durch Potenzmengenkonstruktion erzeugten DFA: MaxDFAZustaende = 2^NFAZustaende.

NFA zu DFA Zustandsexplosion
01 · Eingabe

NFA zu DFA Zustandsexplosion berechnen

Maximale Zustandsanzahl des durch Potenzmengenkonstruktion erzeugten DFA: MaxDFAZustaende = 2^NFAZustaende.

Lösen für
MaxDFAZustaende = 2^NFAZustaende

Worum geht es?

Die Potenzmengenkonstruktion (Subset Construction) verwandelt einen NFA mit |Q| Zuständen in einen sprachäquivalenten DFA. Da ein DFA-Zustand jeder Teilmenge der NFA-Zustandsmenge entsprechen kann, gibt es im Worst Case

MaxDFAZustaende = 2^|Q_NFA|

mögliche DFA-Zustände. Diese exponentielle Schranke heißt Zustandsexplosion.

In der Praxis liegt die tatsächliche Zustandsanzahl meist deutlich darunter, weil viele Teilmengen unerreichbar sind oder durch DFA-Minimierung verschmelzen. Für Worst-Case-Analysen, Generator-Quotas und sicherheitsrelevante Lexer (z. B. ReDoS-Härtung) ist die obere Schranke aber maßgeblich.

Die Formel

Formel Subset Construction
MaxDFAZustaende = 2^NFAZustaende

Umstellung:
    NFAZustaende = log₂(MaxDFAZustaende)

Die Variablen

SymbolBedeutungEinheitErklärung
NFAZustaendeNFA-ZuständeAnzahl Zustände |Q| im Ausgangs-NFA.
MaxDFAZustaendeMax. DFA-ZuständeWorst-Case-Zustandsanzahl im erzeugten DFA.

Minimal-Beispiel

NFA mit 5 Zuständen:

Rechnung Mini-NFA
MaxDFAZustaende = 2^5
               = 32

Praxis-Beispiele

Beispiel 1 — Regex-Lexer

Ein regex-basierter Lexer-NFA hat 20 Zustände:

Rechnung Regex-Lexer
MaxDFAZustaende = 2^20
               = 1 048 576

Beispiel 2 — NFA-Größe aus DFA-Schranke

Ein Werkzeug meldet maximal 1024 DFA-Zustände:

Rechnung Rückwärts
NFAZustaende = log₂(1024)
             = 10

Beispiel 3 — Sicherheitsanalyse

Härtungsschwelle: ein gegnerischer Regex erzeugt einen NFA mit 32 Zuständen:

Rechnung Sicherheit
MaxDFAZustaende = 2^32
               = 4 294 967 296 ≈ 4,3 · 10⁹

→ DFA-Materialisierung muss begrenzt werden (Lazy DFA).