Respuesta corta : depende del algoritmo recursivo, pero diría que no es bueno para la mayoría de los algoritmos recursivos.
Respuesta más larga : el paradigma de MapReduce detrás de Hadoop es excelente cuando podemos dividir el trabajo en partes entre varias computadoras y ellas combinan cada parte para producir el resultado final.
El ejemplo clásico es contar el número de apariciones de cada palabra en un archivo de texto. Aquí, podemos dividir el archivo en partes iguales entre nuestro clúster (por ejemplo, 100 líneas para cada procesador), calcular las ocurrencias en cada parte (fase del mapa) y combinar (sumar) el número de ocurrencias de cada palabra en cada parte (reducir la fase )
- Lenguaje ensamblador: ¿Por qué las instrucciones INC y DEC no establecen la bandera de acarreo?
- ¿Puedes ser bueno en la programación pero malo en los algoritmos?
- Cómo ordenar la lista de números dada en orden de registro (n)
- ¿El laboratorio de codificación dexter es bueno para C / C ++?
- ¿Cuál es el algoritmo para realizar la inserción en un árbol B?
Esto tiende a ser sencillo para los algoritmos de divide y vencerás. Los algoritmos recursivos tienen un árbol de dependencia de llamadas recursivas. A menos que cada llamada recursiva sea bastante independiente y tenga sentido dividir el trabajo en cada llamada recursiva entre varias computadoras (que dividirán recursivamente el trabajo), MapReduce no ayudará.
Incluso en los casos en que parece tener sentido, se desperdicia mucho tiempo de procesador. Tomemos, por ejemplo, un algoritmo que realiza 2 llamadas recursivas con una profundidad de 10. Esto significa que tenemos 10 niveles con 1, 2, 4, 8,… 256, 512 computadoras cada uno. Por lo tanto, tendríamos que reservar 1023 procesadores para nuestro trabajo. Sin embargo, la mayoría de estos procesadores pueden estar inactivos durante algún tiempo esperando que se les asigne trabajo (por ejemplo, 512 procesadores en el último nivel).
La programación inteligente de tareas podría mitigar este problema, pero MapReduce (Hadoop) todavía no parece bueno para algoritmos recursivos. Un mejor enfoque podría ser rediseñar el algoritmo para aprovechar la informática distribuida. Tomemos, por ejemplo, el algoritmo modificado de Dijkstra para ejecutarse en un entorno MapReduce. Ver Algoritmos MapReduce para más detalles.