Para ampliar mis comentarios anteriores, un problema análogo es el de cubrir un gráfico con camarillas. Considere la relación sobre el conjunto F de archivos como (a,b) está en la relación si los archivos (distintos) a y b deben ser procesados. El resultado es como un grafo dirigido con F como conjunto de vértices y la relación determinando las aristas. Ahora, para p y elemento del conjunto P de unidades de procesamiento, se quiere asociar p a alguna de las aristas. (De forma más general, se podría asignar un conjunto o secuencia de miembros de P a una arista para indicar cómo el par de archivos a procesar).
La configuración anterior es general y quizás más compleja de lo necesario, pero debería darle ideas sobre cómo escribir el código para poder generalizar cuando el cliente lo pida. Simplifiquemos el cuadro haciendo que el gráfico sea no dirigido, asignando sólo un procesador a cada arista (así que una simple coloración de aristas en lugar de una coloración de lista), y pretendamos que las camarillas son importantes (pequeños subconjuntos G de F y todas las aristas entre dos puntos cualesquiera están presentes) por alguna razón, digamos que la optimización del acceso al disco significa que un procesador debe ceñirse a dos discos, y G puede representar un subconjunto de los archivos en esos dos discos.
Ahora tenemos una situación en la que queremos cubrir, posiblemente con solapamiento, todas las aristas de F (que suponemos que tiene todas las aristas posibles) por camarillas más pequeñas, quizás del mismo tamaño. Entre en el Repositorio de Cobertura de La Jolla: una colección de diseños de cobertura donde una lista de subconjuntos de tamaño k de un conjunto de tamaño v se enumeran de manera que cada conjunto de tamaño t (para este problema, t=2), está cubierto o un subconjunto de uno de los conjuntos de tamaño k. Uno puede dividir esta lista entre varios procesadores para asegurar que todos los procesadores asignen las tareas a realizar en todos los pares de archivos.
Como no me gusta la repetición, mantendría una estructura compartida por todos los procesadores o utilizada por un maestro para asignar a un trabajador que enumeraría todos los pares de archivos y la información de qué par está siendo (o va a ser) procesado por qué procesador. Por supuesto, podría cambiar de opinión dependiendo de la disponibilidad de recursos y del tamaño del problema.
Gerhard "O para hacerme feliz" Paseman, 2012.07.15