Tengo que reconocer una gran lista de URL (pocos millones de líneas) como pertenecientes a una categoría en particular o no. Tengo otra lista que tiene sub-cadenas que, si están presentes en la URL, pertenecen a esa categoría. Diga, Categoría A.Buscando una manera más rápida de realizar búsquedas de cadenas
La lista de subcadenas a verificar tiene alrededor de 10k tales subcadenas. Lo que hice fue simplemente ir línea por línea en el archivo de subcadena y buscar la coincidencia, y si la URL pertenecía a la Categoría A. Encontré en las pruebas que esto consumía bastante tiempo.
No soy un estudiante de ciencias de la computación, así que no tengo mucho conocimiento sobre la optimización de algoritmos. Pero, ¿hay alguna forma de hacerlo más rápido? Solo ideas simples. El lenguaje de programación no es un gran problema, pero Java o Perl serían preferibles.
La lista de subcadenas que coincidan no cambiará mucho. Sin embargo, recibiré diferentes listas de URL, así que debo ejecutar esto cada vez que lo reciba. El cuello de botella parece ser las URL, ya que pueden ser muy largas.
puede usar algún sistema de recuperación de información (es decir, Lucene - en Java) para indexar las URL, y luego buscar la cadena, la indexación llevará mucho tiempo, pero ahorrará tiempo para cada "consulta", sin tener que iterar sobre toda la lista. – amit
10k veces, digamos, 10 millones es lo que, 100 mil millones? sí, eso tomará un tiempo sin importar el idioma. si algo está en la categoría A, ¿significa que no pueden estar en ninguna otra categoría?si es así, puede eliminar todo de la lista grande que se asigna a una categoría –
la lista de subcadenas es constante, no hay ninguna razón para que tome mucho tiempo, consulte mi respuesta, la longitud de la lista solo afecta el tamaño tomado en memoria para el autómata e incluso eso probablemente sea pequeño – Asaf