Estou tentando redesenhar meu algoritmo para executar no paradigma Hadoop / MapReduce. Fiquei me perguntando se existe alguma abordagem holística para medir a complexidade do tempo para algoritmos nas plataformas de Big Data.
Como um exemplo simples, a média de n (= 1 bilhão) de números pode ser feita em O (n) + C (assumindo que a divisão seja uma operação em tempo constante). Se eu quebrar esse algoritmo massivamente paralelelizável para Map Reduce, dividindo dados em k nós, minha complexidade de tempo simplesmente se tornaria O (n / k) + C + C '. Aqui, C 'pode ser assumido como a sobrecarga do tempo de planejamento da tarefa de inicialização. Observe que não havia embaralhamento envolvido, e o trabalho do redutor era quase trivial.
Estou interessado em uma análise mais completa do algoritmo com loops iterativos sobre dados e envolva operações pesadas de embaralhamento e redutor. Quero incorporar, se possível, as operações de E / S e as transferências de dados na rede.
Respostas:
S. Arora, B. Barak, Abordagem moderna da complexidade computacional, o capítulo 13 é um bom recurso introdutório para este tópico:
fonte
Veja que você está certo, mas sabe que é muito difícil dizer uma complexidade de tempo específica da redução de mapas. Depende da consulta. Mas nesse caso, deve ser o (nlogn / k) + c + c 'por causa de k nós. Essas curtas consultas, incluindo uma fase de mapeamento de um mapa que reduz a técnica, seguem um conceito Btree. Portanto, a partir desse local para cálculos internos, podemos dizer que sua complexidade de tempo é> o (nlogn) + c + c '.
Corrija minhas sugestões, por favor.
fonte