¿Hay algún algoritmo que compita con RegEx? ¿Hay una manera fácil de ejecutar Python RegEx en una GPU?

La respuesta a ambas preguntas es no, pero principalmente porque hacen suposiciones que no son ciertas.

En primer lugar, las expresiones regulares no son “algoritmos”. Son simplemente una notación para describir conjuntos de cadenas que cumplen ciertas condiciones estructurales. Ahora, cuando llamas a una función en alguna cadena para ver si coincide con una cierta expresión regular, es un algoritmo. Sin embargo, no existe un algoritmo estándar para la coincidencia de expresiones regulares. La biblioteca estándar de Python lo hace de una manera, pero Perl podría hacerlo de otra manera, y así sucesivamente en otras plataformas. Por lo tanto, existen algoritmos competitivos que implementan la coincidencia de expresiones regulares, pero no son competidores de las expresiones regulares, porque no son algoritmos.

En cuanto a su segunda pregunta, la respuesta es no por un par de razones. En primer lugar, es difícil ejecutar código Python de cualquier tipo en una GPU. Hay enlaces de Python para OpenGL y la tecnología CUDA de Nvidia, pero estos solo permiten que Python use el código existente escrito específicamente para la arquitectura de GPU. No permiten ejecutar código arbitrario de Python en una GPU. Hay formas de ejecutar Python arbitrario en la GPU, pero son bastante nuevas y no sé mucho sobre ellas, pero aquí hay un ejemplo: Computación acelerada de GPU con Python. Podría escribir una biblioteca usando esto que podría hacer una coincidencia de expresiones regulares en la GPU, pero ¿realmente ayudaría? No puedo garantizar que no sea así, pero es poco probable.

Las expresiones regulares se diseñaron tal como están específicamente porque su estructura significa que la mayoría de las veces puede aceptar o rechazar coincidencias muy rápidamente. La mayoría de las coincidencias de expresiones regulares se ejecutan tan rápido que la única forma en que la ejecución de GPU lo haría más rápido es si el tamaño de entrada es masivo, en cuyo caso el proceso probablemente estaría vinculado a E / S de todos modos, y la aceleración sería pequeña. Ahora, ciertas expresiones regulares “patológicas” están vinculadas a la computación incluso en tamaños de entrada pequeños debido a las grandes cantidades de backtracking requeridas, y estas podrían mejorar al paralelizar la ejecución del NFA generado en la GPU. Esto podría funcionar, y podría ser algo interesante para probar. Pero si eres lo suficientemente profundo en el ecosistema de programación de GPU para intentar esto, probablemente sea mejor hacerlo en código nativo, no en Python.

More Interesting

¿Hay números irracionales de distribución uniforme no repetitivos para los cuales el dígito n puede calcularse en O (1) tiempo?

¿Cómo funcionan los algoritmos de Quora para las respuestas?

En F (n) -F (n-1) = n ^ 8, ¿qué es F (n)?

¿Cuál es la razón por la cual las compañías gigantes (por ejemplo, Google o Microsoft) hacen preguntas típicas como el árbol de búsqueda binario o el algoritmo tradicional o preguntas como la complejidad del algoritmo? ¿Cuál es el propósito? La mayoría de ellos no se usan en la vida real.

Cómo implementar un hashing sensible a la localidad

Solicitar respuestas (función Quora): ¿El algoritmo de crédito es proporcional?

Suponiendo que todos estos algoritmos resuelven el mismo tipo de problema, ¿cuál se recomienda? ¿Y por qué?

¿Dónde se utilizan los algoritmos criptográficos en nuestras aplicaciones diarias?

Cómo entender la precisión Top-N en el aprendizaje automático de una manera simple

Cómo resolver este problema de integración definitiva

¿Cuál es el mejor método para resolver un problema de 'cuál es el siguiente número en esta secuencia'?

¿Por qué los algoritmos de compresión de datos sin pérdida no funcionan bien en archivos de video?

Dos conjuntos finitos tienen elementos myn cada uno. El número total de subconjuntos del primer conjunto es 56 más que el número total de subconjuntos del segundo conjunto. ¿Cuáles son los valores de myn?

Para una computadora, ¿qué tan aleatorio es ser aleatorio?

¿Cuáles son las ventajas y desventajas de los enfoques de espera ocupada y sueño y vigilia para la exclusión mutua con respecto al kernel de Linux?