Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANÁLISIS
FUNCIONES,
GRAFOS Y MATEMÁTICO DE
NOTACIÓN ESTRATEGIAS DE
BÚSQUEDA EN ALGORITMOS;
ASINTÓTICA Y BUSQUEDA
GRAFOS. ALGORITMOS EN
BACKTRACKING
GRAFOS
2
Tabla de Contenido
• MOTIVACIÓN • ALGORITMO DE PRIM
– ¿Cómo conectar N ciudades? – Algoritmo de Prim
– ¿Cómo conectar una ciudad? – Análisis
– ¿Cómo diseño de circuitos electrónicos?
– ¿Cómo diseñar de transporte de flujo? • ALGORITMO DE KRUSKAL
– Algoritmo de Kruskal
• ÁRBOL DE EXPANSIÓN – Análisis
– Árbol de Expansión
3
MOTIVACIÓN
2
2 b d 3
s 4
1 t
3 3 2
a c
¿Cómo conectar N ciudades?
5
¿Cómo conectar una ciudad?
6
¿Cómo diseño de circuitos electrónicos?
• Usar la menor cantidad posible de cable.
Fuente: http://www.hexapolis.com/wp-content/uploads/2015/02/Reconfigurable-Electronic-Circuits-51.jpg
7
¿Cómo diseñar de transporte de flujo?
• De computadoras, transporte, flujo hídrico, etc.
• Minimizar el uso de recursos de construcción.
Fuente: http://www.ecritel.fr/IMG/jpg/network2.jpg
8
Aplicaciones
• Diseño de redes de telecomunicaciones nacionales e
internacionales.
9
Requerimiento
• Sea un grafo no dirigido, con pesos. a
6 5
b 1 d
5 5
f
3 6 4 2
c e
6
b 1 d
5
f
3 4 2
c e
Solución= 3+5+1+4+2 = 15
10
ÁRBOL DE EXPANSIÓN
Árbol de Expansión
• Un árbol de expansión de un grafo G=(V, A) no dirigido y
conexo es un subgrafo G’=(V, A’) conexo y sin ciclos.
4
1 2
1 1
3
3 2 4 3 2
4 5
2 5 3 5 2 5 3 5
5 2 5 3 5 2 5 3
12
Árbol de Expansión
13
Árbol de Expansión
• Sea el grafo:
A T
O B D
C E
14
Árbol de Expansión
A T
O B D
Red no conexa. No es árbol
C E
A T
B DD
O
15
Árbol de Expansión
A T
B DD
O
C E
16
ÁRBOL DE EXPANSIÓN
MÍNIMA
Árbol de Expansión Mínima
• Árbol de expansión mínima.
18
Requerimiento
• Dado un grafo G = (V, A)
– No dirigido
19
Árbol de Expansión Mínima
• Para un grafo G = (V, A) no dirigido y conexo
• Problema:
– Dado un grafo ponderado no dirigido, encontrar el árbol
de expansión de menor coste.
20
Propiedades
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 expansión mínima que
incluye (u, v) como arista.
V-U
U
e
21
Algoritmos
• 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).
22
Ejercicio
• Calcular todos los servidores, de tal forma que se pueda
llegar a todos los otros servidores, desde cualquier
servidor.
2
3
1 6 2
3
5 4
5
23
ALGORITMO DE PRIM
Algoritmo de Prim
1. Empezar en un vértice cualquiera v. El árbol
consta inicialmente sólo del nodo v.
26
Algoritmo de Prim
• El árbol T aumenta un vértice cada vez.
27
Ejemplo
1 2
3
2
3 6 2
1
5 3
5 4
5
6
4
6
28
Ejemplo
1 2
2
3 2
1
5 3
5
6
4
29
Análisis
• La solución se construye poco a poco,
empezando con una solución “vacía”.
30
Ejercicio
• Encontrar el árbol de expansión mínima por el algoritmo de
Prim
31
Ejercicio
32
Ejercicio
A 7 T
2 5
2
5 B 4 D
O
3 1 7
1
4
C E
4
33
Ejercicio
A 7 T
2 5
2
5 B 4 D
O
3 1 7
1
4
C E
4
34
ALGORITMO DE KRUSKAL
Algoritmo de Kruskal
• Sea el grafo G= (V, A)
36
Algoritmo de Kruskal
Kruskal (G, T)
{
for cada vértice v en G
C(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 peso
if C(v) C(u) /* no forma ciclo */
T=T { (v, u) }
C(v) = C(v) C(u)
}
}
37
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).
38
Ejemplo
1 2
3
2
3 6 2
1
5 3
5 4
5
6
4
6
39
Ejercicio
1 2
1 2 3
6 5
4 4 6
3 8
4 5 6
7
4 3
7
40
Ejercicio
1 2
1 2 3
4
3
4 5 6
4 3
7
41
Ejercicio
• Calcular el árbol de expansión mínima por Kruskal
42
Ejercicio
43
Ejercicio
44
Ejercicio
45
Análisis
• Implementación del algoritmo
• Necesitamos:
– Ordenar las aristas de G, de menor a mayor:
O(a log a).
– Saber si una arista dada (v, w) provocará un ciclo.
46
Análisis
• ¿Cómo comprobar rápidamente si (v, w) forma un ciclo?
47
Análisis
Connected_Components(G)
for (cada vertice v en V[G] )
Make_Set(v);
for (cada arco (u,v) en E [G])
Union(u,v);
a b e f h j
c d g i
48
Referencias
• Cormen, Thomas H. and Others. Introduction to
Algorithms, Second Edition. 2001.
49
Visualización
PRIM
• https://www.cs.usfca.edu/~galles/visualization/Prim.html
Kruskal
• https://www.cs.usfca.edu/~galles/visualization/Kruskal.html
50
PREGUNTAS