Divide y vencerás algoritmo: para hablar de la división ideológica y la conquista de computación a gran escala en el marco de MapReduce

Divide y vencerás algoritmo: para hablar de la división ideológica y la conquista de computación a gran escala en el marco de MapReduce

MapReduce es uno de los grandes de datos de Google procesamiento troika, los otros dos son GFS y Bigtable

La comprensión de divide y vencerás algoritmo:

problema original en N más pequeño, y una estructura similar a subproblemas del problema original, para resolver estos subproblemas de forma recursiva, y luego se combinan para obtener un resultado de la solución del problema original

Divide y vencerás algoritmo es la idea de tratar el problema, la recursividad es una técnica de programación, dividir y conquistar recursiva algoritmos, cada capa se relaciona de forma recursiva a tres cosas:

  • Descomposición: el problema original en una serie de sub-problemas
  • Solución: recursiva resolver cada subproblema, si el niño es lo suficientemente pequeño problema, resuelto directamente
  • Merge: Los resultados se combinan en sub-problemas del problema original

Por ejemplo divide y análisis algoritmo conquista

Un conjunto ordenado de datos con un grado de orden, en orden inverso del grado de la enfermedad indica un conjunto de datos.

Supongamos que tenemos n de datos, los datos deseados en orden ascendente, entonces el orden de los datos completamente ordenado es n (n-1) / 2, está en el orden inverso de 0, por el contrario, el grado de ordenamiento de los datos es el orden inverso 0, es el reverso de n (n-1) / 2

2,4,3,1,5,6 número orden inverso: 4

(2,1) (4,3) (4,1) (3,1)

¿Cómo encontrar un programa ordenado de un conjunto de datos o el número de serie inversa?

Pensamiento aplica algoritmo de partición para el orden inverso del número de la matriz A, la matriz se divide en delantero y trasero mitades A1 A2, A1 A2 se calculan para el número de inversa K1 K2, y luego calcular el número de K3 inversa, la matriz A A1 A2 El número de inversa = K1 + K2 + K3

Cómo calcular rápidamente las dos sub-problemas entre A1 A2 del número de revertirla?

operación de combinación de tipo es tener una combinación fraccional de dos ordenada en una matriz ordenada y, de hecho, el proceso de fusión se puede calcular en dos inversa pequeño número de arrays. Cada operación de combinación de tiempo, se calculan sobre el número de reversa, revertir a la suma calculada del número, y el número es la inversa de la 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];
	}
}

clásica pregunta de divide y vencerás algoritmo:

  • Hay n puntos en un plano de dos dimensiones, la forma de calcular rápidamente los dos punto más cercano?
  • Dos n- *n-matrices A, B, C la rapidez resuelto producto de dos matrices A = *B?

Ideas partición de aplicación en el procesamiento masivo de datos

Resolver el problema de gran volumen de datos para caber en la memoria RAM disponible, el uso divide y idea conquista de las grandes cantidades de datos establecidos de acuerdo con un cierto método se divide en varios conjuntos de datos pequeños, cada conjunto de datos pequeño se carga en memoria solo para resolver y, a continuación pequeña los datos combinados establecen en la recolección de datos, no sólo superar las limitaciones de memoria multihilo más procesadores o transformación de velocidad

Por ejemplo, para ordenar el orden de 10 GB, puede escanear de nuevo órdenes, basado en la cantidad, la cantidad se divide en varias secciones de archivo de 10 GB, por ejemplo, en otro documento de entre 1 a 100 101 a 200, y así sucesivamente, cada pequeño archivo se puede cargar individualmente en memoria de clasificación, fusión y finalmente ordenó un pequeño archivo, que es el último de los pedidos ordenados

¿Por qué es la esencia de MapReduce división ideológica y vencerás?

Si los datos a procesar se 1T, 10T, 100T, por lo que el uso del procesamiento de clúster paralelo es la tendencia

marco MapReduce es sólo un programador de tareas, además del tratamiento, la frecuencia también puede existir relaciones entre las tareas y aparece estadísticas de palabras de archivos de datos, no hay hombre niebla proceso de cierre, como por análisis web, segmentación, etc.

Publicado 75 artículos originales · ganado elogios 9 · vistas 9183

Supongo que te gusta

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