Algoritmo para determinar si dos expresiones regulares son equivalentes


11

Dadas dos expresiones regulares arbitrarias, ¿existe un algoritmo "eficiente" para determinar si coinciden con el mismo conjunto de cadenas?

De manera más general, ¿podemos calcular el tamaño de la intersección de los dos conjuntos de coincidencias?

¿Qué algoritmos existen para hacer esto y en qué clase de complejidad viven?

Si no permitimos la estrella de Kleene, ¿eso altera la imagen?


¿Qué quieres decir con "tamaño de la intersección"? En la mayoría de los casos interesantes, será infinitamente grande; ¿te interesan los tamaños wrt ? Σnorte
Raphael

@Raphael Entiendo que eliminar la estrella de Kleene obliga a que el tamaño del conjunto sea finito.
MathematicalOrchid

Depende ¿Qué otros operadores están permitidos? Si permite la complementación, lo que dice no es cierto. Además, también solicita la situación con la estrella de Kleene, por lo que debe aclararla de todos modos.
Raphael

Respuestas:


12

Hendrik Jan da una buena respuesta para la clase de complejidad, pero no un algoritmo en sí mismo.

El algoritmo más simple para hacer esto que conozco es convertir la expresión regular a un DFA. Existen técnicas conocidas para convertir una expresión regular en un NFA y un NFA en un DFA.

Una vez que tenga dos DFA, la prueba de equivalencia es eficiente y decidible, ya que la forma mínima de un DFA es única hasta el isomorfismo.

Sin embargo, construir estos DFA a partir de NFA podría llevar mucho tiempo y producir DFAS extremadamente grandes, exponencialmente grandes en el peor de los casos.


10

Se sabe que la equivalencia de las expresiones regulares es completa para PSPACE, lo cual es bastante malo. El documento "Complejidad de problemas de decisión para expresiones regulares simples" enumera varias subclases de expresiones regulares con sus respectivas complejidades. ( enlace )


1
mi2mimi

@dkuper Gracias por la explicación adicional. Siéntase libre de editar la respuesta para agregar esto o referencias adecuadas. (O incluso comenzar su propia respuesta.)
Hendrik Jan

¿Hay alguna referencia para que las expresiones regulares generales sean PSPACE-complete?
Ryan

Tu enlace está muerto. ¿Puede proporcionar una nueva o al menos parte de la información relevante del documento?
D. Ben Knoble

@ D.BenKnoble Link funciona bien para mí.
Hendrik Jan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.