EDIT (marzo 2014) Devo dire che da allora ho lavorato di più sugli algoritmi per i modelli di calcolo di tipo MapReduce e mi sento come se fossi stato eccessivamente negativo. La tecnica Divide-Compress-Conquer di cui parlo di seguito è sorprendentemente versatile e può essere la base di algoritmi che ritengo non banali e interessanti.
Consentitemi di offrire una risposta che sarà molto inferiore a quella di Mike in termini di completezza, ma da un modello di teoria computazionale / teorica algoritmica.
Perché c'è entusiasmo : MapReduce interlaccia il calcolo parallelo e sequenziale; ciascun processore ha accesso a un blocco non banale (ad es. ) dell'input e può eseguire un'operazione non banale su di esso; è molto diverso dai modelli PRAM e sembra un'idea interessante che potrebbe portare a nuove tecniche algoritmiche. In particolare, alcuni problemi possono essere risolti in pochi round di calcolo (costanti nella dimensione dell'input), mentre nessun problema non banale può essere risolto in PRAM in time.o ( registro n )O(nϵ)o(logn)
Perché il modello sta diventando leggermente frustrante per me : l'unica tecnica algoritmica che sembra funzionare per ottenere round algoritmi ed è in qualche modo nuova è la seguenteO(1)
- Partizionare l'istanza del problema (spesso in modo casuale)
- Effettuare un calcolo su ciascuna partizione in parallelo e rappresentare in modo compatto il risultato del calcolo
- Combina tutte le soluzioni dei sottoproblemi rappresentate in modo compatto su un singolo processore e finisci il calcolo lì
Esempio molto semplice di tecnica: calcolare la somma di numeri. Ogni processore ha dell'array e calcola la somma di quella porzione. Quindi tutte le somme possono essere combinate su un singolo processore per calcolare la somma totale. Un esercizio leggermente più interessante è calcolare tutte le somme dei prefissi in questo modo (ovviamente in questo caso l'output deve essere rappresentato in modo distribuito). O calcola un albero spanning di un grafico denso.O ( √n √O(n−−√)n−−√
Ora, penso che questa sia in realtà una svolta interessante su divide e conquistare, il twist è che dopo la fase di divide è necessario comprimere le soluzioni dei sottoproblemi in modo che un singolo processore possa conquistare. Tuttavia, questa sembra davvero essere l'unica tecnica che abbiamo escogitato finora. Non riesce su problemi con grafici sparsi, come ad esempio la connettività sparsa. In contrasto con il modello di streaming, che ha portato a moltissime nuove idee, come l'ingegnoso algoritmo di campionamento di Flajolet e Martin, l'algoritmo di accoppiamento deterministico di Misra e Gries, il potere di semplici tecniche di schizzo, ecc.
Come paradigma di programmazione, la riduzione delle mappe ha avuto molto successo. I miei commenti considerano la riduzione della mappa come un interessante modello di calcolo. I buoni modelli teorici sono un po 'strani. Se seguono la realtà troppo da vicino sono ingombranti, ma soprattutto, (per prendere in prestito un termine dall'apprendimento automatico) i teoremi provati per modelli troppo specifici non si generalizzano, cioè non si applicano ad altri modelli. Ecco perché vogliamo sottrarre il maggior numero possibile di dettagli, lasciando comunque abbastanza da sfidarci a inventare nuovi algoritmi. Infine, queste nuove idee dovrebbero essere in grado di ritrovare la strada per tornare al mondo reale. La PRAM è un modello non realistico che ha portato a idee interessanti ma quelle idee si sono rivelate raramente applicabili al calcolo parallelo del mondo reale. D'altro canto, anche lo streaming non è realistico, ma ha ispirato idee algoritmiche che sono effettivamente impiegate nel mondo reale. Vedereconteggio dei minuti . Le tecniche di sketch sono infatti utilizzate anche nei sistemi basati sulla riduzione delle mappe.