¿Qué algoritmos pueden ordenar los datos que se dividen en varias máquinas?

Un algoritmo extremadamente simple para esto (dado que asume que los datos en cada nodo están ordenados) es hacer una fusión n-way. Suponga que tiene una máquina cliente o puede elegir una de las máquinas para ser coordinador. Luego, si tiene un iterador sobre la lista ordenada de cada máquina, puede mantener una cola de prioridad mínima (montón) de cada uno de estos iteradores con el valor actual del iterador. En cada paso, haga estallar la parte superior del montón, extraiga el valor del iterador y escriba este número en la máquina que actualmente recibe escrituras (comenzando con 0, luego pasando a 1, 2, y así sucesivamente cuando complete el la cuota de números de la máquina actual para mantener), luego vuelva a insertar el iterador en el montón, ahora con la nueva clave del nuevo valor actual de ese iterador. Este proceso (suponiendo que sus lecturas de sus máquinas estén correctamente agrupadas y todas) requiere un paso sobre los datos con lecturas O (n) y requiere operaciones de CPU O (nlogm) donde m es el número de máquinas.

También notará que esto le brinda la capacidad de producir una secuencia ordenada de los conjuntos de datos combinados, no solo escribir los números en orden ordenado, por lo que si todo lo que desea es la capacidad de obtener los números en orden ordenado, no Ni siquiera necesito volver a escribirlos.

Debe usar una red de clasificación, que es esencialmente una red de máquinas que intercambian fragmentos de datos ordenados localmente entre sí hasta que alcanzan un estado ordenado globalmente.

Aquí hay diferentes formas de secuenciar esas operaciones de intercambio:

  1. Clasificador bitónico (wikipedia)
  2. Batcher impar-par mergesort (wikipedia)
  3. Red de clasificación por parejas (wikipedia)
  4. Red de clasificación AKS (pdf)

Primero intentemos resolver el problema para las máquinas (bloque básico) 2.
Cómo ordenar los números almacenados en las máquinas A y B. Supongamos que ambas máquinas han ordenado el mismo número de números.

Bloque Básico:
1) Mediana: utilice el algoritmo de mediana para encontrar la mediana de 2 conjuntos ordenados y encontrar la mediana de A y B.
2) Transferencia de datos: transfiera todos los elementos> mediana de A a B. De manera similar, transfiera todos los elementos 3) Ordenar localmente: Ordenar A y B individualmente.

Esto actuará como nuestro bloque básico de algoritmo, es decir, se le dará 2 secuencias ordenadas de números y se fusionará en orden ordenado.
Del mismo modo, tome 2 otro par, diga C y D y ordénelos usando el bloque básico anterior.

Aplique los mismos pasos descritos en el bloque básico en el enfoque de abajo hacia arriba.

1) Mediana: tenemos 2 secuencias ordenadas. Cada uno almacenado en el nodo A, B y C, D. Use el primer paso para encontrar la mediana de las 2 secuencias ordenadas
2) Transferencia de datos: transfiera los datos descritos en el paso 2.
3) Ordenar localmente: ahora, para ordenar la secuencia AB y CD, aplique el bloque básico para ordenar.

Aquí entiendo su pregunta: hay N máquinas, ordenadas linealmente y numeradas del 1 al N. Cada máquina almacena exactamente M elementos, de modo que los datos globales tienen N * M elementos. El objetivo es ordenar la matriz global a lo largo de la máquina, es decir, la máquina 1 contiene los M elementos más pequeños de los datos globales, máquina [i] .max