Está en la página 1de 19

Teoría de Grafos

I. Introducción
• Euler (1707-1803): Inicio teoría de grafos (topología)
– Puentes de Konigsberg (río Pregel): representar con grafo

B
B

A D
A D
C

– Teoría de grafos: resolución de problemas que pueden ser


modelados mediante un grafo, y resueltos mediante algoritmos
específicos desarrollados para grafos
II. Definiciones básicas
• Grafo dirigido o red: conjunto de nodos, nudos o vértices
unidos por arcos.
– Arco: par ordenado de vértices.
G (V , A) 1 3 5

V 1,2, 3, 4, 5

A (1,2), (1, 3), (2, 3), (2,5), (3, 4), (3, 5), (5, 4), (4, 5), (2, 2) 2 4

• Bucle: arco (a,a)


• Arista: arco sin orientación (un sentido u otro)
• Grafo no dirigido: vértices y aristas.
• Multigrafo: hay un par de vértices unidos por más de una
arista.
• Grafo simple: no es multigrafo y no tiene bucles
II. Definiciones básicas
• Cadena: secuencia de aristas, o arcos sin su
orientación, unen un par de nodos
• Camino: cadena con todos los arcos con la misma
orientación.
• Ciclo: cadena que une un nodo con él mismo.
• Circuito: ciclo y camino (ciclo dirigido)
• Grafo conexo: cualquier par de vértices está unido
por al menos una cadena.
• Fuertemente conexo: cualquier par de vértices unido
por al menos un camino.
• Árbol: grafo conexo y sin ciclos.
II. Definiciones básicas
• Almacenamiento matricial de un grafo:
– Matriz de incidencia grafo no dirigido:
1 si el nodo i pertenece a la arista j
bij
0 otro caso
– Matriz de incidencia grafo dirigido: igual pero –1 nodo inicial y +1
nodo final.
– Matriz de adyacencia:
1 si existe un arco (arista) del nodo i al j
aij
0 otro caso
• (grafo no dirigido simétrica) Totalmente unimodulares.
• Eficiencia algorítmica  complejidad (g(n))
– Dimensión problema: n
f (n )
– Nº operaciones elementales: f(n) lim constante
n g(n )
• La más sencilla de las funciones
– Criterio del peor de los casos cuando no exacto
III. Árbol de extensión de mínimo peso
(minimal spanning tree)
– Grafo no dirigido: G=(V,E)
• Árbol de extensión o expansión o generador o soporte: árbol
parte de E incluyendo a todo V
– “Pesos” en aristas: problema del árbol de extensión de mínimo
peso (suma)
– Algoritmos: Prim o Kruskal
• Ambos greedy (localmente óptimos), asegurado óptimo
• Algoritmo de Prim (1957)
– n=card(V). T: árbol construido. C(k): nodos conectados iter. k
Paso 1: Selección de un vértice inicial cualquiera:
Elegir iV, poner: C(1)={i}, k=2 y T=
Paso 2: Selección vértice no conectado más cercano a conectados,
añadir arista
j* de V-C(k), unido a un vértice conectado por arista menor peso
ek 1 Poner C(k+1)=C(k){j*}, T=T  ek 1 . Si k=n, parar; si no k=k+1 e
ir a 2
III. Árbol de extensión de mínimo peso
(minimal spanning tree)
ARISTAS: CARRETERAS. PESOS: DISTANCIAS/COSTE. CÓMO UNIR TODOS COSTE MÍNINMO

 . 1 5 7 9  
 
2 5

1 . 6 4 3  
5 6 . 5  10 
1 3  
7 4 5 . 8 3 
9 3  8 .  
 
   . 
4 6
10 3

PASO1: C0   , C0  V 
 1, 2, 3, 4, 5, 6
. POR EJ. i  1 : C1  1 , C1  2,3, 4,5, 6 . k  2 YT  
T  e1 k  6 ,k  3
PASO2: j  2 , e1  1, 2 . C2  1, 2 , C2  3, 4,5, 6 ,
*
. .
T  e1 , e2  k  6
PASO2: j  5 , e2  2, 5 . C3  1, 2, 5 , C3  3, 4, 6 , 4
*
. ,k
C 4  1, 2, 5, 4 T  e1 , e2 , e3  k  6 k  5
PASO2: j  4 , e3  2, 4 . , C4  3, 6 , . , .
*

j *  6 e4  4, 6 C5  1, 2,5, 4, 6 C  3 T  e , e , e , e k6


PASO2: , . , 5 ,  1 2 3 
4 . k,  6
j*  3 C 6   T  e , e , e , e , e  k  6
PASO2: , e5  1,3 . C6  1, 2,5, 4, 6,3 , , 1 2 3 4 5 . : PARAR
IV. Camino mínimo
• Encontrar caminos de longitud mínima entre nodos (grafo
dirigido).
– “Longitud”: longitud, coste, tiempo, etc.
– Los más relevantes (aplicaciones y resolución de otros)
– Varios planteamientos: caminos mínimos de un vértice a todos
los demás.
– Cond. existencia: no circuitos longitud negativa (algoritmos).
– Resolución: programación dinámica.
• Principio optimalidad de Bellman  Ecuaciones de Bellman:
u1  0
dij :distancia de i a j
u j :distancia mínima de 1 a j u j  min
k j
u k  d kj  j  2,..., n
– Difícil resolver general  algoritmos:
• De Dijkstra: longitudes positivas
• De Bellman-Ford: caso general.
IV. Camino mínimo
• Algoritmo de Dijkstra (1959)
– Longitudes de arcos > 0
– El más utilizado, complejidad  (n 2 )
– P conjunto nodos etiquetados de forma permanente
– T conjunto de nodos etiquetados de forma transitoria.
– pred(j) nodo inmediatamente anterior a nodo j en camino 1 a j
– Algoritmo
Paso 0: Inicio: etiquetar nodos con longitud arco de 1 a ellos
u1  0 u j  d1 j j  2,..., n
P={1}, T={2,...,n}, pred(j)=1 j=2,...,n
Paso 1: Etiqueta permanente iteración: nodo menor etiqueta transitoria
k  T tal que uk  min u j  P  P  k T  T  k.Si T   , parar
jT
Paso 2: Revisar etiquetas transitorias
 
 j  T u j  min u j , uk  dkj . Si se modifica, cambiarpred ( j )  k
Volver al paso 1
IV. Camino mínimo
15
2 4

100 20 10 50

30 60
1 3 5

Paso 0: u1  0 , u2  100 , u3  30 , u 4   , u5   . P  1 , T  2, 3, 4, 5 , pred ( j )  1, j  2,3, 4,5


P. 1: uk  30 k  3 . P  1,3 , T  2, 4, 5   .
P. 2: u 2  min u 2 , u3  d 32   min 100, 30    100 ,
u4  min u4 , u3  d 34   min ,30  10  40 pred (4)  3
u5  min u5 , u3  d 35   min  , 30  60  90 pred (5)  3

P. 1: uk  40 k  4 . P  1, 3, 4 , T  2, 5   .
u 2  min 100, 40  15  55 pred (2)  4 u5  min 90, 40  50  90 pred (5)  4
P. 2: , ( )
P  1, 3, 4, 2 T  5  
P. 1: uk  55 k  2 . , .
P. 2: u5  min u5 , u2  d 25   min 90, 55    90
P. 1: uk  90 k  5 .
P  1, 3, 4, 2, 5 , T   , PARAR.
IV. Camino mínimo
• Algoritmo de Bellman-Ford
– Caso general
– Complejidad  (n3 )
– u m longitud camino mínimo de 1 a j usando a lo sumo m arcos
j

– Algoritmo:
Paso 1: Inicio, longitudes arcos de 1 a los demás
u11  0 u1j  d1 j j  2,..., n Poner m=1.
Paso 2: Calcular distancias mínimas con a lo sumo m+1 arcos


u mj 1  min u mj , min ukm  d kj 
k j 
Si u mj 1  u mjj , parar. Si no, hacer m=m+1 y paso 2
Si no hay circuitos de longitud negativa para a lo sumo en n
iteraciones
IV. Camino mínimo
2
5 -3

4
1 3 4

2 1
3

Paso 1: u11  0 , u12  5 , u31  2 , u14   . m  1


P. 2: u2  min
2
 u , min u
1
2
1
3  d 32 , u14  d 42    min 5, min 2  ,   3  5
 
u32  min u31 , min u12  d 23 , u14  d 43   min 2, min 5  3,   6  2

u42  min  u , min u


1
4
1
2  d 24 , u31  d 34    min , min 5  4, 2  1  3u 2
4  u14 m  2  P. 2.

P. 2: u 3
2  min 5, min 2  , 3  3  0 u33  min 2, min 5  3, 3  6  2

 
u43  min u42 , min u22  d24 , u32  d34   min 3, min 5  4, 2  1  3 , u 2  u 2
3 2
m  3  P. 2 (FIN)

P. 2: u2  min
4
 u , min u
3
2
3
3 
 d 32 , u43  d 42   min 0, min 2  , 3  3  0


u34  min u33 , min u23  d 23 , u43  d 43    min 2, min 0  3, 3  6  2

u44  min u43 , min u23  d 24 , u33  d 34    min 3, min 0  4, 2  1  3 u 4j  u 3j j , PARAR.
V. Flujo en redes
• Distintos planteamientos:
– Problema de flujo máximo con capacidades máximas en arcos
(de flujo máximo)
– Problema de flujo compatible con coste mínimo
• Problema de flujo máximo:
– G=(V,U) grafo dirigido sin bucles, es una red de transporte si:
• Única fuente, s
• Único sumidero, t
• Capacidad de los arcos, cij
• Cada vértice es alcanzable desde s, y t es alcanzable por todos
– Flujo compatible: vector  dimensión número arcos tal que:
  cij (i, j )
• ij
• Ley de conservación de flujo:
i  s, t 
j /( j ,i )U
 ji   ij  0
j /( i , j )U

– Valor del flujo: flujo sale de fuente = flujo llega a sumidero


V. Flujo en redes
(4) 2
1 2
(5)
(5)
3 4
(5) (6)
(2)
s t
2 3 2

5 4

(7) (6)
3 4
(5) 3

• Problema máximo flujo: flujo compatible mayor valor


– Corte: conjunto de arcos cuya eliminación desconecta s y t
– Denotar por componentes. Ej: (1,2), (1,4) y (3,4) = ({s,1,3}{2,4,t})
– Capacidad de un corte: C ({s,1,3}{2,4,t})=15
• Problema corte de mínima capacidad
– V ( )  C ( P, P)  compatible y ( P, P) corte  max V ( )  min C ( P, P)
 compatible ( P , P ) corte

• Máximo flujo compatible = mínima capacidad corte (dual)


V. Flujo en redes
• Algoritmo de Ford-Fulkerson o del camino de aumento
– Capacidad residual de un arco: capacidad de un arco – flujo
– Camino de aumento: camino s a t con mín. capac. residuales
positivo  capacidad residual del camino de aumento.
– Algoritmo:
Paso 1: Inicio flujo cero y capacidades de los arcos
ij  0 (i, j ) U c*ij  cij (i, j ) U Etiquetar s (-- , )
Paso 2: Obtener camino de aumento
Seleccionar i etiquetado, y j sin etiquetar:
a) Si (i,j)U y ijc *  0 (aumentar flujo):  j  min   i , c*
ij  Etiquetar j (i+,j)
b) Si (j,i) U y  ji  0 (reducir flujo):  j  min  i ,  ji  Etiquetar j (i-,j)
Repetir hasta : etiquetar t e ir a 3, o no posible etiquetar más e ir a 4
Paso 3: Aumentar flujo camino y calcular capacidades residuales
 t aumentar flujo camino etiq. positivas, disminuir negativas. P2.
Paso 4: Parar, no es posible aumentar el flujo
Flujo máximo, y corte de capacidad mín. nodos etiquetados.
V. Flujo en redes
(s+,2) (4)
• Ejemplo FF: (2)
2 4

(1)

(3)
(-,) s t (3+,2)
(3)
(2)
3
(2+,2)
– P.1: ij  0 (i, j ) U c ij
*
 cij (i, j ) U s  (, )
– P.2: i = s j = 2: a)  2  min , 2  2 2  (s , 2)
3  (2,2)
– P.2: i = 2 j = 3: a)  3  min 2,3  2
– P.2: i = 3 j = t: a)  t  min 2, 2  2 t  (3, 2)
(4)
– t etiquetado: P.3: (0)
2 4
(1)
2
( , )
s 2  2, 23  2, 3t  2 (1)
s 2 t

cs*2  0, c23
*
 1, c3*t  0 (cs*3  3, c24
*
 4, c4*t  1) (3)
(0)
3 2
V. Flujo en redes
(3-,2) (4)
(2+,2)
• Ej. FF (cont.): (0)
2 4
(1)
2
( , )
(1)

(4+,1)
s 2 t

(3)
(0)
3 2
(s+,3)
– P.2: i = s j = 3: a)  3  min ,3  3 3  (s ,3)
– P.2: i = 3 j = 2: b)  2  min 3, 2  2 2  (3, 2)
 4  min 2, 4  2 4  (2, 2)
– P.2: i = 2 j = 4: a)
 t  min 2,1  1 t  (4,1)
– P.2: i = 4 j = t: a) (3) 1
2 4
– t etiquetado: P.3: (0)
(0)
 s 3  0  1, 32  2  1  1,  24  1,  4t  1 ( , )
2
1
( s 2  2, 34  2)
(2)
s 1 t
c  2, c  2, c  3, c  0
*
s3
*
23
*
24
*
4t
(2)
(c  0, c  0)
*
s2
*
3t
1
3 2
(0)
V. Flujo en redes
(3-,1) (3) 1 (2+,1)
• Ej. FF (cont.): 2 4
(0)
(0)
2
(, ) 1
(2)
s 1 t

(2)
1 (0)
3 2
(s+,2)
– P.2: i = s j = 3: a)  3  min , 2  2 3  (s , 2)
– P.2: i = 3 j = 2: b)  2  min 2,1  1 2  (3,1)
– P.2: i = 2 j = 4: a)  4  min 1,3  1 4  (2,1)
– No se puede etiquetar más y t no etiquetado: ir a 4
– P.4: Parar, Flujo óptimo, valor 3.
Corte mínima capacidad ({s,2,3,4}{t}) = 3
V. Flujo en redes
• Mediante programación lineal:
max v
 v si i  s

  ji    ij  0 si i  s, t
j /( j ,i )U j /( i , j )U v si i  t

0   ij  cij
• Problema de flujo compatible con coste mínimo
– Valor flujo conocido , enviar con mínimo coste
– Coste unitario envío flujo: d ij min  dijij
( i , j )U


i /( s ,i )U
ij  


i /( i ,t )U
ij  


i /( j ,i )U
 ji  
i /( i , j )U
ij  0 j  s, t

0   ij  cij (i, j )  U

También podría gustarte