Tengo algunos archivos grandes (cientos de MB) que necesito para buscar varias cadenas únicas de miles ~ 20 caracteres.¿Cuántas expresiones regulares puedo encadenar usando alternancia?
que he encontrado que el uso de la alternancia metacarácter tubería para hacer coincidir expresiones regulares como (string1|string2|string3)
acelera el proceso de búsqueda mucho (frente a la búsqueda de una cuerda a la vez).
¿Cuál es el límite de qué tan bien se escalará? ¿Cuántas expresiones puedo encadenar juntas así? ¿Causará algún tipo de desbordamiento en algún momento? ¿Hay una mejor manera de hacer esto?
EDITAR
En un esfuerzo por mantener mi pregunta breve, no enfatizar el hecho de que ya haya implementado código usando este enfoque alternancia y me pareció que para ser útiles: En un caso de prueba con un conjunto de datos típico, el tiempo de ejecución se redujo de 87 minutos a 18 segundos, una aceleración de 290x, aparentemente con O (n) en lugar de O (n * m).
Mi pregunta se refiere a cómo se puede esperar que este enfoque funcione cuando otros usuarios ejecuten este código en el futuro utilizando conjuntos de datos mucho más grandes con archivos más grandes y más términos de búsqueda. El código O (n * m) original era un código existente que se usaba desde hacía 13 años, y su lentitud fue señalada recientemente ya que los conjuntos de datos relacionados con el genoma en los que opera han aumentado recientemente.
¿Por qué no lo intentas y nos dices los resultados? – Kevin
Eso es extraño: mis resultados fueron exactamente opuestos, fue mucho más rápido hacer varias búsquedas separadas que solo una con alternancia.¿Puedo sugerirle que cuente un poco más sobre su código? – raina77ow
Utilice uno de [Regexp :: Assemble] (http://metacpan.org/module/Regexp::Assemble), [Regexp :: Trie] (http://metacpan.org/module/Regexp::Trie) , [Regex :: PreSuf] (http://metacpan.org/module/Regex::PreSuf) para ensamblar modificaciones más eficientes – obmib