Divide e algoritmo conquista: a falar sobre a divisão ideológica e conquistar grande escala de computação no âmbito MapReduce
MapReduce é um dos grandes de dados do Google processamento troika, os outros dois são GFS e Bigtable
Compreensão do algoritmo de divisão e conquista:
problema original em n menor, e uma estrutura semelhante à sub-problemas do problema original, para resolver estes sub-problemas de forma recursiva, e, em seguida, combinados para se obter um resultado da solução do problema original
Dividir para conquistar algoritmo é a idéia de tratar o problema, a recursividade é uma técnica de programação, divida recursiva e conquistar algoritmos, cada camada será relaciona de forma recursiva a três coisas:
- De decomposição: o problema original em uma série de sub-problemas
- Solução: recursiva resolver cada sub-problema, se a criança é problema pequeno o suficiente, resolvida diretamente
- Fundir: Os resultados são combinados em sub-problemas do problema original
Por exemplo dividir e análise de algoritmos conquiste
Um conjunto ordenado de dados com um grau de ordem, na ordem inversa do grau da alteração indica um conjunto de dados.
Suponhamos que temos n de dados, os dados desejados em ordem crescente, em seguida, a fim dos dados completamente ordenada é n (n-1) / 2, é na ordem inversa de 0, pelo contrário, o grau de ordenação dos dados é a ordem inversa 0, é o inverso de n (n-1) / 2
2,4,3,1,5,6 número ordem inversa: 4
(2,1) (4,3) (4,1) (3,1)
Como encontrar um programa ordenada para um conjunto de dados ou o número de número reverso?
Pensamento aplica algoritmo partição por ordem inversa do número de série A, a matriz é dividido em dianteiros e traseiros metades A1 A2, A1 A2 são calculados para o número de reverso K1 K2, e, em seguida, calcular o número de K3 inversa, a matriz A A1 A2 o número de reverso = K1 + K2 + K3
Como calcular rapidamente as duas sub-problemas entre A1 A2 no número de invertê-la?
operação de intercalação tipo é ter uma combinação de dois fraccionada ordenados em uma matriz ordenada e, de facto, o processo de fusão pode ser calculada em duas inversa pequeno número de matrizes. Cada operação de intercalação de tempo, são calculados sobre o número de reversa, para a soma calculada do número, e o número é o inverso da matriz.
private int num = 0 ; //全局变量或者成员变量
public int count (int[] a ,int n){
num = 0 ;
mergeSortCounting(a , 0 ,n-1);
return num;
}
private void mergeSortCounting(int[] a ,int p ,int r){
if (p >= r) return;
int q = (p+r) / 2;
mergeSortCounting(a,p,q);
mergeSortCounting(a , q+1 ,r);
merge(a , p , q , r);
}
private void merge(int[] a ,int p ,int q, int r){ //可以改成merge(int[] a ,int low ,int middle, int high)
int i = p , j = q+1 , k = 0 ;
int[] tmp = new int[r-p+1];
while(i<=q && j <=r){
if(a[i] <= a[j]){
tmp[k++] = a[i++];
}else{
num += (q-i+1); // 统计p-q之间,比a[j]大的元素个数
tmp[k++] = a[j++];
}
}
while (i <= q){ //处理剩下的
tmp[k++] = a[i++];
}
while (j <= r){ //处理剩下的
tmp[k++] = a[j++];
}
for(i = 0 ; i <= r-p ;++i){ //从tmp拷贝回a
a[p+i] = tmp[i];
}
}
pergunta clássica do algoritmo de divisão e conquista:
- Há n pontos em um plano bidimensional, como calcular rapidamente os dois ponto mais próximo?
- Dois n-
*
n-matrizes A, B, C como produto rapidamente resolvido de duas matrizes A =*
B?
ideias partição de aplicação no processamento de dados em massa
Resolver o problema do grande volume de dados para caber na memória RAM disponível, o uso dividir e ideia conquiste das vastas quantidades de dados definidos de acordo com um determinado método é dividido em vários conjuntos de dados pequenos, cada um pequeno conjunto de dados é carregado na memória sozinho para resolver, e depois pequeno os dados combinados para definir a recolha de dados, não apenas ultrapassar as limitações de memória multissegmentação mais processadores ou velocidade de processamento
Por exemplo, para classificar a ordem de 10GB, você pode digitalizá-lo novamente encomendas, com base na quantidade, o montante é dividido em várias seções do arquivo de 10GB, por exemplo, em outro documento entre 1 a 100 101 to 200, e assim por diante, cada arquivo pequeno ele pode ser carregado individualmente em espécie de memória, merge e finalmente ordenou um pequeno arquivo, que é a última das ordens ordenadas
Por que é a essência do MapReduce divisão ideológica e conquistar?
Se os dados a serem processados é 1T, 10T, 100T, de modo que o uso de processamento de agrupamento em paralelo é a tendência
estrutura MapReduce é apenas um agendador de tarefas, além de tratamento, a frequência pode também existem relações entre as tarefas e aparece palavra estatística de arquivo de dados, não há homem névoa desligamento processo, como por web analytics, segmentação, etc.