Para estar al frente, este es deberes. Dicho esto, es extremadamente abierto y casi no hemos tenido ninguna orientación sobre cómo empezar a pensar en este problema (o algoritmos paralelos en general). Me gustaría que los punteros en la dirección correcta y no es una solución completa. Cualquier lectura que pueda ayudar sería excelente también.Algoritmo de coincidencia de cadenas paralelas de primer orden
Estoy trabajando en una forma eficiente de hacer coincidir la primera aparición de un patrón en una gran cantidad de texto usando un algoritmo paralelo. El patrón es la coincidencia de caracteres simples, sin expresiones regulares involucradas. He logrado encontrar una forma posible de encontrar todas las de las coincidencias, pero eso requiere que mire todas las coincidencias y encuentre la primera.
Entonces, la pregunta es, ¿tendré más éxito al dividir el texto entre procesos y escanear de esa manera? ¿O sería mejor tener una búsqueda sincronizada en el proceso de algún tipo donde el proceso j'th busca el carácter j-ésimo del patrón? Si todos los procesos devuelven verdadero para su coincidencia, los procesos cambiarían su posición al hacer coincidir dicho patrón y subir de nuevo, continuar hasta que todos los caracteres se hayan emparejado y luego devolver el índice de la primera coincidencia.
Lo que tengo hasta ahora es extremadamente básico, y lo más probable es que no funcione. No implementaré esto, pero cualquier puntero sería apreciado.
Con los procesadores P, un texto de longitud T, y un patrón de longitud L, y un techo de procesadores L utilizado:
for i=0 to t-l: for j=0 to p: processor j compares the text[i+j] to pattern[i+j] On false match: all processors terminate current comparison, i++ On true match by all processors: Iterate p characters at a time until L characters have been compared If all L comparisons return true: return i (position of pattern) Else: i++
El problema con el algoritmo propuesto es que hay * manera * de comunicación excesiva entre los procesadores. A menos que el patrón sea extremadamente largo, será mejor que cada procesador busque una coincidencia en un punto particular y termine en la primera coincidencia. –
¿Se especificó el modelo PRAM? ¿O puedes suponer algo? ¿También está el límite del procesador L impuesto por usted o por el problema? –
El límite del procesador L lo especifico yo. Supongo que la memoria no se comparte, ya que esto es un pretexto para usar MPI. – Xorlev