¿Cuál es la complejidad con respecto a la longitud de cadena que lleva a realizar una comparación de expresiones regulares en una cadena?¿Cuál es la complejidad de la expresión regular?
Respuesta
La respuesta depende de qué es exactamente lo que quiere decir con "expresiones regulares". Las expresiones regulares clásicas pueden ser compiled en Deterministic Finite Automata que pueden coincidir con una cadena de longitud N
en O(N)
vez. Ciertas extensiones del lenguaje de expresiones regulares cambian eso para peor.
Puede encontrar el siguiente documento de interés: Regular Expression Matching Can Be Simple And Fast.
Me encanta ese artículo. – tchrist
Supongo que no sería posible obtener los datos de prueba utilizados para ese artículo. Mi lugar de trabajo usa perl regex todo el tiempo. Si fueran tan lentos, nuestro hardware fallaría por completo. – DeepDeadpool
ilimitado: puede crear una expresión regular que nunca termina en una cadena de entrada vacía.
Solo por curiosidad, ¿podría dar un ejemplo, Alex? –
see man perlre - "'foo' = ~ m {(o?) *} X;". Perl tiene un código especial para detectar la recursión infinita en este caso y estallar. –
Si usa normal (TCS: sin referencia, concatenación, alternancia, estrella de Kleene) expresiones regulares y expresiones regulares ya está compilada, entonces es O (n).
Si está buscando límites asintóticos ajustados en RegEx (sin respeto a la expresión en sí), entonces no hay uno. Como señala Alex, puedes crear una expresión regular que sea O (1) o una expresión regular que sea Omega (infinito). Como un algoritmo puramente matemático, un motor de expresión regular sería demasiado complicado para realizar cualquier tipo de análisis asintótico formal (aparte del hecho de que dicho análisis sería básicamente inútil).
La tasa de crecimiento de una expresión particular (ya que, en realidad, constituye un algoritmo, de todos modos) sería mucho más significativa, aunque no necesariamente más fácil de analizar.
Eso está considerando extensiones de expresiones regulares formales. Se puede demostrar que las expresiones regulares que involucran construcciones usuales (sin patrones de anticipación/retroceso por ejemplo) siempre terminan en cualquier entrada, en un tiempo O (longitud de la cadena de entrada). –
@clement Incluso la mayoría de las extensiones no empujan el RE más allá de un DFA. Por ejemplo, Python Regex siempre puede ser modelado por un DFA. Sin embargo, tan pronto como comienzas a trabajar con Perl regex (¿y creo que Javascript?) Se convierte en un animal diferente que es equivalente a una MT en su lugar. – BlackVegetable
- 1. ¿Cuál es la expresión regular más eficiente?
- 2. ¿Cuál es la expresión regular de una palabra en español?
- 3. ¿Cuál es el significado de `?:` En la expresión regular
- 4. Cuál es la expresión regular más larga que ha visto
- 5. ¿Cuál es la expresión regular para una URL como esta?
- 6. ¿Cuál es la expresión regular que coincide con un corchete?
- 7. ¿Cuál es la diferencia entre() y [] en una expresión regular?
- 8. ¿Cuál es la complejidad de OrderedDictionary?
- 9. ¿Cuál es la complejidad de la función de registro?
- 10. ¿Cuál es la complejidad temporal de la iteración TreeSet?
- 11. ¿Cuál es la expresión regular más simple para validar correos electrónicos para no aceptarlos a ciegas?
- 12. Distancia entre la expresión regular
- 13. ¿Cuál es la expresión regular que coincide con la cadena vacía para una regla de reescritura?
- 14. ¿Cuál es la expresión regular para la "raíz" de un sitio web en django?
- 15. Expresión regular para la URL
- 16. TCL espera la expresión regular
- 17. - (guión) en la expresión regular
- 18. Coincidir con la expresión regular
- 19. ¿Cuál es la complejidad de concatenación de cuerdas balanceadas?
- 20. ¿Cuál es la complejidad de tiempo de LinkedList.getLast() en Java?
- 21. ¿Cuál es la complejidad del tiempo de cruce de árboles?
- 22. ¿Cuál es la complejidad de tiempo de .NET list.sort()
- 23. ¿Cuál es la complejidad de estos métodos de diccionario?
- 24. ¿Cuál es la complejidad de tiempo de HashMap.containsKey() en java?
- 25. ¿Cuál es la complejidad de tiempo de HTML DOM búsquedas
- 26. ¿Cuál es la complejidad de tiempo del método java.util.Collections.sort()?
- 27. ¿Cuál es la complejidad de set_intersection en C++?
- 28. Problema de expresión regular
- 29. ¿Cuál es el significado de '(? I) contraseña' en la expresión regular de python?
- 30. Expresión regular para la validación de contraseña
La complejidad depende más de la naturaleza de la expresión regular que de la longitud de la cadena. – LukeH
@LukeH Alternativamente, depende del lenguaje de programación utilizado. Por ejemplo, Python Regex nunca puede exceder el poder de la computadora de un DFA, pero Perl Regex puede estar completo. – BlackVegetable
posible duplicado de [Complexity of Regex substitution] (http://stackoverflow.com/questions/21669/complexity-of-regex-substitution) – Kevin