Вы находитесь на странице: 1из 18

PROGRAMACIN PARALELA

EN
ALGORITMOS SOBRE
GRAFOS

Contenidos

Introduccin y representacin de grafos


Algoritmos para grafos densos

rboles de expansin

Algoritmo de Prim

Problemas de caminos mnimos

Con un solo origen

Entre todos los pares de nodos

Algoritmo de Dijkstra
Algoritmo de Dijkstra

Formulacin de origen divido

Formulacin de origen paralelo


Algoritmo de Floyd

Algoritmos para grafos esparcidos

Contenidos

Introduccin y representacin de grafos


Algoritmos para grafos densos

rboles de expansin

Algoritmo de Prim

Problemas de caminos mnimos

Con un solo origen

Entre todos los pares de nodos

Algoritmo de Dijkstra
Algoritmo de Dijkstra

Formulacin de origen divido

Formulacin de origen paralelo


Algoritmo de Floyd

Algoritmos para grafos esparcidos

Introduccin y
representacin de grafos
(I)

Un grafo G es una tupla G=(V,A), donde V es un conjunto de vrtices


y A es un conjunto de aristas o arcos.
Cada arista es un par (v,w) donde v,w pertenecen a V.
TERMINOLOGA

Grafo no dirigido: las aristas no estn ordenadas.


Grafo dirigido: los pares estn ordenados.
Un vrtice w es adyacente a otro v si y slo si (v,w) pertenece a A.
Camino de un vrtice w1 a wq: es una secuencia w1, w2 wq V, tal que
todas las aristas (w1,w2), , (wq-1, wq) A.
Longitud de un camino: n aristas del camino.
Ciclo: es un camino cuyo primer y ltimo vrtice son iguales.
Un grafo es conexo si hay un camino entre cualquier par de vrtices.
Un grafo es completo si existe una arista entre cualquier par de vrtices.
Un grafo est etiquetado si asociamos a cada arista un peso o un valor.
Un subgrafo de G = (V, A) es un grafo G = (V, A) tal que V es un
subconjunto de V y A es un subconjunto de A.

Introduccin y
representacin de grafos
(II)

REPRESENTACIONES

Matrices de adyacencia.

Las aristas se representan con una matriz M[nodo,nodo]


de booleanos, donde M[v,w]=1 si y slo si (v,w) A.
Si el grafo esta etiquetado, la matriz ser de elementos
de ese tipo. Tomar un valor nulo si no existe ese arco.
Si el grafo es no dirigido, la matriz es simtrica.
til para grafos densos (|A| |V|2).

Introduccin y
representacin de grafos
(y III)

Listas de adyacencia.

Para cada nodo de V tendremos una lista de aristas que


parten de ese nodo. Estas listas se guardan en un array de
nodos cabecera.
Si el grafo esta etiquetado, se aade un nuevo campo a los
elementos de la lista.
Si el grafo es no dirigido, entonces cada arista (v,w) se
representar dos veces, en la lista de v y en la de w.
til para grafos esparcidos (|A| |V|2)

Contenidos

Introduccin y representacin de grafos


Algoritmos para grafos densos

rboles de expansin

Algoritmo de Prim

Problemas de caminos mnimos

Con un solo origen

Entre todos los pares de nodos

Algoritmo de Dijkstra
Algoritmo de Dijkstra

Formulacin de origen divido

Formulacin de origen paralelo


Algoritmo de Floyd

Algoritmos para grafos esparcidos

rboles de expansin:
Algoritmo de Prim (I)

Un rbol de expansin de un grafo no


dirigido G=(V,A) y conexo, es un subgrafo
G=(V,A) no dirigido, conexo y sin ciclos.
Importante: contiene todos los vrtices de G.
El algoritmo de Prim intenta encontrar un
rbol de expansin de un grafo, cuyas aristas
sumen el peso mnimo.

rboles de expansin:
Algoritmo de Prim (II)

rboles de expansin:
Algoritmo de Prim (III)

Mtodo de paralelizacin.

Supongamos p procesos y n
vertices. El conjunto V se
divide en p subconjuntos
usando el mapping de
bloques de 1 dimensin.
Cada subconjunto tiene n/p
vertices consecutivos, y el
trabajo de cada
subconjunto se asigna a
procesos diferentes. Cada
proceso Pi almacena la
parte del array d que
corresponde a Vi.

rboles de expansin:
Algoritmo de Prim (IV)
Cada proceso Pi realiza el
clculo de di[u], y el
mnimo global se obtiene
sobre todos los di[u]
mediante una operacin
de reduccin que se
almacena en P0. El proceso
P0 ahora almacena el
vrtice u, el cual se inserta
en VT. A continuacin el
proceso P0 hace una
operacin de broadcast de
u, notificando a todos los
procesos que actualicen
los valores de d[v] para
sus vrtices locales. El
proceso Pi que contenga a
u ser el que lo introduzca
en Vt.

rboles de expansin:
Algoritmo de Prim (y V)

Al paralelizar el algoritmo de Prim


se logra un tiempo de ejecucin de:
Tsequencial = (n2)
Tparalelo = (n2 / p) + (n log p)
ejecucin

comunicacin

Contenidos

Introduccin y representacin de grafos


Algoritmos para grafos densos

rboles de expansin

Algoritmo de Prim

Problemas de caminos mnimos

Con un solo origen

Entre todos los pares de nodos

Algoritmo de Dijkstra
Algoritmo de Dijkstra

Formulacin de origen divido

Formulacin de origen paralelo


Algoritmo de Floyd

Algoritmos para grafos esparcidos

Problemas de caminos
mnimos con un solo
origen

Algoritmo de Dijkstra.

Es muy similar a la
paralelizacin del
Algoritmo de Prim.La
matriz de adyacencia de
pesos se particiona
usando el mapping de
bloques de 1-D. A cada
uno de los p procesos se
le asignan n/p columnas
consecutivas de la matriz
de adyacencia. Durante
cada iteracin se lleva a
cabo el clculo y la
comunicacin entre
procesos. El tiempo de
ejecucin coincide con el
del algoritmo de Prim.

Contenidos

Introduccin y representacin de grafos


Algoritmos para grafos densos

rboles de expansin

Algoritmo de Prim

Problemas de caminos mnimos

Con un solo origen

Entre todos los pares de nodos

Algoritmo de Dijkstra
Algoritmo de Dijkstra

Formulacin de origen divido

Formulacin de origen paralelo


Algoritmo de Floyd

Algoritmos para grafos esparcidos

Problemas de caminos
mnimos entre todos los
pares (I)

Algoritmo de Dijkstra.

Formulacin del origen dividido.

Eficiente si el nmero de procesos no supera al


nmero de vertices (p<=n).
Utiliza n procesos. Cada proceso Pi encuentra las
rutas ms cortas desde el vrtice vi a todos los
dems vertices mediante el algoritmo de Dijkstra
secuencial. No se necesita comunicacin entre
procesos.
Tsequencial = (n3)
Tparalelo = (n2)

Problemas de caminos
mnimos entre todos los
pares (y II)

Formulacin del origen paralelo.


Eficiente si el nmero de procesos es superior al
nmero de vertices (p>n).

Primero paralelizamos el problema asignando cada


vertice a un conjunto de procesos distintos (p/n).
Despus paralelizamos el algoritmo para un solo
origen mediante el uso de un conjunto de p/n
procesos para resolverlo. A diferencia de la
formulacin de origen divido, si hay cierta
sobrecarga por la comunicacin.
Tsequencial = (n3)

Tparalelo = (n3 / p) + (n log p)


ejecucin

comunicacin

BIBLIOGRAFA

Kumar, Grama, Gupta, Karypis: Introduction to Parallel


Computing. Design and Analysis of Algorithms. The
Benjamin Cumming Publishing Company. 1994

Gins Garcia Mateos. Apuntes Algoritmos y


Estructura de Datos.