Divide e algoritmo conquista: a falar sobre a divisão ideológica e conquistar grande escala de computação no âmbito MapReduce

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.

Publicado 75 artigos originais · ganhou elogios 9 · vista 9183

Acho que você gosta

Origin blog.csdn.net/ywangjiyl/article/details/104561970
Recomendado
Clasificación