Sei sulla pagina 1di 124

Teora de Grafos

CONCEPTO
Lateora
de
grafos(tambin
llamadateora de las grficas) es un
campo de estudio de las matemticas y
las ciencias de la computacin, que
estudia
las
propiedades
de
los
grafos(tambin llamadasgrficas) que
son estructuras que constan de dos
partes, el conjunto de VERTICES, nodos
o puntos; y el conjunto de ARISTAS,
lneas o lados que pueden ser
orientados o no.

Definicin
Grafo: un grafo es un conjunto, no vaco,
de objetos llamados nodos (o vrtices) y
una seleccin de pares de nodos,
llamados ejes (o aristas) donde estos
pueden ser orientados o no.
Un grafo G = (V,X), donde V es un
conjunto nodos y X es un subconjunto
del conjunto de pares no ordenados de
elementos distintos de V.

Definicin
Nodos / Vrtices: constituyen los
objetos de la situacin a representar.
Ejemplo: V = {A,B,C,D,E}
Ejes / Aristas /Arcos: conforman las
relaciones entre un par de objetos
representados por los nodos.
Ejemplo: X = {(A,B),(A,C),(B,C),(B,E),
(C,D),(D,E)}
Tanto los nodos como ejes, pueden tener
atributos cuantitativos y/o cualitativos
(variables de cualquier tipo).

Ejemplos

Tipos:
Grafo simple:
Multigrafo:

Pseudografo:

Grafo dirigido:

Terminologa:
Etiquetado. Distincin que se hace a los vrtices
y/o aristas mediante una marca que los hace
unvocamente distinguibles del resto, es decir,
asignarle a cada vrtice o arista un nombre.
Adyacencia. Se dice que dos vrtices son
adyacentes si hay una arista que los conecte
entre ellos.
Grado de un vrtice. El grado de un vrtice es
un nmero natural de 0 al infinito que designa el
nmero de aristas le conectan con otros vrtices.

Incidencia. Una arista es incidente a un vrtice


si sta lo une a otro.
Ponderacin. Corresponde a una funcin que a
cada arista le asocia un valor (costo, peso,
longitud, etc.), para aumentar la expresividad del
modelo.
Camino. Un camino es una secuencia de aristas
que comienzan en un vrtice del grafo y recorren
parte o la totalidad del grafo conectando vrtices
adyacentes.

Circuito. Cuando existe un camino que empieza


y acaba en el mismo vrtice.
Isomorfismo. Si dos grafos son isomorfos slo
vara la apariencia, es decir, que se mantienen
las adyacencias, estructura, caminos, ciclos,
nmero de vrtices y nmero de aristas.
Conexo. Un grafo es conexo si tiene una nica
componente conexa, es decir, todos los vrtices
del grafo estn relacionados.

Familias de grafos simples:


Grafo regular:
Grafo completo:

Grafo complementario:
Grafo original

Grafo bipartito:
Grafo bipartito completo:

Grafo complementario

rboles:
Un rbol es un grafo
conexo y sin ciclos o
lazos, es decir, un grafo
simple.

Terminologa:
Bosque. Un rbol es considerado un bosque si
sus componentes conexas son rboles.
rbol generador. Un rbol generador de un
grafo conexo es un subgrafo conexo con el menor
nmero posible de aristas y con todos los vrtices
del grafo original. No tiene porque ser nico.
rbol generador mnimo. El rbol generador
mnimo es un rbol generador construido sobre
un grafo conexo ponderado con un criterio de
seleccin de aristas definido por su menor peso.

Raz. Un rbol con raz es un rbol en el que uno


de sus vrtices ha sido designado como la raz y
todas las aristas estn colocadas alejndose de
dicha raz.
Padre. Se considera padre de un vrtice al
vrtice adyacente superior.
Hijo. Se consideran hijos de un vrtice a todos
los vrtices comunicados por una arista y
adyacentes.
Hoja. Son los vrtices que no tienen hijos.

Explicacin del modelo:


Para indexar los sitios de la red de
Internet, buscadores como Google, Hotbot
y Lycos exploran sistemticamente la Red
comenzando en sitios conocidos. Estos
buscadores utilizar los contenidos. Las
araas web utilizan tanto la bsqueda en
anchura como en profundidad para crear
ndices.

Ejemplo de bsqueda en profundidad partiendo


del siguiente grafo explicaremos una bsqueda
en profundidad:

Elegimos empezar por el vrtice a para mantener


un orden alfabtico, podra empezarse por
cualquier vrtice del rbol en este caso, en otro
rbol en el que la raz fuera ms clara debera ser
el vrtice raz el primero.

Siguiendo las aristas dirigidas de a nos


encontramos con los siguientes caminos: 1)
(a,b,c,g) y (a,b,f,e) lo que nos da como resultado
el siguiente rbol:
De a la arista dirigida nos lleva a
b, de b, tenemos dos caminos,
escogemos primero por orden
alfabtico ir a c y de este vrtice
a g; como no tenemos ms
caminos, volvemos a b y
continuamos de b a f y de f a e.
Nuevamente no tenemos por
donde seguir. Esta parte est
completa.

Ahora elegimos el vrtice d, nuevamente por


orden alfabtico para continuar nuestra
bsqueda. El camino resultante es (d,h,l,k,j).
d

Esta vez es mucho ms sencillo


encontrar el camino, de d a h, de
h a l, de l a k y de k a j.

h
j
l
k
j

El nico vrtice no recogido por nuestros dos rboles


es i, para este resultado de una bsqueda los
rboles son los mostrados; una bsqueda que
comenzara en otro vrtice dara lugar a otros
rboles.

Representacin de Grafos
Dirigidos
Una representacin comn para un grafo
dirigido G = (V,A) es la matriz de adyacencia.
La matriz de adyacencia para G es una matriz A
de dimensin n x n, de elementos booleanos,
donde A[i,j] es verdadero si y slo si existe un
arco que vaya del vrtice i al j.
Con frecuencia se exhibirn matrices adyacencias
con 1 para verdadero y 0 para falso.

19

Representacin de Grafos Dirigidos


(cont.)
Otra representacin, relacionada con la
anterior, para un grafo dirigido G = (V,A) es
la matriz de adyacencia etiquetada.
La matriz de adyacencia etiquetada para G
es una matriz A de dimensin n x n, donde
A[i,j] es la etiqueta del arco que va del
vrtice i al j.
Si no existe un arco de i a j debe emplearse
como entrada para A[i,j] un valor que no pueda
ser una etiqueta vlida.
20

Representacin de Grafos Dirigidos


(cont.)
La ventaja de usar una matriz de adyacencia es que el
tiempo de acceso requerido a un elemento es
independiente del tamao de V y A.
La desventaja de usar una matriz de adyacencia es
que requiere un espacio (n2) aun si el grafo tiene
menos de n2 arcos.
Slo leer o examinar la matriz puede llevar un tiempo O(n2).

Para evitar esta desventaja, se puede utilizar otra


representacin comn para un grafo dirigido G = (V,A)
llamada representacin con lista de adyacencia.

21

Representacin de Grafos Dirigidos


(cont.)
La lista de adyacencia para un vrtice i es una lista,
en algn orden, de todos los vrtices adyacentes a i.
Se puede representar G por medio de un arreglo CABEZA,
donde CABEZA[i] es un apuntador a la lista de adyacencia
del vrtice i.

La representacin con lista de adyacencia de un grafo


dirigido requiere un espacio proporcional a la suma
del nmero de vrtices ms el nmero de arcos.
Se usa bastante cuando el nmero de arcos es mucho
menor que n2.
Una desventaja potencial es que puede llevar un tiempo
O(n) determinar si existe un arco del vrtice i al vrtice j.
22

Representacin de Grafos Dirigidos


(cont.)

23

Grafos No Dirigidos
Parte de la terminologa para grafos dirigidos es
aplicable a los no dirigidos.
Un grafo no dirigido G consiste en un conjunto
finito de vrtices V y un conjunto de aristas A G
= (V,A).
Los vrtices se denominan tambin nodos o puntos.
Las aristas es un par no ordenado de vrtices; la arista
(v,w) = (w,v)

Los vrtices v y w son adyacentes si es una arista


(v,w).
Se dice que la arista (v,w) es incidente sobre los
vrtices v y w.
24

Grafos No Dirigidos (cont.)


Un camino en un grafo no dirigido es una
secuencia de vrtices v1, v2, , vn, tal que
(v1,vi+1) es una arista para 1 i < n.
Un camino simple es un camino en donde
todos los vrtices, excepto tal vez el primero
y el ltimo, son distintos.
La longitud del camino es n 1, el nmero
de aristas a lo largo del camino.
Un grafo es conexo si todos sus pares de
vrtices estn conectados.
25

Grafos No Dirigidos (cont.)


Sea G = (V,A) un grafo con conjunto de
vrtices V y conjunto de aristas A. Un
subgrafo de G es un grafo G = (V,A)
donde:
V es un subconjunto de V.
A consta de las aristas (v,w) en A tales que v y
w estn en V.

Si A consta de todas las aristas (v,w) en A,


tal que v y w estn en V, entonces G se
conoce como un subgrafo inducido de G.
26

Grafos No Dirigidos (cont.)


En el grafo G = (V,A), donde V =
{a,b,c,d} y A = {(a,b),(a,c), (b,c),
(b,d),(c,d)}, y uno de sus subgrafos
inducidos G definido por el conjunto
de vrtices V = {a,b,c} y A = {(a,b),
(b,d)}.

27

Grafos No Dirigidos (cont.)


Un componente conexo de un grafo G es
un subgrafo conexo inducido maximal, es
decir, un subgrafo conexo inducido que por
s mismo no es un subgrafo propio de
ningn otro subgrafo conexo de G.
El grafo no dirigido anterior es un grafo
conexo que tiene slo un componente
conexo, y es l mismo.
El siguiente grafo no dirigido tiene dos
componentes conexos.
28

Grafos No Dirigidos (cont.)


Un ciclo simple de un grafo G es un camino
simple de longitud mayor o igual a 3, que
conecta un vrtice consigo mismo.
No se consideran ciclos los caminos de la forma v
(camino de longitud 0), v,v (camino de longitud 1),
o v,w,v (camino de longitud 2).

Un grafo cclico contiene por lo menos un


ciclo.
Un grafo acclico algunas veces se conoce
como rbol libre.
El grafo anterior muestra dos rboles libres.
29

Grafos No Dirigidos (cont.)


Los rboles libres tienen dos
propiedades importantes:
Todo rbol libre con n 1 vrtices
contiene exactamente n 1 aristas.
Si se agrega cualquier arista a un rbol
libre, resulta un ciclo.

30

Representacin de Grafos No
Dirigidos
Los mtodos de representacin de grafos dirigidos
se pueden emplear para representar los no
dirigidos.
Una arista no dirigida entre v y w se representa
simplemente con dos aristas dirigidas, una de v a w, y
otra de w a v.

Los mtodos son:


Una representacin con matriz de adyacencia. Esta
matriz es simtrica.
Una representacin con matriz de adyacencia
etiquetada. Esta matriz es simtrica.
Una representacin con lista de adyacencia.
31

Representacin de Grafos No
Dirigidos (cont.)

32

Algoritmos de Grafos
Dirigidos
Algoritmos de determinacin de los
caminos ms cortos:
Algoritmo de Dijkstra.
Algoritmo de Floyd-Warshall.

Algoritmos de recorrido o bsqueda:


Algoritmo de bsqueda en anchura.
Algoritmo de bsqueda en profundidad.
Bosques abarcadores.
33

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra
El algoritmo de Dijkstra, tambin
llamado algoritmo de caminos
mnimos, es un algoritmo para la
determinacin del camino ms corto
dado un vrtice origen al resto de
vrtices en un grafo dirigido y con
pesos en cada arco.
Su nombre se refiere a Edsger
Dijkstra, quien lo describi por
primera vez en 1959.
34

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
La idea subyacente en este algoritmo consiste
en ir explorando todos los caminos ms cortos
que parten del vrtice origen y que llevan a
todos los dems vrtices.
Cuando se obtiene el camino ms corto desde el
vrtice origen, al resto de vrtices que
componen el grafo, el algoritmo se detiene.
El algoritmo es una especializacin de la
bsqueda de costo uniforme, y como tal, no
funciona en grafos con aristas de costo negativo.

35

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
Descripcin detallada:
Sea G=(V,A) un grafo dirigido y etiquetado.
Sean los vrtices a V y z V; a es el vrtice de
origen y z el vrtice de destino.
Sea un conjunto C V, que contiene los vrtices de V
cuyo camino ms corto desde a todava no se conoce.
Sea un vector D, con tantas dimensiones como
elementos tiene V, y que guarda las distancias
entre a y cada uno de los vrtices de V.
Sea, finalmente, otro vector, P, con las mismas
dimensiones que D, y que conserva la informacin
sobre qu vrtice precede a cada uno de los vrtices
en el camino.
36

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
Descripcin detallada:

El algoritmo para determinar el camino de longitud


mnima entre los vrtices a y z es: C V.

1. Para todo vrtice i C, i a, se establece Di ; Da


0.
2. Para todo vrtice i C se establece Pi = a.
3. Se obtiene el vrtice s C tal que no existe otro vrtice
w C tal que Dw < Ds.
Si s = z entonces se ha terminado el algoritmo.

4. Se elimina de C el vrtice s: C C{s}.


5. Para cada arista e A de longitud l, que une el vrtice
s con algn otro vrtice t C,
Si l + Ds < Dt, entonces:
Se establece Dt l + Ds.
Se establece Pt s.

37

6. Se regresa al paso 4.

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
Al terminar este algoritmo, en Dz estar
guardada la distancia mnima entre a y z.
Por otro lado, mediante el vector P se puede
obtener el camino mnimo: en Pz estar y, el
vrtice que precede a z en el camino mnimo;
en Py estar el que precede a y, y as
sucesivamente, hasta llegar a ESTADO DE
ENLACE.
Aplicacin Web del algoritmo:
http://neo.lcc.uma.es/evirtual/cdd/applets/distanci
a%20corta/Example2.html
.
38

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
Ejemplo:
Encontrar los caminos ms cortos entre
el vrtice 1 y todos los dems del
siguiente grafo dirigido.

39

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)

40

Iteraci
n

D[2]

D[3]

D[4]

D[5]

Inicial

{1}

---

10

30

100

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)

41

Iteraci
n

D[2]

D[3]

D[4]

D[5]

Inicial

{1}

---

10

30

100

{1,2}

10

60

30

100

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)

42

Iteraci
n

D[2]

D[3]

D[4]

D[5]

Inicial

{1}

---

10

30

100

1
2

{1,2}
{1,2,4}

2
4

10
10

60
50

30
30

100
90

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)

43

Iteraci
n

D[2]

D[3]

D[4]

D[5]

Inicial

{1}

---

10

30

100

1
2
3

{1,2}
{1,2,4}
{1,2,4,3}

2
4
3

10
10
10

60
50
50

30
30
30

100
90
60

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)

Iteraci
n

D[2]

D[3]

D[4]

D[5]

Inicial

{1}

---

10

30

100

1
2
3

{1,2}
{1,2,4}
{1,2,4,3}
{1,2,4,3,
5}

2
4
3

10
10
10

60
50
50

30
30
30

100
90
60

10

50

30

60

4
44

Algoritmos de Grafos Dirigidos


Algoritmo de Dijkstra (cont.)
Pseudocdigo del algoritmo:

45

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd
El algoritmo de Floyd-Warshall
intenta resolver el problema de
encontrar el camino ms corto entre
todos los pares de nodos o vrtices
de un grafo.
Esto es similar a construir una tabla
con todas las distancias mnimas
entre pares de ciudades de un mapa,
indicando la ruta a seguir para ir de
la primera ciudad a la segunda.
46

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Esto puede verse de la siguiente manera:
Sea G=(V,A) un grafo en el cual cada arco tiene asociado
un costo no negativo. El problema es hallar para cualquier
par de vrtices (v,w) el camino ms corto de v a w.
G=(V,A), V={1,...,n} y C[i,j] es el costo del arco que va de
i a j.
El algoritmo calcula la serie de matrices

Ak[i,j] significa el costo del camino ms corto que va de i a


j y que no pasa por algn vrtice mayor que k.
El objetivo es calcular An[i,j].
47

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

48

El algoritmo se modifica para agregar una


matriz que guarde los caminos ms
econmicos entre los vrtices.
Al algoritmo se le agrega una matriz P, donde
P[i,j] tiene el vrtice k que permiti encontrar
el valor ms pequeo de A[i,j].
Si P[i,j] = 0, e camino ms corto de i a j es
directo, siguiendo el arco entre ambos.
La versin modificada del algoritmo
almacenar los vrtices intermedios
apropiados en P.

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Ejemplo:
Encontrar los caminos ms cortos entre
todos los vrtices del siguiente grafo
dirigido.

49

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1 122 3 34 54
5
0 10 30 100

2
3

4
5
50

0 50
0 10

20 0 60


A [i,j]
0

1
0
0
0

2
0
0
0

3
0
0
0

4
0
0
0

5
0

0
0

1
2
3

4
5

0 0 0 0 0
0 0 0 0 0

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 30 100
0 50
0 10

20 0 60
0
A [i,j]
0

51

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 30 100
0 50
0 10

20 0 60
0
A [i,j]
1

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
0
0
0
0

4
0
0
0
0

5
0
0
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 30 100
0 50
0 10

20 0 60
0
A [i,j]
1

52

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 60 30 100
0 50
0 10

20 0 60
0
A [i,j]
2

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
2
0
0
0

4
0
0
0
0

5
0
0
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 60 30 100
0 50
0 10

20 0 60
0
A [i,j]
2

53

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 60 30 70
0 50 60
0 10

20 0 30
0
A [i,j]
3

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
2
0
0
0

4
0
0
0
0

5
3
3
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 60 30 70
0 50 60
0 10

20 0 30
0
A [i,j]
3

54

1
2
3

4
5

1 2 3 4
51 2 3 4 5
0 10 50 30 60
0 50 60
0 10

20 0 30
0
A [i,j]
4

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
4
0
0
0

4
0
0
0
0

5
4
3
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1
2
3

4
5

1 1 22 3 3
4 54
5
0 10 50 30 60
0 50 60
0 10

20 0 30
0
A [i,j]
4

55

1
2
3

4
5

1 1 22 3 3
4 54
5
0 10 50 30 60
0 50 60
0 10

20 0 30
0
A [i,j]
5

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
4
0
0
0

4
0
0
0
0

5
4
3
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1 122 3 34 5 4
5
1 0 10 50 30 60

2 0 50 60
3 0 10

4 20 0 30
5 0
A

56

1
2
3
4

1
0
0
0
0

2
0
0
0
0

3
4
0
0
0

4
0
0
0
0

5
4

3
0

5 0 0 0 0 0
P

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Pseudocdigo del algoritmo:

57

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Pseudocdigo para imprimir los
vrtices intermedios del vrtice i
hasta el vrtice j:

58

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
En algunos casos podra ser importante saber slo si
existe un camino de longitud mayor o igual a 1 que
vaya desde el vrtice i al vrtice j.
El algoritmo de Floyd puede especializarse para este
problema; el algoritmo resultante, que antecede al
de Floyd, se conoce como el algoritmo de Warshall.
Con el algoritmo de Warshall se desea obtener la
matriz A tal que A[i,j] = 1 si hay un camino de
longitud igual o mayor que 1, y 0 en caso contrario.
Esta matriz A se conoce como cerradura transitiva de la
matriz de adyacencia.
59

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Cerradura Transitiva

60

12 3
1 0 1 1

2 0 0 1
3 0 0 0

4 0 0 1
5 0 0 0

4 5
1 1

0 1
0 1
0 1
0 0

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Pseudocdigo del algoritmo de
Warshall:

61

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
El algoritmo de Floyd se utiliza, aparte de hallar los
caminos ms cortos entre todos los vrtices, para
determinar el vrtice ms central de un grafo dirigido.
Para encontrar el centro de un grafo dirigido G se
necesita:
La excentricidad de v, la cual es el valor mximo de las
longitudes de los caminos ms cortos de w a v.

Despus de encontrar la excentricidad de cada


vrtice, se obtiene el centro de G, el cual es el vrtice
de mnima excentricidad.
As, el centro de un grafo dirigido es un vrtice ms
cercano al vrtice ms distante.
62

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)
Para encontrar el centro de un grafo
dirigido G se hace lo siguiente:

63

Aplicar el algoritmo de Floyd para


obtener la matriz de los caminos ms
cortos entre todos los pares.
Encontrar el costo mximo de cada
columna i, esto da la excentricidad del
vrtice i.
Encontrar el vrtice con excentricidad
mnima, este es el centro del grafo G.

Algoritmos de Grafos Dirigidos


Algoritmo de Floyd (cont.)

1 122 3 34 5 4
5
1 0 10 50 30 60

2 0 50 60
3 0 10

4 20 0 30
5 0

max
64

60

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura
Bsqueda en anchura (BFS o Breadth-first search
en ingls) es un algoritmo para recorrer o buscar
elementos en un grafo (usado frecuentemente
sobre rboles).
Intuitivamente, se comienza en la raz (eligiendo algn
nodo como elemento raz en el caso de un grafo) y se
exploran todos los vecinos de este nodo.
A continuacin para cada uno de los vecinos se exploran
sus respectivos vecinos adyacentes, y as hasta que se
recorra todo el rbol.

65

Su nombre se debe a que expande uniformemente


la frontera entre lo descubierto y lo no descubierto.
Llega a los nodos de distancia k, slo tras haber
llegado a todos los nodos a distancia k-1.

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

66

Formalmente, BFS es un algoritmo de


bsqueda sin informacin, que expande y
examina todos los nodos de un rbol
sistemticamente para buscar una solucin.
El algoritmo no usa ninguna estrategia
heurstica.
El peso de los arcos para ejecutar BFS debe de
ser de IGUAL costo.
Si las aristas tienen pesos negativos se aplica
el algoritmo de Bellman-Ford en alguna de sus
dos versiones.

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)
Descripcin detallada:
Dado un vrtice fuente s, se explora los vrtices
de G para descubrir todos los vrtices
alcanzables desde s.
Se busca desde s a todos los vrtices alcanzables.
Despus produce un rbol BF con raz en s y que
contiene a todos los vrtices alcanzables.
El camino desde s a cada vrtice en este recorrido
contiene el mnimo nmero de vrtices. Es el
camino ms corto medido en nmero de vrtices.

67

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

Durante un recorrido en anchura,


cuando se recorren ciertos arcos,
llevan a vrtices sin visitar.
Los arcos que llevan a vrtices
nuevos se conocen como arcos de
rbol y forman un bosque
abarcador en anchura para el grafo
dirigido dado.
68

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)
Adems de los arcos de rbol, existen dos
tipos de arcos definidos por una bsqueda
en anchura de un grafo dirigido, que se
conocen como:
Arco de retroceso: Es el arco que va de un
vrtice a uno de sus antecesores. Un arco que
va de un vrtice hacia si mismo se considera
un arco de retroceso.
Arco cruzado: Es el arco que va de un vrtice
a otro que no es ni antecesor ni descendiente.
69

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

Ejemplo:
Realizar el recorrido en anchura (siga el
orden alfabtico) y encontrar el bosque
abarcador del siguiente grafo dirigido.

70

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

71

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

Pseudocdigo del
algoritmo:

72

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Profundidad
Un recorrido en profundidad (en ingls DFS Depth First Search) es un algoritmo que permite
recorrer todos los nodos de un grafo o rbol de
manera ordenada, pero no uniforme.
Su funcionamiento consiste en ir expandiendo
todos y cada uno de los nodos que va localizando,
de forma recurrente, en un camino concreto.
Cuando ya no quedan ms nodos que visitar en
dicho camino, regresa, de modo que repite el
mismo proceso con cada uno de los hermanos del
nodo ya procesado.
73

Algoritmos de Grafos
Dirigidos
Algoritmo de Bsqueda en
ArcosProfundidad
DF:
(cont.)
Si en tiempo de descubrimiento de u
tenemos el arco (u,v):
i. Si el estado de v es NO_VISITADO,
entonces (u,v) DF.
ii. Si el estado de v es VISITADO, entonces
(u,v) es un arco hacia atrs.
iii. Si el estado de v es TERMINADO,
entonces (u,v) es un arco de cruce o arco
hacia delante. Ser de cruce si d[v]<d[u];
y ser hacia delante si d[v]>d[v].
74

Algoritmos de Grafos
Dirigidos
Algoritmo de Bsqueda en
Profundidad (cont.)

Durante un recorrido en profundidad,


cuando se recorren ciertos arcos,
llevan a vrtices sin visitar.
Los arcos que llevan a vrtices
nuevos se conocen como arcos de
rbol y forman un bosque
abarcador en profundidad para el
grafo dirigido dado.

75

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

Adems de los arcos de rbol, existen tres tipos


de arcos definidos por una bsqueda en
profundidad de un grafo dirigido, que se conocen
como:
Arco de retroceso: Es el arco que va de un vrtice a
uno de sus antecesores. Un arco que va de un vrtice
hacia si mismo se considera un arco de retroceso.
Arco de avance: Es el arco que va de un vrtice a
uno de sus descendientes.
Arco cruzado: Es el arco que va de un vrtice a otro
que no es ni antecesor ni descendiente.
76

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

Ejemplo:
Realizar el recorrido en profundidad
(siga el orden alfabtico) y encontrar el
bosque abarcador del siguiente grafo
dirigido.

77

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

78

Algoritmos de Grafos Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

Pseudocdigo del algoritmo:

79

Algoritmos de Grafos No
Dirigidos
Algoritmos de determinacin de los caminos
ms cortos:
Algoritmo del camino ms corto.

Algoritmos de rboles abarcadores de costo


mnimo:
Algoritmo de Prim.
Algoritmo de Kruskal.

Algoritmos de recorrido o bsqueda:


Algoritmo de bsqueda en anchura.
Algoritmo de bsqueda en profundidad.
Bosques abarcadores.
80

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto
Este algoritmo busca el camino ms corto entre dos
vrtices.
Recibe como entrada el grafo no dirigido G, el vrtice
inicial y el vrtice final.
El algoritmo es el siguiente:
1. D[a] = 0, si x a D[x] = . Se tiene el conjunto de
vrtices T.
2. Si z T terminar y D[z] es la distancia ms corta entre a y
z.
3. Escoja v T donde D[v] es el valor mnimo. T = T {v}.
4. Si x T y es adyacente a v D[x] = min{D[x],D[v]+c(v,x)}.
5. Pase al paso 2.
81

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)

Ejemplo:
Encontrar el camino ms corto entre los
vrtices a y h.

82

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {a, b, c, d , e, f , g , h}
D[a] 0
D[b]
D[c]
D[d ]
D[e]
D[ f ]
D[ g ]
D[h]
83

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {b, c, d , e, f , g , h}
D[a ] 0
D[b] 2
D[c]
D[d ]
D[e]
D[ f ] 1
D[b] min{ ,0 2} 2
Adyacente a a
D[ f ] min{ ,0 1} 1
84

D[ g ]
D[h]

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {b, c, d , e, g , h}
D[a ] 0
D[b] 2
D[c]
D[d ] 4
D[e]
D[ f ] 1
D[d ] min{ ,1 3} 4
Adyacente a f
D[ g ] min{ ,1 5} 6
85

D[ g ] 6
D[h]

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {c, d , e, g , h}
D[a] 0
D[b] 2
D[c] 4
D[d ] 4
D[e] 6

86

D[c] min{ ,2 2} 4

Adyacente a b D[d ] min{ 4,2 2} 4


D[e] min{ ,2 4} 6

D[ f ] 1
D[ g ] 6
D[h]

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {d , e, g , h}
D[a ] 0
D[b] 2
D[c] 4
D[d ] 4
D[e] 6
D[ f ] 1
D[e] min{ 6,4 3} 6
Adyacente a c
D[h] min{ ,4 1} 5
87

D[ g ] 6
D[h] 5

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {e, g , h}
D[a] 0
D[b] 2
D[c] 4
D[d ] 4
D[e] 6
D[ f ] 1
Adyacente a d D[e] min{ 6,4 4} 6
88

D[ g ] 6
D[h] 5

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {e, g}
D[a ] 0
D[b] 2
D[c] 4
D[d ] 4
D[e] 6
D[ f ] 1
Adyacente a h D[ g ] min{ 6,5 6} 6
89

D[ g ] 6
D[h] 5

Algoritmos de Grafos No Dirigidos


Algoritmo del Camino Ms Corto (cont.)
T {e, g}
D[a ] 0
D[b] 2
D[c] 4
D[d ] 4
D[e] 6
D[ f ] 1
D[ g ] 6
D[h] 5
90

Algoritmos de Grafos No Dirigidos


rboles Abarcadores de Costo Mnimo
Sea G = (V,A) un grafo conexo en donde cada
arista (u,v) de A tiene un costo asociado c(u,v).
Un rbol abarcador de G es un rbol libre que
conecta todos los vrtices de V, su costo es la
suma de los costos de las aristas del rbol.
Se quiere obtener el rbol abarcador de costo mnimo
para G.

Una aplicacin tpica de los rboles abarcadores de


costo mnimo tiene lugar en el diseo de redes de
comunicacin.
Un rbol abarcador de costo mnimo representa una red
que comunica todas las ciudades a un costo minimal.
91

Algoritmos de Grafos No Dirigidos


rboles Abarcadores de Costo Mnimo (cont.)
Hay diferentes maneras de construir un rbol
abarcador de costo mnimo.
Muchos mtodos utilizan la propiedad AAM.
Sea G = (V,A) un grafo conexo con una funcin de
costo definida en las aristas.
Sea U algn subconjunto propio del conjunto de
vrtices V.
Si (u,v) es una arista de costo mnimo tal que u
U y v V-U, existe un rbol abarcador de costo
mnimo que incluye (u,v) entre sus aristas.

92

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim

93

El algoritmo de Prim es un algoritmo de la teora


de los grafos para encontrar un rbol abarcador de
costo mnimo en un grafo conexo, no dirigido y
cuyas aristas estn etiquetadas.
En otras palabras, el algoritmo encuentra un
subconjunto de aristas que forman un rbol con
todos los vrtices, donde el peso total de todas las
aristas en el rbol es el mnimo posible.
Si el grafo no es conexo, entonces el algoritmo
encontrar el rbol abarcador de costo mnimo para
uno de los componentes conexos que forman dicho
grafo no conexo.

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)

94

El algoritmo fue diseado en 1930


por el matemtico Vojtech Jarnik y
luego de manera independiente por
el cientfico computacional Robert C.
Prim en 1957 y redescubierto por
Dijkstra en 1959.
Por esta razn, el algoritmo es
tambin conocido como algoritmo
DJP o algoritmo de Jarnik.

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)
El algoritmo comienza cuando se asigna a un
conjunto U un valor inicial (un vrtice del grafo), en
el cual crece un rbol abarcador, arista por
arista.
En cada paso localiza la arista ms corta (u,v) que
conecta los vrtices, y despus agrega u en U.
Este paso se repite hasta que U = V.
Ejemplo en el Web:

95

http://www.dma.fi.upm.es/java/matematicadiscreta/Kru
skal%5Fprim/applet.htm
.
http://students.ceid.upatras.gr/~papagel/project/prim.h
tm
.

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)
Ejemplo:
Encontrar el rbol abarcador de costo
mnimo del siguiente grafo no dirigido
utilizando el algoritmo de Prim.

96

Algoritmos de Grafos No Dirigidos


12 3 4 5 6
Algoritmo de Prim (cont.)1 6 1 5
2 6
3 1

4 5
5

97

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,
6}

{1}

{2,3,4,5,6
}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

98

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,
6}

{1}

{2,3,4,5,6
}

{(1,3)}

{1,2,3,4,5,
6}

{1,3}

{2,4,5,6}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

99

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,
6}

{1}

{2,3,4,5,6
}

{(1,3)}

{1,2,3,4,5,
6}

{1,3}

{2,4,5,6}

{(1,3),(3,6)}

{1,2,3,4,5,
6}

{1,3,6}

{2,4,5}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

100

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,
6}

{1}

{2,3,4,5,6
}

{(1,3)}

{1,2,3,4,5,
6}

{1,3}

{2,4,5,6}

{(1,3),(3,6)}

{1,2,3,4,5,
6}

{1,3,6}

{2,4,5}

{(1,3),(3,6),(6,4)}

{1,2,3,4,5,
6}

{1,3,4,6}

{2,5}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

101

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,6}

{1}

{2,3,4,5,6}

{(1,3)}

{1,2,3,4,5,6}

{1,3}

{2,4,5,6}

{(1,3),(3,6)}

{1,2,3,4,5,6}

{1,3,6}

{2,4,5}

{(1,3),(3,6),(6,4)}

{1,2,3,4,5,6}

{1,3,4,6}

{2,5}

{(1,3),(3,6),(6,4),(3,2)}

{1,2,3,4,5,6}

{1,2.3,4,6}

{5}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

102

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,6}

{1}

{2,3,4,5,6}

{(1,3)}

{1,2,3,4,5,6}

{1,3}

{2,4,5,6}

{(1,3),(3,6)}

{1,2,3,4,5,6}

{1,3,6}

{2,4,5}

{(1,3),(3,6),(6,4)}

{1,2,3,4,5,6}

{1,3,4,6}

{2,5}

{(1,3),(3,6),(6,4),(3,2)}

{1,2,3,4,5,6}

{1,2.3,4,6}

{5}

{(1,3),(3,6),(6,4),(3,2),(2,5)}

{1,2,3,4,5,6}

{1,2,3,4,5,6}

{}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)1 1 62 31 45 5 6
2 6
3 1

4 5
5

103

5 3
5 5 6 4

5 2
3 6 6

4 2 6

V-U

---

{1,2,3,4,5,6}

{1}

{2,3,4,5,6}

{(1,3)}

{1,2,3,4,5,6}

{1,3}

{2,4,5,6}

{(1,3),(3,6)}

{1,2,3,4,5,6}

{1,3,6}

{2,4,5}

{(1,3),(3,6),(6,4)}

{1,2,3,4,5,6}

{1,3,4,6}

{2,5}

{(1,3),(3,6),(6,4),(3,2)}

{1,2,3,4,5,6}

{1,2.3,4,6}

{5}

{(1,3),(3,6),(6,4),(3,2),(2,5)}

{1,2,3,4,5,6}

{1,2,3,4,5,6}

{}

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)
U {1}
V U {2,3,4,5,6}
1 2 3 4
M [1] *
D[1] 0 6 1 5
P[1] 0 1 1 1
U {1,3,4,6}
V U {2,5}
1 2 3 4
M [4] *
* *
D[4] 0 5 1 2
P[4] 0 3 1 6
104

5 6


1 1

5 6
*
6 4
3 3

U {1,3}
V U {2,4,5,6}
1 2 3
M [2] *
*
D[2] 0 5 1
P[2] 0 3 1
U {1,2,3,4,6}
V U {5}
1 2 3
M [5] * * *
D[5] 0 5 1
P[5] 0 3 1

4 5 6

5 6 4
1 3 3

4 5 6
*
*
2 3 4
6 2 3

U {1,3,6}
V U {2,4,5}
1 2 3
M [3] *
*
D[3] 0 5 1
P[3] 0 3 1
U {1,2,3,4,5,6}
V U {}
1 2 3
M [6] * * *
D[6] 0 5 1
P[6] 0 3 1

4 5 6
*
2 6 4
6 3 3

4 5 6
* * *
2 3 4
6 2 3

Algoritmos de Grafos No Dirigidos


Algoritmo de Prim (cont.)

105

Pseudocdigo del algoritmo:

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)
El algoritmo de Kruskal es un algoritmo de la
teora de grafos para encontrar un rbol abarcador
de costo mnimo en un grafo conexo y ponderado.
Es decir, busca un subconjunto de aristas que,
formando un rbol, incluyen todos los vrtices y
donde el valor total de todas las aristas del rbol es
el mnimo.
Si el grafo no es conexo, entonces busca un bosque
abarcador de costo mnimo (un rbol abarcador de
costo mnimo para cada componente conexa).
Este algoritmo fue escrito por Joseph Kruskal.
106

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)
Funciona de la siguiente manera:
Se crea un bosque B (un conjunto de rboles),
donde cada vrtice del grafo es un rbol separado.
Se crea un conjunto C que contenga a todas las
aristas del grafo.
Mientras C es sea vaco:
Eliminar una arista de peso mnimo de C.
Si esa arista conecta dos rboles diferentes se aade al
bosque, combinando los dos rboles en un solo rbol.
En caso contrario, se desecha la arista.

107

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)
Al acabar el algoritmo, el bosque
tiene una sola componente, la cual
forma un rbol abarcador de costo
mnimo del grafo.
Ejemplo en el Web:
http://students.ceid.upatras.gr/~papagel
/project/kruskal.htm
.

108

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)
Ejemplo:
Encontrar el rbol abarcador de costo
mnimo del siguiente grafo no dirigido
utilizando el algoritmo de Kruskal.

109

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)

110

Costo

Aristas

(1,3)

(4,6)

(2,5)

(3,6)

(1,4) (2,3)
(3,4)

(3,5) (5,6)

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)

111

Costo

Aristas

(1,3)

(4,6)

(2,5)

(3,6)

(1,4) (2,3)
(3,4)

(3,5) (5,6)

Algoritmos de Grafos No Dirigidos


Algoritmo de Kruskal (cont.)

112

Pseudocdigo del algoritmo:

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura
Bsqueda en anchura (BFS o Breadth-first search
en ingls) es un algoritmo para recorrer o buscar
elementos en un grafo (usado frecuentemente
sobre rboles).
Intuitivamente, se comienza en la raz (eligiendo algn
nodo como elemento raz en el caso de un grafo) y se
exploran todos los vecinos de este nodo.
A continuacin para cada uno de los vecinos se exploran
sus respectivos vecinos adyacentes, y as hasta que se
recorra todo el rbol.

113

Su nombre se debe a que expande uniformemente


la frontera entre lo descubierto y lo no descubierto.
Llega a los nodos de distancia k, slo tras haber
llegado a todos los nodos a distancia k-1.

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

114

Formalmente, BFS es un algoritmo de


bsqueda sin informacin, que expande y
examina todos los nodos de un rbol
sistemticamente para buscar una solucin.
El algoritmo no usa ninguna estrategia
heurstica.
El peso de las aristas para ejecutar BFS debe
de ser de IGUAL costo.
Si las aristas tienen pesos negativos se aplica
el algoritmo de Bellman-Ford en alguna de sus
dos versiones.

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)
Durante un recorrido en anchura, cuando se
recorren ciertas aristas, llevan a vrtices sin visitar.
Las aristas que llevan a vrtices nuevos se conocen
como aristas de rbol y forman un bosque
abarcador en anchura para el grafo no dirigido
dado.
Adems, existen un tipo de arista definido por una
bsqueda en profundidad de un grafo no dirigido,
que se conocen como:

115

Aristas cruzadas: Es la arista que existe entre un


vrtice a otro, pero que se llama de manera indirecta,
pero el vrtice no es antecesor del otro.

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

Ejemplo:
Realizar el recorrido en anchura (siga el
orden alfabtico) y encontrar el bosque
abarcador del siguiente grafo no
dirigido.

116

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

117

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Anchura (cont.)

Pseudocdigo del
algoritmo:

118

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Profundidad
Un recorrido en profundidad (en ingls DFS Depth First Search) es un algoritmo que permite
recorrer todos los nodos de un grafo o rbol de
manera ordenada, pero no uniforme.
Su funcionamiento consiste en ir expandiendo
todos y cada uno de los nodos que va localizando,
de forma recurrente, en un camino concreto.
Cuando ya no quedan ms nodos que visitar en
dicho camino, regresa, de modo que repite el
mismo proceso con cada uno de los hermanos del
nodo ya procesado.
119

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

Durante un recorrido en profundidad, cuando se


recorren ciertas aristas, llevan a vrtices sin visitar.
Los arcos que llevan a vrtices nuevos se conocen
como aristas de rbol y forman un bosque
abarcador en profundidad para el grafo no
dirigido dado.
Adems, existen un tipo de arista definido por una
bsqueda en profundidad de un grafo no dirigido,
que se conocen como:

120

Aristas de retroceso: Es la arista que existe entre un


vrtice a otro, pero que se llama de manera indirecta,
que es su antecesor.

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

Ejemplo:
Realizar el recorrido en profundidad
(siga el orden alfabtico) y encontrar el
bosque abarcador del siguiente grafo
dirigido.

121

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Profundidad (cont.)

122

Algoritmos de Grafos No Dirigidos


Algoritmo de Bsqueda en Profundidad
(cont.)
Pseudocdigo del algoritmo:

123

Referencias Bibliogrficas
Aho, Hopcroft & Ullman. Estructuras
de Datos y Algoritmos. Pearson
Addison Wesley Longman, Primera
Edicin, 1998.
Wikipedia. URL:
http://es.wikipedia.org.

124

Potrebbero piacerti anche