grafos · grafos 29 matriz de adyacencia – en grafos etiquetados: • m[i][j] = atributo de la...
TRANSCRIPT
![Page 1: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/1.jpg)
Grafos 1
1 2
35
4 15
30
20
25
50
45
10
25
4055
s t
a c
b d2
3 3
41
23
2
Grafos
![Page 2: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/2.jpg)
Grafos 2
Indice general
1. Introducción. 2. Definiciones y representación.3. Recorridos en grafos.4. Algoritmos de caminos más cortos.5. Árbol de cubrimiento de costo mínimo.6. Flujo en redes. Flujo máximo.
![Page 3: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/3.jpg)
Grafos 3
Indice
• Introducción.• Definiciones.• Tipo de dato abstracto grafo.• Estructuras de datos para grafos.
– Lista de aristas.– Lista de adyacencia.– Matriz de adyacencia.
![Page 4: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/4.jpg)
Grafos 4
Introducción
• Los grafos se usan para modelar problemas definidos en términos de relaciones o conexiones entre objetos.
• Tienen un amplio uso en ingeniería para representar redes de todo tipo: – transporte (tren, carretera, avión), – servicios (comunicación, eléctrica, gas,
agua),– de actividades en el planeamiento de
proyectos, etc.
![Page 5: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/5.jpg)
Grafos 5
¿Qué es un grafo?• Un grafo G = (V, E) está compuesto de:
V : conjunto de vértices o nodosE : conjunto de aristas o arcos que
conectan los vértices en V
a b
d e
c
V = { a, b, c, d, e}
E = { (a, b), (a, c), (a,d),(b, e), (c, d), (c, e),(d, e) }
• Una arista e = (v, w) es un par de vértices• Ejemplo:
![Page 6: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/6.jpg)
Grafos 6
Aplicaciones• Grafo de transiciones (AFD)
0 1 2 3inicio
b
bba
b
aa
a
• Tiempo de vuelos aéreos
Madrid
Coruña
Valencia
Barcelona
Sevilla
Santander2 2
1
4
12
2
• Planificación de tareas (Pert/CPM)
• Grafo asociado a un dibujo de líneas (visión artificial)
32
inicio A(3)
B(2)
D(2)
C(4) E(3) finalI(1)
![Page 7: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/7.jpg)
Grafos 7
Definiciones• Arista dirigida: par ordenado (u, v)
u v
u v
• Arista no dirigida: par no ordenado (u, v)
• Grafo dirigido o digrafo: grafo cuyas aristas son todas dirigidas.
• Grafo no dirigido o grafo: grafo cuyas aristas son todas no dirigidas.
• Grafo mixto: grafo con aristas dirigidas y no dirigidas.
![Page 8: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/8.jpg)
Grafos 8
Definiciones• Vértices finales o extremos de la arista: vértices
unidos por una arista.– Vértice origen: primer vértice de una arista dirigida. – Vértice destino: segundo vértice de una arista
dirigida.• Arista incidente en un vértice: si el vértice es uno
de los vértices de la arista.• Aristas salientes de un vértice: aristas dirigidas
cuyo origen es ese vértice.• Aristas entrantes de un vértice: aristas dirigidas
cuyo destino es ese vértice.
a b
![Page 9: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/9.jpg)
Grafos 9
Definiciones• Vértices adyacentes: vértices finales de una
arista.– Un vértice w es adyacente a v sí y sólo si (v, w)
(ó (w, v)) pertenece a E.– En grafos no dirigidos la relación de adyacencia es
simétrica. – En grafos dirigidos la relación de adyacencia no es
simétrica.
a b
d e
c
Vértices adyacentes:a = { b, c, d }b = { e }c = { a, d, e }d = { a, c }e = { d }
![Page 10: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/10.jpg)
Grafos 10
Definiciones• Grado de un vértice v (grado(v)) en un grafo:
número de aristas incidentes en v o número de vértices adyacentes.– En un digrafo:
• Grado entrante de un vértice v (graent(v)): número de aristas entrantes a v.
• Grado saliente de un vértice v (grasal(v)): número de aristas salientes de v.
– Si G es un grafo con m aristas, entonces
– Si G es un digrafo con m aristas, entonces
∑ ∑∈ ∈
==Gv Gv
mvgrasalvgraent )()(
![Page 11: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/11.jpg)
Grafos 11
Definiciones– Sea G es un grafo con n vértices y m aristas.
• Si G es no dirigido, entonces m ≤ n(n-1)/2.
• Si G es dirigido, entonces m ≤ n(n-1).
• Camino: secuencia de vértices <v1, v2,…., vn> tal que (vi, vi+1) son adyacentes.
C1= { a, b, e, d, c}
a b
d e
c
C2= { b, e, d, c}
a b
d e
c
![Page 12: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/12.jpg)
Grafos 12
Definiciones• Camino simple: todos los vértices son distintos.
• Longitud de un camino: número de aristas del camino = n – 1.
• Ciclo: camino simple que tiene el mismo vértice inicial y final.
a b
d e
cCamino simple = { a, b, e}
Ciclo = { c, e, d, c}
![Page 13: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/13.jpg)
Grafos 13
Definiciones• Dos vértices v, w están conectados si existe un
camino de v a w.• Grafo conectado (conexo): si hay un camino
entre cualquier par de vértices. – Si es un grafo dirigido se llama fuertemente conexo.
a b
d e
c
Conectado
a b
d e
c
No conectado
![Page 14: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/14.jpg)
Grafos 14
Definiciones• Subgrafo: subconjunto de vértices y aristas que
forman un grafo.• Componente conectado: subgrafo conectado
máximo.
3 componentes conectados
![Page 15: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/15.jpg)
Grafos 15
Definiciones• Árbol: grafo conectado sin ciclos.• Bosque: colección de árboles.
• Grafo completo: todos los pares de vértices son adyacentes. (m = n*(n-1)/2)
• En un grafo no dirigido G con n vértices y maristas se cumple lo siguiente:– Si G es conectado, entonces m ≥ n - 1– Si G es un árbol, entonces m = n - 1– Si G es un bosque, entonces m ≤ n - 1
![Page 16: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/16.jpg)
Grafos 16
Definiciones• Árbol de cubrimiento de un grafo G: subgrafo
que– es un árbol.– contiene todos los vértices de G.
El fallo de una arista desconecta el sistema (menos tolerante a fallos).
![Page 17: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/17.jpg)
Grafos 17
Definiciones• Un grafo está etiquetado si asociamos a cada
arista un peso o valor.• Grafo con pesos: grafo etiquetado con valores
numéricos.
s t
a c
b d2
3 3
41
23
2
![Page 18: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/18.jpg)
Grafos 18
Definiciones• Circuito de Euler: camino que recorre todas las
aristas una vez y retorna al vértice de partida.
C
B
DAgrafo
Puentes de Koenigsberg
• Teorema de Euler (1736): un grafo tiene un circuito de Euler si y solo si todos los vértices tienen grado par.
• Más definiciones y teoremas en Teoría de Grafos.
![Page 19: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/19.jpg)
Grafos 19
El tipo de dato abstracto Grafo• El TDA Grafo es un contenedor de posiciones
que almacena los vértices y las aristas del grafo.• Operaciones para la información posicional:
– tamano(), devuelve el número de vértices más el número de aristas de G.
– estaVacio() – elementos() – posiciones() – reemplazar(p, r) – intercambiar(p, q)
donde p y q indican posiciones, y r indica un elemento de información.
![Page 20: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/20.jpg)
Grafos 20
El tipo de dato abstracto Grafo• Operaciones generales: (v: vértice, e: arista, o: elemento de
información). numVertices() Devuelve el número de vértices de GnumAristas() Devuelve el número de aristas de Gvertices() Devuelve una lista de los índices de los vértices
de Garistas() Devuelve una lista de los índices de las aristas de Ggrado(v) Devuelve el grado de vverticesAdyacentes(v) Devuelve una lista de los vértices adyacentes a varistasIncidentes(v) Devuelve una lista de las aristas incidentes en vverticesFinales(e) Devuelve un array de tamaño con los vértices
finales de eopuesto(v, e) Devuelve los puntos extremos de la arista e
diferente a vesAdyacente(v, w) Devuelve verdadero si los vértices v y w son
adyacentes
![Page 21: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/21.jpg)
Grafos 21
El tipo de dato abstracto Grafo• Operaciones con aristas dirigidas:
aristasDirigidas() Devuelve una lista de todas las aristas dirigidas aristasNodirigidas() Devuelve una lista de todas las aristas no
dirigidas gradoEnt(v) Devuelve el grado de entrada de vgradoSalida(v) Devuelve el grado de salida de varistasIncidentesEnt(v) Devuelve una lista de todas las aristas de
entrada a varistasIncidentesSal(v) Devuelve una lista de todas las aristas de salida a vverticesAdyacentesEnt(v) Devuelve una lista de todas las aristas
adyacentes a v a través de las aristas de entrada a vverticesAdyacentesSal(v) Devuelve una enumeración de todas las aristas
adyacentes a v a través de las aristas de salida a vdestino(e) Devuelve el destino de la arista dirigida eorigen(e) Devuelve el origen de la arista dirigida eesDirigida(e) Devuelve verdadero si la arista e es dirigida
![Page 22: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/22.jpg)
Grafos 22
El tipo de dato abstracto Grafo• Operaciones para actualizar grafos:
– insertaArista(v, w, o) Inserta y devuelve una arista no dirigida entre los vértices v y w, almacenando el objeto o en esta posición
– insertaAristaDirigida(v, w, o) Inserta y devuelve una arista dirigida entre los vértices v y w, almacenando el objeto o en esta posición
– insertaVertice(o) Inserta y devuelve un nuevo vértice almacenando el objeto o en esta posición
– eliminaVertice(v) Elimina vértice v y todas las aristas incidentes– eliminaArista(e) Elimina arista e– convierteNoDirigida(e) Convierte la arista e en no dirigida– invierteDireccion(e) Invierte la dirección de la arista dirigida e– asignaDireccionDesde(e, v) Produce arista dirigida e salga del vértice v– asignaDireccionA(e, v) Produce arista dirigida e entrante al vértice v
![Page 23: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/23.jpg)
Grafos 23
Estructuras de datos para Grafos• Se necesita almacenar los vértices y las aristas
del grafo y realizar eficientemente las operaciones del TDA Grafo.
• Las estructuras de datos usuales son:– Lista de aristas.– Lista de adyacencia.– Matriz de adyacencia.
![Page 24: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/24.jpg)
Grafos 24
Lista de Aristas• La estructura lista de aristas almacena los
vértices y las aristas en secuencias sin ordenar.• Fácil de implementar.• Hallar las aristas incidentes sobre un determinado
vértice es ineficiente porque requiere el examen entero de la estructura que almacena las aristas.
1 2
4 3
a
b
c
d e
a b c d e
1 2 3 4
![Page 25: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/25.jpg)
Grafos 25
Eficiencia de la estructura Lista de AristasOperación
tamano, estaVacio, remplazarElemento, intercambiarnumVertices, numAristasverticesaristas, aristasDirigidas, aristasNodirigidaselementos, posiciones
verticesFinales, opuesto, origen, destino, esDirigida, grado, gradoEnt, gradoSalidaaristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSalesAdyacente
aristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSal
insertaVerticeeliminaVertice
Espacio requerido
Tiempo
O(1)
O(1)O(n)O(m)
O(n + m)
O(1)
O(m)
O(m)
O(1)
O(1)O(m)
O(n + m)
![Page 26: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/26.jpg)
Grafos 26
Lista de Adyacencia• Lista de adyacencia del vértice v: secuencia de
vértices adyacentes a v.• Representa el grafo por las listas de adyacencia
de todos los vértices.• Es la estructura más usada para representar
grafos con pocas aristas (dispersos).
1 2
4 3
a
b
c
d e21 a 4 d32 b43 c24 e
![Page 27: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/27.jpg)
Grafos 27
Eficiencia de la estructura Lista de AdyacenciaOperación
tamano, estaVacio, remplazarElemento, intercambiarnumVertices, numAristasverticesaristas, aristasDirigidas, aristasNodirigidaselementos, posiciones
verticesFinales, opuesto, origen, destino, esDirigida, grado, gradoEnt, gradoSalidaaristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSalesAdyacente
aristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSal
insertaVerticeeliminaVertice
Espacio requerido
Tiempo
O(1)
O(1)O(n)O(m)
O(n + m)
O(1)
O(grado(v))
O(min(grado(u), grado(v))
O(1)
O(1)O(grado(v))
O(n + m)
![Page 28: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/28.jpg)
Grafos 28
Matriz de Adyacencia• Matriz M[i][j] con entradas para todos los pares
de vértices.– En grafos no etiquetados:
• M[i][j] = verdadero, si hay una arista (i, j) en el grafo.• M[i][j] = falso, si no hay una arista (i, j) en el grafo.
– En grafos no dirigidos: M[i][j] = M[j][i]. La matriz es simétrica.
1 2
4 3
1 2 3 41234
F V F VV F V VF V F VV V V F
![Page 29: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/29.jpg)
Grafos 29
Matriz de Adyacencia– En grafos etiquetados:
• M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j).
• Es la estructura más usada para representar grafos con muchas aristas (densos).
1 2
4 3
a
b
c
d e
1 2 3 41234
- a - d- - b -- - - c- e - -
![Page 30: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/30.jpg)
Grafos 30
Eficiencia de la estructura Matriz de AdyacenciaOperación
tamano, estaVacio, remplazarElemento, intercambiarnumVertices, numAristasverticesaristas, aristasDirigidas, aristasNodirigidaselementos, posiciones
verticesFinales, opuesto, origen, destino, esDirigida, grado, gradoEnt, gradoSalidaaristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSalesAdyacente
aristasIncidentes, aristasIncidentesEnt, aristasIncidentesSal, verticesAdyacentes, verticesAdyacentesEnt, verticesdyacentesSal
insertaVerticeeliminaVertice
Espacio requerido
Tiempo
O(1)
O(1)O(n)O(m)
O(n + m)
O(1)
O(n)
O(1)
O(1)
O(n2)O(n2)
O(n2)
![Page 31: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/31.jpg)
Grafos 31
1 2
35
4 15
30
20
25
50
45
10
25
4055
s t
a c
b d2
3 3
41
23
2
Recorridos en grafos
![Page 32: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/32.jpg)
Grafos 32
Indice
• Introducción.• Búsqueda primero en profundidad.• Búsqueda primero en anchura.• Usos de los recorridos.
– Digrafos acíclicos.– Orden topológico.
![Page 33: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/33.jpg)
Grafos 33
Introducción
• Recorrido: procedimiento sistemático de exploración de un grafo mediante el examen de todos sus vértices y aristas.
• Un recorrido es eficiente si visita todos los vértices y aristas en un tiempo proporcional a su número, esto es, en tiempo lineal.
![Page 34: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/34.jpg)
Grafos 34
Búsqueda primero en profundidad• Analogía: deambular en un laberinto con una
cuerda y un bote de pintura, para no perderse.– Se selecciona un vértice inicial s de G, al que se fija un extremo
de la cuerda y se pinta s como "visitado". Se asigna s a u (vértice en curso).
– Se recorre G considerando una arista arbitraria (u, v). Si la arista (u, v) conduce a una vértice v ya visitado se retorna inmediatamente al vértice u.
– Si (u, v) conduce a un vértice no visitado v, entonces se extiende la cuerda y se fija en v. Se pinta v como "visitado" y se asigna a u(vértice en curso), repitiendo el mismo procedimiento anterior.
– Si todas las aristas incidentes a un vértice conducen a vértices ya visitados, se enrolla la cuerda vuelta atrás a la arista que condujo a u y se repite el procedimiento anterior para las aristas incidentes que no se han recorrido antes.
– El proceso termina cuando la vuelta atrás conduce al vértice inicial s y no hay más aristas incidentes sin explorar desde s.
![Page 35: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/35.jpg)
Grafos 35
Búsqueda primero en profundidad• Animación
a b
d e
c
a b
d e
c
a b
d e
c
a b
d e
c
a b
d e
c
a b
d e
c
![Page 36: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/36.jpg)
Grafos 36
Búsqueda primero en profundidad• El recorrido BPP es una generalización del recorrido
preorden de un árbol.• Se pueden identificar cuatro tipos de aristas durante el
recorrido:– Aristas de descubrimiento: son aquellas aristas que conducen al
descubrimiento de nuevos vértices. También se les llama aristas de árbol.
– Aristas de retorno: son las aristas que conducen a vértices antecesores ya visitados en el árbol.
– Aristas de avance: son las aristas que conducen a vértices descendientes en el árbol.
– Aristas de cruce: son aristas que conducen a un vértice que no es ancestro de otro o a vértices que están en diferentes árboles.
• Las aristas de descubrimiento forman un árbol de cubrimiento de los componentes conectados del vértice inicial s.
![Page 37: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/37.jpg)
Grafos 37
Algoritmo recursivo BPPrecorre_grafo_bpp(){for cada vértice vmarca[v]=SINVISITAR;
for cada vértice vif (marca[v]==SINVISITAR)
BPP(v);}
BPP(u){marca[u]=VISITADO;for cada vértice v adyacente a u
if (marca[v]==SINVISITAR)BPP(v);
}
• Orden de complejidad del recorrido en profundidad:– Con lista de adyacencia, se recorre cada elemento de lista una
vez, O(n + e).– Con matriz de adyacencia, para cada nodo se buscan sus
adyacentes, O(n2).
![Page 39: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/39.jpg)
Grafos 39
Búsqueda primero en anchura• Analogía: deambular en un laberinto con una
cuerda y un bote de pintura, para no perderse.– Se selecciona un vértice inicial s de G, al que se fija inicialmente
un extremo de la cuerda y se marca s con el nivel 0.– Se ajusta la longitud de la cuerda igual al de una arista. Se
visitan y marcan con 1 todos los vértices adyacentes a s que se alcanzan con esa longitud.
– Se repite el proceso anterior con una longitud de cuerda igual al de dos aristas. Todos los vértices adyacentes al nivel 1 se marcan con el nivel 2.
– El recorrido termina cuando todos los vértices tienen asignado un nivel.
![Page 40: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/40.jpg)
Grafos 40
Búsqueda primero en anchura• Animación
a b
d e
c
0a b
d e
c
0 1
1
1
a b
d e
c
0 1
1
1 2
![Page 41: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/41.jpg)
Grafos 41
Búsqueda primero en anchura• El recorrido BPA es una generalización del recorrido por
niveles de un árbol.• Se pueden identificar dos tipos de aristas durante el
recorrido:– Aristas de descubrimiento: son aquellas aristas que conducen al
descubrimiento de nuevos vértices. – Aristas de cruce: son aristas que conducen a un vértice ya
visitado.
• Las aristas de descubrimiento forman un árbol de cubrimiento de los componentes conectados del vértice inicial s.
![Page 42: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/42.jpg)
Grafos 42
Algoritmo BPABPA(v){marca[v] = VISITADO;InsertaCola(v, C)while not EsVacíaCola(C) {
u = SuprimirCola(C);for cada nodo y adyacente a u {
if (marca[y]==SINVISITAR) {marca[y] = VISITADO;InsertaCola(y, C);
}}
}}
recorre_grafo_bpa(){for cada vértice vmarca[v]=SINVISITAR;
for cada vértice vif (marca[v]==SINVISITAR)
BPA(v);}
• Orden de complejidad del recorrido en anchura:– Con lista de adyacencia: O(n + e).– Con matriz de adyacencia: O(n2).
![Page 44: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/44.jpg)
Grafos 44
Usos de los Recorridos• Ambos recorridos se pueden usar para resolver los
siguientes problemas:– Probar que G es conectado.– Obtener un árbol de expansión de G.– Obtener los componentes conectados de G.– Obtener un camino entre dos vértices dados de G, o indicar que
no existe tal camino.
• El recorrido BPP se usa para:– Obtener un ciclo en G, o indicar que G no tiene ciclos.
• El recorrido BPA se usa para:– Obtener para cada vértice v de G, el número mínimo de aristas
de cualquier camino entre s y v.
![Page 45: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/45.jpg)
Grafos 45
Digrafos acíclicos• Es un grafo dirigido que no tiene ciclos. • Representan relaciones más generales que los
árboles pero menos generales que los digrafos. • Ejemplo: representar estructuras sintácticas de
expresiones aritméticas con subexpresiones comunes y el orden parcial de un conjunto.
*
+
a b
+
d *
(a+b)*(d+d*(a+b))
Orden parcial R en un conjunto S, relación binaria que cumple:– ∀ elemento a de S, (a R a)
es falso.– ∀ a, b, c de S, si (a R b) y
(b R c) entonces (a R c).
![Page 46: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/46.jpg)
Grafos 46
Digrafos acíclicos• Un grafo es acíclico si durante un recorrido BPP no
existen aristas de vuelta atrás o retorno. • Algoritmo: recorrer el digrafo usando BPP y
numerando los nodos nuevos en el recorrido. Si en algún momento en una arista de retorno un nodo descendiente tiene un nivel de profundidad menor que el antecesor, entonces existe un ciclo.
1
5
3 4
2
6 7
arista de retorno
![Page 47: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/47.jpg)
Grafos 47
Orden topológico• Ordenamiento topológico de un digrafo acíclico: orden
lineal de los vértices colocándolos a lo largo de una línea horizontal de tal manera que todas las aristas tengan una dirección de izquierda a derecha.
• Ejemplo: las tareas de un proyecto de construcción.• Algoritmo: usar una versión modificada de BPP.
orden_topologico(v) /* orden inverso */{marca[v]=VISITADO;for cada vértice w en lista_adyacencia(v)
if (marca[w]==SINVISITAR)orden_topologico(w);
imprime(v);}
![Page 48: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/48.jpg)
Grafos 48
Orden topológico• Ejemplo
• Orden topológico:1 2 3 4 5 61 3 2 4 5 62 1 5 3 4 6
1
5
3
4
2
6
1 2 3 4 5 6
![Page 49: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/49.jpg)
Grafos 49
1 2
35
4 15
30
20
25
50
45
10
25
4055
s t
a c
b d2
3 3
41
23
2
Algoritmos de caminos más cortos
![Page 50: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/50.jpg)
Grafos 50
Indice
• El problema de los caminos más cortos desde un vértice.– Algoritmo de Dijkstra.
• El problema de los caminos más cortos entre todos los pares de vértices.– Algoritmo de Floyd.
• Cierre transitivo.– Algoritmo de Warshall
![Page 51: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/51.jpg)
Grafos 51
Grafos con pesos• Cada arista lleva asociado un valor numérico no
negativo, w(e), que representar un costo que varía linealmente a lo largo de la arista (distancia, tiempo).
• El costo de un camino es la suma de los costos de las aristas del camino.
• Ejemplo: grafo que representa las rutas entre ciudades de una aerolínea. El peso de las aristas es el tiempo de vuelo.
MAD
SANBIL
BAR
VAL
MAL
SEV
COR2
1.51 1.1
1.2
1.3
2
1.2
1.5
1.2
0.91
1
![Page 52: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/52.jpg)
Grafos 52
Caminos más cortos
• El recorrido BPA halla los caminos con el menor número de aristas desde el vértice inicial. Por tanto, BPA halla los caminos más cortos asumiendo que las aristas tienen el mismo peso.
• En muchas aplicaciones (p.e. redes de transporte) las aristas tienen peso diferentes.
• Problema: Hallar los caminos de peso total mínimo desde un vértice determinado (fuente) a todos los demás vértices.
![Page 53: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/53.jpg)
Grafos 53
Algoritmo de Dijkstra• La idea principal es realizar una búsqueda a lo ancho
“ponderada” empezando por el vértice inicial f.• De manera iterativa se construye un conjunto de
vértices seleccionados S que se toman del conjunto de vértices candidatos C según el menor peso (distancia) desde f.
• El algoritmo termina cuando no hay más vértices de G fuera del conjunto formado.
• El paradigma usado corresponde al método voraz, en el que se trata de optimizar una función sobre una colección de objetos (menor peso).
• Se usa un vector d[v] para almacenar la distancia de v a f.
![Page 54: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/54.jpg)
Grafos 54
Algoritmo de Dijkstra• Cuando se añade un vértice al conjunto S, el valor de
d[v] contiene la distancia de f a v. • Cuando se añade un nuevo vértice u al conjunto S, es
necesario comprobar si u es una mejor ruta para sus vértices adyacentes z que están en el conjunto C.
• Para ello se actualiza d con la relajación de la arista (u, z):
d[z] = min( d[z], d[u] + w[u, z] )
ff
S
u z
30 90
100
6030 100
![Page 55: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/55.jpg)
Grafos 55
Algoritmo de DijkstraDijkstra(G, f)S = { f }, C = { V }d[f] = 0d[u] = ∞ ∀u ≠ fwhile (C ≠ ∅) {
seleccionar vértice w ∈ C / d[w] es mínimoS = S ∪ {w}, C = C - {w}for cada vertex v ∈ Adyacente[w] {
if (d[v] > d[w] + w(w, v))d[v] = d[w] + w(w, v)
}}
![Page 56: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/56.jpg)
Grafos 56
Algoritmo de Dijkstra
∞ ∞
∞ ∞
0
2
1
64932
10
5 7
f
610 ∞
5 ∞
0
2
1
4932
10
5 7
f
8 14
5 7
0
2
1
64932
10
5 7
f
8 13
5 7
0
2
1
64932
10
5 7
f
8 9
5 7
0
2
1
64932
10
5 7
f
8 9
5 7
0
2
1
64932
10
5 7
f
![Page 57: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/57.jpg)
Grafos 57
Algoritmo de Dijkstra• Para reconstruir los vértices del camino más corto desde
el vértice fuente a cada vértice:– Se usa otro array p[v] que contiene el vértice anterior a v en el
camino.– Se inicializa p[v] = f para todo v ≠ f– Se actualiza p siempre que d[v] > d[w] + w(w, v) a:
p[v] = w.– El camino a cada vértice se halla mediante una traza hacia atrás
en el array p.
8 9
5 7
0
2
1
64932
10
5 7
f
a
c
b
d
p[a] = c p[b] = a p[c] = f p[d] = c
![Page 58: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/58.jpg)
Grafos 58
Algoritmo de Dijkstra• Complejidad:
– Con matrices de adyacencia: O(n2).– Con listas de adyacencia: O(n2).– Se puede usar estructuras de datos más
eficientes, como una cola de prioridad para buscar el vértice con menor d[v] se consigue O(e*log n).
![Page 59: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/59.jpg)
Grafos 59
Ejemplo de aplicación Algoritmo de Dijkstra
• App para tiempo mínimo de viaje en avión– Determinación de la ruta más corta en
tiempo del vuelo entre ciudades de EEUU.– La diferencia horaria entre las ciudades
puede llegar a cuatro horas.– Fichero de vuelos entre ciudades.– Se toma la hora GMT para el cálculo del
tiempo de vuelo.
![Page 60: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/60.jpg)
Grafos 60
Animación del Algoritmo de Dijkstra
• Animación del algoritmo de Dijkstra
![Page 61: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/61.jpg)
Grafos 61
Caminos más cortos
• Problema: Hallar los caminos mínimos entre cualquier par de nodos de un grafo.
• Se puede usar el algoritmo de Dijkstra tomando cada vértice como fuente.
• Existe una manera más directa: algoritmo de Floyd.
![Page 62: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/62.jpg)
Grafos 62
Algoritmo de Floyd
• Utiliza una matriz Ak[i][j], que contiene el camino más corto que pasa por los primeros k primeros vértices.
• Inicialmente Ak[i][j] = C[i][j] ∀ i ≠ j. Si no hay arista de ia j C[i][j] = ∞ y los elementos diagonales se ponen a 0.
• En la iteración k (nodo k como pivote) se calcula, para cada camino de v a w, si es más corto pasando por kaplicando:Ak[i][j] = min (Ak-1[i][j] , Ak-1[i][k] + Ak-1[k][j] ), ∀ i ≠ j.
• Como no varía la fila y la columna k en la iteración k, sólo es necesario una matriz A.
![Page 63: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/63.jpg)
Grafos 63
Algoritmo de FloydFloyd (n, C, A){
A[i][j] = C[i][j] A[i][j] = 0for (k =1; k <=n; k ++)
for (i =1; i <=n; i ++)for (j =1; j <=n; j ++)
if (A[i][k] + A[k][j] < A[i][j] )A[i][j] = A[i][k] + A[k][j]
}
![Page 64: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/64.jpg)
Grafos 64
Algoritmo de Floyd
C[i][j] 1 2 3 1 0 8 52 3 0 ∞3 ∞ 2 0
1
2
35
8
3
2
A1[i][j] 1 2 3 1 0 8 52 3 0 83 ∞ 2 0
A2[i][j] 1 2 3 1 0 8 52 3 0 83 5 2 0
A3[i][j] 1 2 3 1 0 7 52 3 0 83 5 2 0
![Page 65: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/65.jpg)
Grafos 65
Algoritmo de Floyd• Para obtener los caminos se procede como en Dijkstra.
Se usa una matriz P[i][j] para almacenar el camino:– P[i][j] = 0 si el camino es directo. – En otro caso, si
if ( A[i][k] + A[k][j] < A[i][j] )P[i][j] = k
• La complejidad del algoritmo es:– Con matriz de adyacencia: O(n3).– Para grafos dispersos es mejor usar la versión
Dijkstra con lista de adyacencia que toma O(ne log n).
![Page 66: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/66.jpg)
Grafos 66
Cierre transitivo• Hay situaciones en las que sólo se desea determinar
si existe un camino entre dos vértices.• El algoritmo de Floyd se puede adaptar para resolver
este problema; el algoritmo resultante se llama algoritmo de Warshall.
• Se usa la matriz de adyacencia A[i][j] = 1, si existe una arista entre los vértices i y j, sino se asigna el valor 0.
• La matriz resultante se calcula aplicando la siguiente fórmula en la k-ésima iteración sobre la matriz A que almacenará el resultado:
Ak[i][j] = Ak-1[i][j] or (Ak-1[i][k] and Ak-1[k][j])
![Page 67: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/67.jpg)
Grafos 67
1 2
35
4 15
30
20
25
50
45
10
25
4055
s t
a c
b d2
3 3
41
23
2
Árbol de cubrimiento de costo mínimo
![Page 68: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/68.jpg)
Grafos 68
Indice
• Introducción.• Algoritmo de Prim. • Algoritmo de Kruskal.
![Page 69: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/69.jpg)
Grafos 69
Introducción• Un árbol de cubrimiento o expansión para un
grafo G = (V, E) no dirigido conectado con pesos es un árbol libre que conecta todos los vértices en V.
• El costo de un árbol de cubrimiento está determinado por la suma de los costos de las aristas en el árbol.
• Problema: hallar el árbol de cubrimiento de costo mínimo para G.
• Problema común en el planeamiento de redes de distribución y comunicación.
![Page 70: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/70.jpg)
Grafos 70
Introducción• Propiedad: Sea G = (V, E) un grafo conectado con
pesos. Sea U un subconjunto del conjunto de vértices V. Si e=(u, v) es la arista de menor costo considerando que u ∈ U y v ∈ V-U, entonces hay un árbol de cubrimiento mínimo que incluye (u, v) como arista.
U
V - U
e
![Page 71: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/71.jpg)
Grafos 71
Introducción
• Algoritmos comunes para resolver el problema:– Prim– Kruskal
• Ambos algoritmos – utilizan la propiedad anterior.– son de tipo voraz: se selecciona uno de los
candidatos con el criterio que es mejor en cada momento (menor costo).
![Page 72: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/72.jpg)
Grafos 72
Algoritmo de Prim
• Similar al algoritmo de Dijkstra.• Aumenta el árbol T un vértice cada vez.• El array d[v] contiene el menor costo de la
arista que conecta v con el árbol. • Tiene una complejidad O(n2).
![Page 73: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/73.jpg)
Grafos 73
Algoritmo de PrimPrim (G, T ){
T = ∅U = {1}while U ≠ V{seleccionar la arista (u, v) de menor costo
tal que u ∈ U y v ∈ V-UT=T ∪ {(u, v)}U=U ∪ {v}
}}
![Page 74: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/74.jpg)
Grafos 74
Algoritmo de Prim
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
Costo Total = 15
![Page 75: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/75.jpg)
Grafos 75
Algoritmo de Kruskal
• Añade una arista cada vez por orden de peso.• Acepta una arista si no produce un ciclo.• Se implementa usando una cola de prioridad.• Tiene una complejidad O(e log e).
![Page 76: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/76.jpg)
Grafos 76
Algoritmo de KruskalKruskal (G, T){
for cada vértice v en GC(v) = {v} /* grupo de vértices */
Q = cola de prioridad { (u, v) ∈ G, clave = w(u, v) }T = ∅while Q ≠ 0{Extraer de Q la arista (v, u) con menor pesoif C(v) ≠ C(u)
T=T ∪ { (v, u) }C(v) = C(v) ∪ C(u)
}}
![Page 77: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/77.jpg)
Grafos 77
Algoritmo de Kruskal
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
2 4
5 6
51
3
6
5 51
3 26 4
6
Costo Total = 15
![Page 79: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/79.jpg)
Grafos 79
1 2
35
4 15
30
20
25
50
45
10
25
4055
s t
a c
b d2
3 3
41
23
2
Flujo en Redes. Flujo máximo
![Page 80: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/80.jpg)
Grafos 80
Indice
• Introducción.• Flujo en redes. • El método de Ford Fulkerson. Flujo máximo.• Redes residuales.• Caminos aumentantes.• Cortes en redes de flujos.• Teorema de flujo-máximo mínimo-corte.• El algoritmo de Ford Fulkerson.
![Page 81: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/81.jpg)
Grafos 81
Introducción• Los digrafos se pueden usar para representar
flujo en redes.• Permiten modelar todo tipo de red, en
particular las de transporte y distribución: – flujo de fluídos en tuberías, piezas en una línea de
ensamblaje, corriente en circuitos eléctricos, información en redes de comunicación, etc.
• Problema: Maximizar la cantidad de flujo desde un vértice fuente a otro sumidero, sin superar las restricciones de capacidad.– Método de Ford-Fulkerson para resolver el
problema de máximo flujo.
![Page 82: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/82.jpg)
Grafos 82
Redes de flujo• Digrafo G=(V, E)• Los pesos de las aristas representan capacidad
(c(u, v)> 0). Si no hay aristas la capacidad es cero.
• Vértices especiales: fuente s, vértice sin aristas de entrada.sumidero t, vértice sin aristas de salida.
• El grafo es conectado: Hay un camino entre s y tpor algún vértice intermedio del grafo.
![Page 83: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/83.jpg)
Grafos 83
Redes de flujo• Un flujo en G es una función real f : VxV → ℜ que
satisface las siguientes propiedades:– Restricción de capacidad: Para todo u, v ∈ V, f (u, v) < c (u, v)– Antisimetría: Para todo u, v ∈ V, f (u, v) = −f (v, u)– Conservación de flujo: Para todo u ∈ V − {s, t }, = 0
• Valor del flujo: | f | = =∑∈Vv
vuf ),(
∑∈Vv
vsf ),( ∑∈Vv
tvf ),(
v1 v3
v2 v4
s t
12 / 12
11 / 16
1 / 410 7 / 7
![Page 84: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/84.jpg)
Grafos 84
Método de Ford-Fulkerson• Método iterativo para resolver el problema de flujo
máximo. • Seudocódigo:
Método de Ford-Fulkerson (G, s, t)Inicializar flujo f a 0while exista un camino aumentante p {
aumentar flujo f a través de p}return f
• El método depende de tres conceptos básicos:– Redes residuales.– Camino aumentante.– Cortes en redes de flujo.
![Page 85: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/85.jpg)
Grafos 85
Redes residuales• Para una red de flujo y un flujo, la red residual es el conjunto
de aristas que pueden admitir más flujo.• Sea una red de flujo G=(V, E) con fuente s y sumidero t. Sea
f un flujo en G y un par de vértices u, v ∈ V. El flujo netoadicional desde u a v sin exceder la capacidad c(u, v) es lacapacidad residual de (u, v), definida por:
cf(u,v) = c(u,v) − f(u,v)• La red residual de G inducida por f es Gf = (V, Ef) donde
Ef = {(u,v) ∈ VxV: cf(u, v) > 0}
1111 / 14
v1 v3
v2 v4
s t
12 / 12
1 / 410 7 / 7
v1 v3
v2 v4
s t
12
3113
7
G Gf
![Page 86: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/86.jpg)
Grafos 86
Caminos aumentantes• Un camino aumentante p en una red de flujo G=(V, E) y flujo
f, es un camino simple de s a t en la red residual Gf.• Cada arista (u, v) del camino aumentante admite un flujo neto
positivo adicional de u a v sin violar la restricción decapacidad de la arista.
• Capacidad residual: es la máxima cantidad de flujo neto quese puede enviar por las aristas de un camino aumentante. Secalcula por:
cf(p) = min{cf(u,v) / (u,v) ∈ p}
11 / 14
v1 v3
v2 v4
s t
12 / 12
1 / 410 7 / 7
G
11
v1 v3
v2 v4
s t
12
3113
7
Gf
Cf= min{5, 4, 5} = 4
![Page 87: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/87.jpg)
Grafos 87
Cortes en redes de flujo• Un corte (S, T) de una red de flujo G=(V, E) es una
partición del conjunto de vértices V en dos subconjuntosS y T = V−S tal que s ∈ S y t ∈ T.
• Si f es un flujo:– f(S, T) es el flujo neto a través del corte (S,T).– c(S, T) es la capacidad del corte (S,T).
• Flujo en una red = flujo neto a través de cualquier corte de la red.
Corte = ( {s, v1, v2}, {s, v1, v2} )
f(s, t) = f(v1, v3) + f(v2, v3) + f(v2, v4) =12 + (-4) + 11 = 19
c(s, t) = c(v1, v3) + c(v2, v4) = 12 + 14 = 2611 / 14
v1 v3
v2 v4
s t
12 / 12
1 / 410 7 / 7
G
S T
![Page 88: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/88.jpg)
Grafos 88
Teorema flujo-máximo mínimo-corte
• Si f es un flujo en una red de flujo G = (V, E) confuente s y sumidero t, entonces las siguientescondiciones son equivalentes:– f es un flujo máximo en G.– La red residual Gf no contiene caminos
aumentantes.– | f | = c(S, T) para algún corte (S, T) de G.
![Page 89: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/89.jpg)
Grafos 89
Algoritmo de Ford-FulkersonFord-Fulkerson (G, s, t)for cada arista (u, v) ∈ E[G] {
f [u, v] = 0f [v, u] = 0
}while exista un camino p de s a t en el grafo residual Gf {
cf(p) = min{ cf(u, v) / (u, v) ∈ p}for cada arista (u, v) ∈ p
f [u, v] = f [u, v] + cf(p)f [v, u] = −f [u, v]
}
![Page 90: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/90.jpg)
Grafos 90
Ejemplo
14
v1 v3
v2 v4
s t
12410 7
Grafo Residual Flujo
11 / 14
v1 v3
v2 v4
s t
4 / 12
47 / 1
0
7 / 7
4 / 14
v1 v3
v2 v4
s t
4 / 12
410 7
4
v1 v3
v2 v4
s t
8
410
10
7
4
![Page 91: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/91.jpg)
Grafos 91
EjemploGrafo Residual Flujo
11 / 14
v1 v3
v2 v4
s t
12 / 12
1 / 410 7 / 7
11 / 14
v1 v3
v2 v4
s t
12 / 12
1 /
4
10 7 /
7
11
v1 v3
v2 v4
s t
8
113
37
4
11
v1 v3
v2 v4
s t311
3
7
12
![Page 92: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/92.jpg)
Grafos 92
Ejemplo y complejidadGrafo Residual Flujo
11 / 14
v1 v3
v2 v4
s t
12 / 12
1 / 410 7 / 7
11
v1 v3
v2 v4
s t311
37
12
• Para hallar el camino aumentante se puede usar cualquier tipo de recorrido (BPA o BPP).
• La capacidad de cada arista se puede multiplicar por un factor de escala para conseguir que sea entera.
• Bajo estas condiciones el algoritmo tiene una complejidad de O(E| f * |), donde f *es el máximo flujo obtenido por el algoritmo.
![Page 93: Grafos · Grafos 29 Matriz de Adyacencia – En grafos etiquetados: • M[i][j] = atributo de la arista (i, j) en el grafo, indicador especial si no hay una arista (i, j). • Es](https://reader030.vdocuments.mx/reader030/viewer/2022040120/5e770fe606a80a571b130864/html5/thumbnails/93.jpg)
Grafos 93
Animación del algoritmo flujo máximo
Algoritmo de flujo máximo