EDIT (março de 2014) Devo dizer que, desde então, trabalhei mais em algoritmos para modelos de computação do tipo MapReduce e sinto que estava sendo excessivamente negativo. A técnica Divide-Compress-Conquer de que falo abaixo é surpreendentemente versátil e pode ser a base de algoritmos que considero não triviais e interessantes.
Deixe-me oferecer uma resposta que será muito inferior à de Mike em termos de abrangência, mas do ponto de vista do modelo de teoria da computação / algoritmo.
Por que há emoção : MapReduce intercala computação paralela e seqüencial; cada processador tem acesso a um pedaço não trivial (por exemplo, ) da entrada e pode executar uma operação não trivial nela; isso é muito diferente dos modelos PRAM e parece uma idéia interessante que pode levar a novas técnicas algorítmicas. Em particular, alguns problemas podem ser resolvidos em poucas rodadas de cálculo (constante no tamanho da entrada), enquanto nenhum problema não trivial pode ser resolvido na PRAM em .O(nϵ)o(logn)
Por que o modelo está ficando um pouco frustrante para mim : A única técnica algorítmica que parece funcionar para obter algoritmos de arredondamento e é algo novo é a seguinteO(1)
- Particionar a instância do problema (geralmente aleatoriamente)
- Faça algum cálculo em cada partição em paralelo e represente o resultado do cálculo compactamente
- Combine todas as soluções de subproblemas representadas compactamente em um único processador e termine o cálculo lá
Exemplo muito simples da técnica: calcule a soma de números. Cada processador possui da matriz e calcula a soma dessa parte. Todas as somas podem ser combinadas em um único processador para calcular a soma total. Um exercício um pouco mais interessante é calcular todas as somas de prefixos dessa maneira (é claro que nesse caso a saída deve ser representada de forma distribuída). Ou calcule uma árvore de abrangência de um gráfico denso.nO(n−−√)n−−√
Agora, acho que isso é realmente uma reviravolta interessante na divisão e conquista, a reviravolta é que, após o estágio de divisão, você precisa compactar soluções de subproblemas para que um único processador possa conquistar. No entanto, essa realmente parece ser a única técnica que criamos até agora. Ele falha em problemas com gráficos esparsos, como conectividade esparsa, por exemplo. Compare isso com o modelo de streaming, que levou a uma riqueza de novas idéias, como o algoritmo de amostragem ingênuo de Flajolet e Martin, o algoritmo de emparelhamento determinístico de Misra e Gries, o poder de técnicas simples de desenho etc.
Como paradigma de programação, a redução de mapas tem sido muito bem-sucedida. Meus comentários consideram o mapa reduzido como um modelo interessante de computação. Bons modelos teóricos são um pouco estranhos. Se eles seguem a realidade muito de perto, são difíceis de manejar, mas o mais importante é que (para emprestar um termo do aprendizado de máquina) os teoremas provados para modelos muito específicos não generalizam, ou seja, não são válidos em outros modelos. É por isso que queremos abstrair o máximo de detalhes possível, deixando ainda o suficiente para nos desafiar a criar novos algoritmos. Por fim, essas novas idéias poderão, eventualmente, encontrar o caminho de volta ao mundo real. O PRAM é um modelo irrealista que levou a idéias interessantes, mas essas idéias provaram ser raramente aplicáveis à computação paralela no mundo real. Por outro lado, o streaming também não é realista, mas inspirou idéias algorítmicas que são realmente empregadas no mundo real. Vejoesboço de contagem-min . As técnicas de desenho também são usadas em sistemas baseados em redução de mapa.