4. Introducción
El problema de las N reinas consiste en
situar N reinas en un tablero de ajedrez de
NxN sin que se amenacen entre ellas.
Una reina amenaza a otra si está en la
misma fila, columna o diagonal.
4
7. Representación
Para representar el problema, se podría
plantear como una matriz de NxN
enteros, donde un 1 significa que la reina
está en esa posición, y un 0 que la casilla
está vacía.
Representación ineficiente, se usa más
espacio del necesario.
7
8. Representación
Otra opción es hacer uso de un vector de
N enteros, donde cada posición
corresponde a una columna del tablero, y
el entero representa la fila en la que se
encuentra la reina dentro de dicha
columna.
Más eficiente y más sencilla de usar.
8
9. Soluciones
Como cada posición del vector representa
una columna, no pueden situarse dos
reinas en la misma columna.
Si el vector tiene varios enteros iguales,
quiere decir que esas reinas están en la
misma fila, por lo que sería incorrecta la
solución.
Queda el problema de las diagonales.
9
10. Soluciones
Dos reinas están en la misma diagonal si:
Mismo valor de fila - columna
(Diagonal descendente)
Mismo valor de fila + columna
(Diagonal ascendente)
10
13. Resolución secuencial
La solución secuencial se podría plantear
como un backtracking.
Complejidad: O(n!)
Problema: Poco eficiente, para tamaño
grande del tablero puede tardar
demasiado.
13
14. Resolución secuencial
Otra posibilidad es usar una bolsa de
tareas.
Eliminamos los vectores que no sean
prometedores, es decir, que al tratar de
situar una nueva reina ésta amenace a
alguna otra.
14
15. Resolución secuencial
Dada una configuración inicial del
tablero, se intenta colocar una reina en
cada fila de la columna actual,
generándose nuevas configuraciones que
se insertan en la bolsa de tareas.
Esta será la versión tomada como base
para la solución paralela.
15
17. Resolución paralela
La solución inmediata en OpenMP sería
que cada hilo tomase una tarea de la
bolsa, genere las tareas correspondientes
a partir de ella, y repetir esto hasta que no
queden tareas.
17
18. Resolución paralela
En MPI se puede plantear de forma
similar, con gestión de tareas, solo que
habrá un nodo maestro que controle las
tareas por realizar, y los demás nodos son
los encargados de pedir tareas y enviar
las nuevas al master.
En este caso pueden darse varias
opciones:
18
19. Resolución paralela
El nodo maestro genera una sola
configuración inicial, y cada uno de los
nodos siguientes van generando nuevas
configuraciones e insertándolas en la
bolsa.
En este caso se producen grandes
cantidades de comunicaciones.
19
20. Resolución paralela
Otra opción es que el nodo maestro
genere una cantidad inicial de tareas a
resolver, y luego las reparta entre todos
los nodos.
El reparto puede ser dinámico o estático.
En este caso las comunicaciones se
reducen al principio para repartir, y al
final para obtener los resultados.
20
22. Conclusiones
A priori, antes de realizar los desarrollos
y las pruebas, se pueden sacar una serie
de conclusiones interesantes.
La opción de una tarea inicial y que cada
nodo genere y añada a la bolsa parece más
interesante para OpenMP, por la cantidad de
comunicaciones que se producirían en MPI.
22
23. Conclusiones
Si en la versión con tareas iniciales, el reparto
es estático, se puede producir desequilibrio en
la carga de trabajo.
El reparto de las tareas de forma dinámica
puede solucionar el problema del
desequilibrio en la cantidad de tareas, pero
ampliará el número de comunicaciones entre
el nodo maestro y el resto.
23