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

Electivo I

Unidad I

Estructuras y Compresin de datos

Semana 4

Grafos

Competencia General
Implementa algoritmos y estructuras de
datos avanzados, haciendo nfasis en los
algoritmos de internet, seguridad y redes.

Capacidades Especficas
Comprende la naturaleza de los
algoritmos asociados a estructuras de
datos avanzados.
Implementa
algoritmos
utilizando
estructura de datos avanzadas

Procedimientos
Implementar algoritmos fundamentales
para la solucin de problemas basados
en la teora de grafos.

Contenidos

Algoritmos sobre grafos


elementales
Conectividad
rbol de expansin
mnimo
Grafos ponderados
Camino mas corto

Algoritmos sobre grafos elementales

Glosario
Grafo: Un grafo es una coleccin
de vrtices y aristas.
Los vrtices son objetos simples que
pueden tener un nombre y otras
propiedades;
Una arista es una conexin entre
dos vrtices.

Camino: Un camino entre los


vrtices x e y de un grafo es una
lista de vrtices en la que dos
elementos
sucesivos
estn
conectados por aristas del grafo.

A
B

A
B

E
F

Algoritmos sobre grafos elementales

Glosario
Grafo conexo: Un grafo es conexo
si hay un camino desde cada
nodo hacia otro nodo del grafo.

Grafo no conexo: Esta constituido


por componentes conexos.

B
D

C
E

F
G

Camino simple: Es un camino en el


que no se repite ningn vrtice.

A
B

G
E

Ciclo: es un camino simple con la


caracterstica de que el primero y
el ultimo vrtices son el mismo.

F
A

E
F

Algoritmos sobre grafos elementales

Glosario
Grafo completo: Son los grafos con
todas las aristas posibles.

A
G

Grafo disperso: Tienen


relativamente pocas aristas.

Grafo denso: Les falta muy pocas


aristas de todas las posibles.

A
G

Algoritmos sobre grafos elementales

Representacin de un grafo
Matriz de adyacencia:
A

A
B
D
F

C
E

La matriz de
adyacencia
solo es
satisfactoria si
los grafos a
procesar son
densos.

Se construye un array de V*V


valores booleanos en el que a[x][y]
es igual a 1 si existe una arista
desde el vrtice x al y, caso
contrario es igual a 0.

Es de destacar que en realidad cada arista se representa con dos bits:


una arista que enlace x e y se representa con valores verdaderos tanto
en a[x][y] como en a[y][x].

Algoritmos sobre grafos elementales

Representacin de un grafo
Lista de adyacencia:
La lista de adyacencia se adapta mejor a lo casos en los que
los grafos a procesar no son densos.

B
C
G

Algoritmos sobre grafos elementales

Recorridos en un grafo
En una gran cantidad de problemas
con grafos, es necesario visitar
sistemticamente los vrtices y aristas
del grafo.
La bsqueda en PROFUNDIDAD y en
AMPLITUD,
son
dos
tcnicas
importantes de recorrido del grafo.

Algoritmos sobre grafos elementales

Bsqueda en Profundidad (BEP)


Se comienza en el vrtice inicial (vrtice con
ndice 1) que se marca como vrtice activo.

Hasta que todos los vrtices hayan sido visitados,


en cada paso se avanza al vecino con el menor
ndice siempre que se pueda, pasando este a ser
el vrtice activo.
Cuando todos los vecinos al vrtice activo hayan
sido visitados, se retrocede al vrtice X desde el
que se alcanz el vrtice activo y se prosigue
siendo ahora X el vrtice activo.

Algoritmos sobre grafos elementales

Bsqueda en Profundidad
a

b
c

c
d

c
e

c
e

La estructura utilizada para guardar los nodos a visitar en este


tipo de bsqueda es una pila o stack (de procedimiento
recursivo).

Algoritmos sobre grafos elementales

Bsqueda en Amplitud (BEA)


Se comienza en el vrtice inicial (vrtice con ndice
1) y se marca como vrtice activo, a diferencia
con la BEP ahora se visitan en orden creciente de
ndice todos los vecinos del vrtice activo antes de
pasar al siguiente.
Hasta que todos los vrtices hayan sido visitados,
en cada paso se van visitando en orden creciente
de ndice todos los vecinos del vrtice activo.
Cuando se han visitado todos los vecinos del
vrtice activo, se toma como nuevo vrtice activo
el primer vrtice X visitado despus del actual
vrtice activo.

Algoritmos sobre grafos elementales

Bsqueda en Amplitud
0

0
a

1
c

0
a

1
c

2
d

En la bsqueda en
amplitud se utiliza una
cola para guardar tales
nodos a visitar.

Algoritmos sobre grafos elementales

Uso de los Recorridos

Ambos recorridos se pueden usar para resolver los


siguientes problemas:

Probar que G es conectado.


Obtener un rbol de expansin de G.
Obtener los componentes conectados de G.
Obtener un camino entre dos vrtices dados de G, o
indicar que no existe tal camino.

El recorrido BEP se usa para:


Obtener un ciclo en G, o indicar que G no tiene ciclos.

El recorrido BEA se usa para:


Obtener para cada vrtice V de G, el nmero mnimo de
aristas de cualquier camino entre S y V .

Algoritmos sobre grafos elementales

Laberintos
La bsqueda en profundidad fue expuesta
formalmente como un mtodo para
recorrer laberintos.

El grafo se construye colocando un


vrtice en cada punto en el que existe
mas de un camino a tomar y a
continuacin se conectan los vrtices de
acuerdo con esos caminos.

La bsqueda en profundidad es apropiada para la bsqueda de un


elemento en el laberinto por una sola persona, dado que el siguiente
lugar a visitar esta siempre prximo;
La bsqueda en amplitud es mas apropiada para un grupo de
personas que buscan el mismo elemento desplazndose en todas las
direcciones a la vez

Conectividad

Problemtica
Se examinar una generalizacin de la conectividad
denominada biconectividad, cuyo inters reside en
conocer si hay mas de un medio de pasar de un vrtice
de un grafo a otro.
Grafo biconexo: Un grafo es
biconexo, si solo si, existen al menos
dos caminos diferentes que conecten
cada par de vrtices. De esta forma
si se suprime un vrtice y todas las
aristas que inciden en el, el grafo
permanece conexo.

A
G

Si para algunas aplicaciones es importante que un grafo sea


conexo, es tambin importante que permanezca conexo

Conectividad

Problemtica
Una versin particular del problema de la
conectividad, se da con frecuencia en lo
que concierne a la situacin dinmica en las
que las aristas se aaden al grafo una a una,
intercalando preguntas sobre si dos vrtices
determinados pertenecen o no a la misma
componente conexa.

El problema se denomina a veces


como unin-pertenencia.

Componentes conexas
Conectividad

De un grafo no dirigido
Se puede saber si es conexo, si no
lo, es se pueden conocer sus
componentes Conexas

Componentes conexas:
entre ellas son conexas

Conjunto W, de vrtices del grafo


En el cual hay camino desde
cualquier V1 a cualquier V2
Donde V1 y V2 pertenecen a W

CONEXO

B
C

E
D

B
C

E
D

No CONEXO

Conectividad

Biconectividad
A veces es til disear mas de una ruta entre puntos
de un grafo, aunque solo sea para identificar posibles
fallos en los puntos de conexin (vrtices). Esto nos
permitira tener recorridos alternativos por ejemplo
para llegar de una ciudad a otra.
A

Conectividad

Puntos de articulacin
Un punto de articulacin en un grafo conexo es un
vrtice que si se suprime romper el grafo en dos o
mas piezas.

En un grafo no dirigido conexo:

Existen vrtices que si se eliminan


Desconectan al Grafo y lo dividen en componentes conexas

Estos vrtices clave son puntos de articulacin

Si un grafo no tiene Punto de Articulacin


Es biconexo

La conectividad de un grafo
Es el numero de nodos que se necesitan eliminar para dejar a
un grafo desconectado

Puntos de articulacin
Conectividad

Ejemplo
A

B
C

D
Puntos de
Articulacin

Conectividad

rbol de expansin
Definicin: Un rbol T es
un rbol de expansin
de un grafo G si T es un
subgrafo que contiene a
todos los vrtices de G.

rbol de expansin
Para poder calcular los Puntos de Articulacin de un grafo

Conectividad

Hay que obtener el rbol de expansin

Este se obtiene

A partir del Recorrido en Profundidad

Ejemplo:

B
C

E
E

B
Arco en Retroceso:
Cuando se quiere
visitar un nodo que
ya ha sido visitado y
no es el padre

Como representar el rbol de


expansin
Conectividad

Un rbol en expansin
No es un rbol binario
Cada Vrtice puede tener 0, 1 o n hijos

Si no tomamos en cuenta los arcos en


retroceso, la representacin depende del Grafo
Matriz de Adyacencia -> Usar un arreglo
Lista de Adyacencia -> Una lista

La representacin mostrar quien es el padre de


cada nodo

rbol de expansin con Matriz


de Adyacencia
Conectividad

Los vrtices del grafo

Se encuentran en un arreglo
Representa un vrtice

Al representar el rbol de expansin


El padre(ndice) de cada nodo
puede almacenarse en un arreglo
Que tambin represente a los vrtices

Cada ndice del arreglo


Ej: A 0, B 1, etc.

040052
0 1 2 3 4 5

A B C D E F

rbol de expansin con Lista de


Adyacencia
B
Conectividad

Los vrtices del grafo


Se encuentran en una lista
Cada nodo representa un vrtice

A
D

Al representar el rbol de expansin


De cada nodo de esta lista solo nos interesa
conocer al padre

Se puede aadir un dato al nodo vrtice


Un enlace con el padre

F
A
B

C
D
E
F

Conectividad

Unin - Pertenencia
En algunas aplicaciones se desea simplemente
conocer si un vrtice x esta o no conectado a un
vrtice y de un grafo, sin que sea importante el
camino que los conecta.
Los grafos se corresponden de forma natural con los
conjuntos (colecciones de objetos): los vrtices representan
a los objetos y las aristas significan esta en el mismo
conjunto que.
C

A
D

Conjuntos
clases de
equivalencia

{A F D E}
{B C G}

Cada componente conexa


corresponde a una clase de
equivalencia diferente

Unin - Pertenencia

Conectividad

El aadir una arista se corresponde con la


combinacin de las clases de equivalencia
representadas por los vrtices a conectar.
El inters se centra en la pregunta fundamental x es
equivalente a y est x en el mismo conjunto
que y?. Esto se corresponde claramente con la
pregunta fundamental de los grafos est el vrtice
x conectado al vrtice y?
Dado un conjunto de aristas, se puede construir una
representacin por lista de adyacencia que corresponda al
grafo y utilizar la bsqueda en profundidad para asignar a
cada vrtice el ndice de su correspondiente conexa y
responder a las preguntas antes planteada con tal solo dos
accesos a arrays y una comparacin

Conectividad

Unin - Pertenencia
Por correspondencia con el problema de los
conjuntos, la adicin de una
nueva arista se
denomina una operacin de unin, y las preguntas
se denominan operaciones de pertenencia.
El objetivo es escribir una funcin que pueda verificar
si dos vrtices x e y pertenecen al mismo conjunto (o,
en representacin de grafos, a la misma componente conexa) y, en
caso de que sea as, que pueda unirlos en el mismo
conjunto (colocando una arista entre ellos y el grafo).
En lugar de construir una lista de adyacencia directa o
cualquier otra representacin de los grafos, es mas eficaz utilizar
una estructura interna orientada especficamente a la
realizacin de las operaciones unin y pertenencia.

Unin - Pertenencia

Conectividad

En resumen:
Esta estructura interna es un bosque de
arboles, uno por cada componente
conexa.
Se necesita poder encontrar si dos vrtices
pertenecen al mismo rbol y combinar dos
arboles en uno.

Grafos ponderados

Problemtica
Con frecuencia se desea modelar problemas
prcticos utilizando grafos en los que se asocia a las
aristas unos pesos o costes.
En un mapa de lneas areas, en el que las aristas
representan rutas de vuelo, los pesos pueden
representar distancias o tarifas. Estas situaciones
hacen aparecer de forma natural cuestiones como
el minimizar costes.

Grafos ponderados

Problemtica
Se examinara los algoritmos de dos de estos
problemas:
1. Encontrar la forma de conectar todos los puntos
al menor coste (problema del rbol de expansin
mnima).
2. Encontrar el camino de menor coste entre dos
puntos dados (problema del camino mas corto).
La forma de representar a los grafos ponderados es obvia.
En la representacin por matriz de adyacencia, la matriz puede
contener pesos de aristas en lugar de valores booleanos y
En la representacin por listas de adyacencia se puede aadir un
campo a cada elemento de la lista, a manera de peso.

Grafos ponderados - AEM

rbol de Expansin Mnimo


(AEM)
Un rbol de expansin
mnimo de un grafo
ponderado es una
coleccin de aristas
que conectan todos
los vrtices y en el que
la suma de los pesos
de las aristas es al
menos inferior a la
suma de los pesos de
cualquier
otra
coleccin de aristas
que conecten todos
los vrtices.

Grafos ponderados - AEM

Algoritmo genrico
Se puede construir el rbol de expansin
mnimo comenzando en cualquier vrtice
y tomando siempre el vrtice mas prximo
de todos los que se hayan elegido.
En otras palabras; se busca la arista de
menor peso entre todas las que conectan
vrtices que ya estn en el rbol, con
vrtices que no lo estn todava, y despus
se aade al rbol la arista y el vrtice a los
que conduce la anterior.

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Tengamos el siguiente grafo no dirigido.

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
En primer lugar usaremos el mtodo MakeSet de
unin-find para inicializar cada componente,
obteniendo las siguientes componentes conexas
iniciales:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Ahora el siguiente paso es ordenar las aristas del
grafo en orden ascendente:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Lo siguiente ser recorrer todas las aristas ya ordenadas y verificar si sus
vrtices estn o no en la misma componente.
La primera arista a verificar es la que une a los vrtices 8 y 7, verificamos
si estn en la misma componente, para ello hacemos Find(8) , Find(7):

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Como podemos observar en la tabla y en la misma imagen no estn
en la misma componente conexa, por tanto esta arista es valida para
el rbol de expansin mnima (AEM) as que unimos los vrtices por el
mtodo de Union( 8 , 7 ).

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Observamos la tabla de Union-Find y vemos que Find(3) != Find(9).
Entonces es posible realizar la unin de ambas componentes:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
En la imagen podemos observar que ambos vrtices no estn en la
misma componente, por tanto realizamos la Union( 6 , 7 ):

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista, los vrtices 1 y 2 no estn en la
misma componente conexa:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Realizamos la Union(1,2):

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Al observar la imagen los vrtices 3 y 6 estn en distinta componentes
conexas. Entonces realizamos la Union(3,6) y actualizamos la tabla de
Union-Find.

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

En
este
caso
si
observamos la imagen los
vrtices 7 y 9 estn en la
misma
componente
conexa; asimismo en la
tabla de Union-Find el
elemento raz del vrtice
7 es el mismo que el del
vrtice
9
por
ello
afirmamos que estn el a
misma
componente
conexa, por lo tanto no
habr que realizar la
unin de ambos vrtices.
Con esto evitamos tener
ciclos en el rbol de
expansin mnima.

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Al observar la imagen los vrtices 3 y 4 no estn en la misma
componente conexa por lo tanto realizamos la Union(3,4) en el grafo:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Los vrtices 8 y 9 estn en la misma componente conexa por lo tanto
no realizamos Unin de vrtices. Continuemos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Los vrtices 1 y 8 estn diferentes componentes. Realizamos la
Union(1,8) en el grafo:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Continuamos con la siguiente arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Los vrtices 2 y 3 estn en la misma componente conexa por lo tanto
no realizamos Union de componentes. Continuamos con la siguiente
arista:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Los vrtices 4 y 7 no estn en la misma componente conexa,
realizamos Union(4,5) en el grafo:

Grafos ponderados - AEM

Algoritmo de Kruskal paso


a paso
Como podemos observar ya estn todos los vrtices del grafo
conectados as que al momento de continuar viendo las dems
aristas ordenadas siempre tendremos e l caso de que ya estn en la
misma componente conexa por lo tanto el rbol de Expansin Mnima
para el grafo es el siguiente:

El peso total del rbol de expansin mnima para el grafo mostrado


es 39.

Grafos ponderados - AEM

Verificacin del Arbol de


Expansin Mnima (AEM)
Para que sea un AEM vlido, el nmero de aristas debe ser
igual al nmero de vrtices 1. Esto se cumple debido a que el
AEM debe poseer todos los vrtices del grafo ingresado y
adems no deben existir ciclos. Si vemos el ejemplo antes
explicado tenemos en el AEM:

Nmero de Aristas = 8
Nmero de Vrtices = 9

Cumple con lo dicho -> 9 1 = 8


por tanto tenemos un AEM vlido

Grafos ponderados - CMC

Camino mas corto (CMC)


El problema del camino mas corto consiste
en encontrar entre todos los caminos que
conectan a dos vrtices x e y dados de un
grafo ponderado el que cumple con la
propiedad de que la suma de las
ponderaciones de todas las aristas sea
mnima.
Si las ponderaciones son todas iguales a 1,
entonces el problema sigue siendo
interesante: ahora consiste en encontrar el
camino que contenga al mnimo de aristas
que conecten a x e y.

Grafos ponderados - CMC

Algoritmo de Dijkstra
El algoritmo de Dijkstra determina la ruta ms
corta desde un nodo origen hacia los dems
nodos para ello es requerido como entrada
un grafo cuyas aristas posean pesos.

Grafos ponderados - CMC

Algoritmo de Dijkstra
Como trabaja:
Primero marcamos todos los vrtices como no
utilizados. El algoritmo parte de un vrtice
origen que ser ingresado, a partir de ese
vrtices evaluaremos sus adyacentes, como
dijkstra usa una tcnica greedy -La tcnica
greedy utiliza el principio de que para que un
camino sea ptimo, todos los caminos que
contiene tambin deben ser ptimos- entre
todos los vrtices adyacentes, buscamos el
que est ms cerca de nuestro punto origen, lo
tomamos como punto intermedio y vemos si
podemos llegar ms rpido a travs de este
vrtice a los dems. Despus escogemos al
siguiente ms cercano (con las distancias ya
actualizadas) y repetimos el proceso. Esto lo
hacemos hasta que el vrtice no utilizado ms
cercano sea nuestro destino. Al proceso de
actualizar las distancias tomando como punto
intermedio al nuevo vrtice se le conoce como
relajacin.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso

Tengamos el siguiente grafo, cuyos ID estn en color negro encima de


cada vrtice, los pesos estn en color azul y la distancia inicial en cada
vrtice es infinito.

Hallaremos la distancia mnima partiendo del vrtice 1 hacia los otros


vrtices.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Inicializamos los valores de nuestros arreglos.

Donde:

Vrtices: ID de los vrtices.


Distancia[ u ]: Distancia mas corta desde vrtice inicial a vrtice con ID = u.
Visitado[ u ]: 0 si el vrtice con ID = u no fue visitado y 1 si ya fue visitado.
Previo[ u ]: Almacenara el ID del vrtice anterior al vrtice con ID = u, servir
para impresin del camino mas corto.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
De acuerdo al vrtice inicial que elijamos cambiara la distancia inicial,
por ejemplo la ruta ms corta partiendo del vrtice 1 a todos los dems
vrtices:

El vrtice 1 es visitado, la distancia de vrtice 1 al vrtice 1 es 0


por estar en el mismo lugar.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Hasta este momento la tabla quedara de la siguiente manera.

Ahora vemos sus


adyacentes que no
hayan sido visitados.
Tendramos 2 y 4.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Evaluamos primero para el vrtice 2

Vemos que la distancia actual desde el vrtice inicial a 2 es ,


verifiquemos el paso de relajacin:
(distancia[ 1 ] + 7) < distancia[ 2 ]

->

0+7<

->

7<

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
El paso de relajacin es posible realizarlo entonces actualizamos la
distancia en el vrtice 2 y agregando el vrtice en la cola de prioridad
con nueva distancia quedando:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Ahora evaluamos al siguiente adyacente que es el vrtice 4:

De manera similar al anterior vemos que la distancia actual desde el


vrtice inicial a 4 es , verifiquemos el paso de relajacin:
(distancia[ 1 ] + 2) < distancia[ 4 ]

->

0+2<

->

2<

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
El paso de relajacin es posible realizarlo entonces actualizamos la
distancia en el vrtice 4 quedando:

En cuanto a la cola de prioridad como tenemos un vrtice con


menor peso, este nuevo vrtice ira en el tope de la cola:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Revisamos sus adyacentes no visitados que serian los vrtices 2, 3 y 5.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Evaluamos primero para el vrtice 2

Ahora vemos que la distancia actual del vrtice inicial al vrtice 2 es


7, verifiquemos el paso de relajacin:
(distancia[ 4 ] + 3) < distancia[ 2 ]

->

2+3<7

->

5<7

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
En esta oportunidad hemos encontrado una ruta mas corta partiendo
desde el vrtice inicial al vrtice 2, actualizamos la distancia en el
vrtice 2 y actualizamos el vrtice previo al actual quedando:

En cuanto a la cola de
prioridad como tenemos un
vrtice con menor peso este
nuevo vrtice ira en el tope de
la cola, podemos ver que
tenemos 2 veces el mismo
vrtice pero como usamos una
tcnica greedy siempre
usaremos el valor ptimo:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Continuamos con los Vrtices 3 y 5, como tienen valor si ser posible
relajarlos, por lo que sera similar a los pasos iniciales solo que en los
pasos iniciales distancia[ 1 ] era 0 en este caso distancia[ 4 ] es 2,
quedando:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Hemos terminado de evaluar al vrtice 4, continuamos con el tope de
la cola que es vrtice 2, el cual marcamos como visitado.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Los adyacentes no visitados del vrtice 2 es el vrtice 3.

Ahora vemos que la distancia actual del vrtice inicial al vrtice 3 es


10, verifiquemos el paso de relajacin:
(distancia[ 2 ] + 1) < distancia[ 3 ]

->

5 + 1 < 10

->

6 < 10

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
En esta oportunidad hemos encontrado una ruta mas corta partiendo
desde el vrtice inicial al vrtice 3, dicha ruta sera 1 -> 4 -> 2 -> 3 cuyo
peso es 6 que es mucho menor que la ruta 1 > 4 -> 3 cuyo peso es 10,
actualizamos la distancia en el vrtice 3 quedando:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
El siguiente vrtice de la cola de prioridad es el vrtice 3 y su nico
adyacente no visitado es el vrtice 5.

Vemos que la distancia actual del vrtice inicial al vrtice 5 es 7,


verifiquemos el paso de relajacin:

(distancia[ 3 ] + 5) < distancia[ 5 ]

->

6+5<7

->

11 < 7

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
En esta oportunidad no se cumple por lo que no relajamos el vrtice 5.
La tabla en cuanto a distancias no sufre modificaciones y no
agregamos vrtices a la cola:

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Ahora tocara el vrtice 2 pero como ya fue visitado seguimos
extrayendo elementos de la cola, el siguiente vrtice ser el 5.

Grafos ponderados - CMC

Algoritmo de Dijkstra paso


a paso
Al ser el ultimo vrtice a evaluar no posee adyacentes sin visitar por lo
tanto hemos terminado el algoritmo. En el grafico anterior observamos
que 2 aristas no fueron usadas para la relajacin, las dems si fueron
usadas. La tabla final quedara de la siguiente manera:

De la tabla si deseo saber la distancia mas corta del


vrtice 1 al vrtice 5, solo tengo que acceder al valor
del arreglo en su ndice respectivo (distancia[ 5 ]).

Grafos ponderados - CMC

Algoritmo de Dijkstra
Impresin camino encontrado
En el proceso anterior usbamos el arreglo previo[ u ] para almacenar
el ID del vrtice previo al vrtice con ID = u, ello me sirve para formar el
rbol de la ruta mas corta y adems me sirve para imprimir caminos de
la ruta mas corta.

Grafos ponderados - CMC

Algoritmo de Dijkstra
Impresin camino encontrado
Para imprimir el camino mas corto deseado usamos el arreglo previo[ u ],
donde u tendr el ID del vrtice destino, o sea si quiero imprimir el
camino mas corto desde vrtice 1 -> vrtice 3 partir desde previo[ 3 ]
hasta el previo[ 1 ].
Veamos grficamente el funcionamiento, desde el grafo comenzamos
en 3

Grafos ponderados - CMC

Algoritmo de Dijkstra
Impresin camino encontrado
El previo de 3 es el vrtice 2, por lo tanto ahora evalu 2:

Grafos ponderados - CMC

Algoritmo de Dijkstra
Impresin camino encontrado
Ahora el previo de 2 es el vrtice 4:

Grafos ponderados - CMC

Algoritmo de Dijkstra
Impresin camino encontrado
El previo de 4 es el vrtice inicial 1

Como el previo de 1 es -1 terminamos el recorrido, ahora en el


retorno de las llamadas recursivas imprimo el camino: 1 4 2 3

Electivo I
Unidad I

Estructuras y Compresin de datos

Semana 4

Grafos

Вам также может понравиться