Quali algoritmi esistono per la costruzione di un DFA che riconosce il linguaggio descritto da una data regex?


11

Tutti i miei libri di testo usano lo stesso algoritmo per produrre un DFA dato una regex: in primo luogo, crea un NFA che riconosca il linguaggio della regex, quindi, usando la costruzione del sottoinsieme (aka "powerset"), converti l'NFA in un DFA equivalente ( ridurre al minimo il DFA). Una volta ho anche sentito un professore alludere al fatto che esistessero altri algoritmi. Qualcuno ne sa qualcosa? Forse uno che va direttamente dalla regex a un DFA senza l'NFA intermedio?


Benvenuti in cstheory, un sito di domande e risposte per domande a livello di ricerca in informatica teorica (TCS). La tua domanda non sembra essere una domanda a livello di ricerca in TCS. Si prega di consultare le FAQ per ulteriori informazioni su cosa si intende con questo. La tua domanda potrebbe essere adatta per l' Informatica che ha un ambito più ampio.
Kaveh,

1
perché usi sempre questo commento modello? Apparentemente ce ne sono almeno 5 che non sono d'accordo con te. Suggerirei di dare una possibilità a tali domande.
AJed

@Jed, non uso sempre questo commento. Lo uso quando una domanda mi sembra fuori tema ma potrebbe essere adatta per l' Informatica . Il voto elevato non significa che una domanda sia in tema e questa non mi sembra una domanda a livello di ricerca, quindi penso che il commento sia appropriato. (Il fatto che qualcuno possa scrivere una risposta a livello di ricerca a una domanda non rende la domanda a livello di ricerca.) Ps: Penso che questa discussione sia più adatta a Meta teorica dell'informatica .
Kaveh,

Risposte:


13

Esistono diversi algoritmi per convertire espressioni regolari in automi finiti. Puoi passare direttamente dalle espressioni regolari ai DFA senza creare prima nessun altro automa facendo implicitamente la costruzione del sottoinsieme mentre generando l'automa. Un'altra opzione per ottenere direttamente automi deterministici è utilizzare il metodo dei derivati.

Controllare se un'espressione regolare rappresenta la lingua che contiene tutte le stringhe è un problema completo di PSPACE (vedere questa risposta per un riferimento). Verifica se un DFA accetta che la lingua possa essere eseguita in un tempo polinomiale, quindi se passi direttamente da un'espressione regolare a un DFA, ci sarà un'esplosione da qualche parte.

La mia comprensione della letteratura è che possiamo scegliere traduzioni che ci consentono di localizzare l'esplosione. In altre parole, esistono diversi modi per passare da un'espressione regolare a un automa finito e sono preferiti metodi lineari o polinomiali. Di solito, i costi esponenziali vengono spinti nella determinazione degli automi.

C'è stato molto lavoro per identificare le sottofamiglie di espressioni regolari da cui possiamo generare efficientemente DFA. Questa linea di lavoro dipende dalla traduzione che usi. Ciò significa che correggi una mappatura dalle espressioni regolari agli NFA e provi a caratterizzare le espressioni regolari che si associano ai DFA.

La costruzione standard di automi da espressioni regolari non è la costruzione preferita in tale lavoro. Le costruzioni di scelta producono automi che ricordano da vicino la struttura dell'espressione regolare. Queste costruzioni usano la nozione di un derivato di un'espressione regolare.

Derivati ​​delle espressioni regolari , JA Brzozowski. 1964.

srara

Derivati ​​parziali di espressioni regolari e costruzioni di automi finiti , V. Antimirov. 1995.

Se pensi a uno stato di un automa come una rappresentazione di tutte le stringhe accettate da quello stato, le derivate (parziali) ti consentono di trattare le espressioni regolari come stati . Contrariamente alla costruzione di libri di testo standard che tratta in modo intuitivo espressioni regolari come automi, non come stati.

Dalle espressioni regolari agli automi deterministici , G. Berry e R. Sethi, 1986.

La corrispondenza tra espressioni regolari e stati di un automa e determinismo è discussa esplicitamente da Berry e Sethi, che combinano la nozione di derivati ​​di Brzozowski con l'idea di distinguere tra occorrenze dello stesso simbolo per dare una traduzione basata su sintassi di espressioni regolari in finito automi.

One-Unambiguous Regular Languages , A. Brüggemann-Klein e Derick Wood, 1998.

Questo documento si basa su precedenti lavori di Brüggemann-Klein e studia casi in cui è possibile utilizzare derivati ​​per generare DFA in tempo polinomiale. C'è molto lavoro a seguito di questo documento. Era significativo dal punto di vista delle tecnologie web perché le espressioni regolari che possono essere manipolate in modo efficiente (ovvero corrispondenti ai DFA) erano importanti per l'elaborazione di SGML e XML.

C'è stato molto lavoro nello studio di altri casi speciali di espressioni regolari deterministiche. Un documento molto recente che studia quando alcuni di questi problemi possono essere risolti in tempo lineare è del 2012.

Espressioni regolari deterministiche nel tempo lineare , Benoit Groz, Sebastian Maneth, Slawomir Staworko. 2012.


5
Hai già menzionato i derivati ​​nella tua risposta, quindi dovresti anche aggiungere JA Brzozowski: Derivatives of Regular Expressions, Journal of ACM 11 (4): 481–494 (1964), dal momento che fornisce un algoritmo diretto per convertire regexps in DFA .
Neel Krishnaswami,

3
Ne ho discusso. Ma tutti e tre i precedenti articoli si basano direttamente su quel risultato, quindi ho pensato che non c'era motivo di menzionarlo. Anche il documento Brueggeman-Klein e Wood è pieno di esempi. Se menziono Brzozowski, penso che anche Antimirov dovrebbe essere menzionato. Volevo evitare un sondaggio, ma forse dovrei semplicemente provarlo. Cosa dire?
Vijay D,

5
Se hai il tempo e l'energia, penso che le risposte da sondaggio a lungo termine siano molto appropriate qui.
David Eppstein,

1
@VijayD: sì, sono d'accordo con David. Le risposte brevi vanno bene, ma se hai l'energia è bello dare una risposta completa.
Neel Krishnaswami il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.