algoritmos codiciosos y problemas de optimización en...
TRANSCRIPT
Algoritmos Codiciosos y problemas deOptimizacion en Grafos
CSI / Depto Matematicas
CB102
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Conceptos
Un arbol es un grafo conexo y sincircuitos. Un arbol trivial es ungrafo que consiste de un solo vertice.Un grafo sin circuitos se dicebosque. En un arbol G a un verticecon grado 1 se le llamara verticeterminal. Un vertice con gradomayor que 1 se llamara vertice ramao interno.
Ejemplo
de arbol:
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Conceptos
Un arbol es un grafo conexo y sincircuitos. Un arbol trivial es ungrafo que consiste de un solo vertice.Un grafo sin circuitos se dicebosque. En un arbol G a un verticecon grado 1 se le llamara verticeterminal. Un vertice con gradomayor que 1 se llamara vertice ramao interno.
Ejemplo
de arbol trivial:
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Conceptos
Un arbol es un grafo conexo y sincircuitos. Un arbol trivial es ungrafo que consiste de un solo vertice.Un grafo sin circuitos se dicebosque. En un arbol G a un verticecon grado 1 se le llamara verticeterminal. Un vertice con gradomayor que 1 se llamara vertice ramao interno.
Ejemplo
de bosque:
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Conceptos
Un arbol es un grafo conexo y sincircuitos. Un arbol trivial es ungrafo que consiste de un solo vertice.Un grafo sin circuitos se dicebosque. En un arbol G a un verticecon grado 1 se le llamara verticeterminal. Un vertice con gradomayor que 1 se llamara vertice ramao interno.
Ejemplo
de verticesterminales einternos:
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Propiedad 1
Propiedad 1
Teorema
En un arbol T hay exactamente un camino entre todopar de vertices
Como T es un arbol, T es conexo. Ası, entre todo par de verticeshay al menos un camino. Si entre dos vertices a y b hubiera doscaminos distintos la union de esos dos caminos contendrıa uncircuito y por tanto T no serıa un arbol.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Propiedad 2
Propiedad 2
Teorema
Un grafo G es un arbol si y solo si entre cada par devertices de G existe solo un camino que los une.
Si G es un arbol, por el teorema anterior la propiedad se tiene.Supongamos ahora que la propiedad se cumple. Veamos que Gdebe ser un arbol, para ello veamos que es conexo y sin circuitos.Por la propiedad, entre todo par de vertices hay un camino que losune. Ası, G es conexo. Si existiera un circuito en G , se tendrıandos distintos caminos entre dos de los vertices del circuito. Lo cualcontradice la propiedad. Por tanto, no existen circuitos en G . Portanto, G es un arbol.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Propiedad 3
Propiedad 3
Teorema
Un arbol T con n vertices tiene n − 1 lados.
La prueba se hara por induccion fuerte sobre n. El caso n = 1 es el arbol trivial con cero lados. Supongamos que la
propiedad se cumple para todos los arboles con menos de k vertices. Veamos que se cumple para un grafo
cualquiera de k + 1 vertices. Suponga un arbol T cualquiera con k + 1 vertices. Sean vi y vj dos vertices unidos
por el lado e en T . Por la propiedad 2 no existe un camino que una vi y vj excepto el que se reduce al lado e. Al
remover e de los lados de T , T tendra exactamente dos componentes conexas digamos T1 y T2. Ambas son
conexas, no tienen circuitos y tienen un menor numero de vertices que T . Ası, son arboles a los cuales se le puede
aplicar la hipotesis inductiva. Digamos que T1 tiene n1 vertices y que T2 tiene n2 vertices. Ası, el numero de lados
de T1 es n1 y el de T2 es n2 − 1. Por tanto, n = n1 + n2 y el numero de lados de T es (n1 − 1) + (n2 − 1) + 1.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Tarea
Propiedad 4
Teorema
Cualquier grafo conexo con n − 1 lados es un arbol.
Propiedad 5
Teorema
Un grafo es un arbol si y solo si esta mınimamenteconectado.
Propiedad 6
Teorema
Un grafo con n vertices, n − 1 lados y sin circuitos esconexo.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Definicion
Un arbol abarcador para un grafo no dirigido conexo G = (V ,E )es un subgrafo de G que es un arbol y que contiene todos losvertices de V . En el caso de un grafo con peso G = (V ,E ,w), unarbol abarcador minimal (o MST por sus siglas en ingles) es unarbol abarcador cuyo peso total es mınimo.
4
32
1
2
3 12
32
14
21
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Ideas
Determinar un MST es un problema de optimizacion.
Una primera idea es seguir una estrategia codiciosa (greedy):avanzar escogiendo una accion que incurra a corto plazo en elmenor costo posible. (¿Se dara la situacion donde estasdecisiones lleven a una situacion en la que no se puedan evitarcostos altos?)
La seleccion de lados de mınimo peso para ir construyendo unarbol, ¿funcionara correctamente?
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Clasificacion de vertices
Clasificacion de los vertices en la evolucion del algoritmo:
Vertices en el arbol construyendose: los que sı estan en elarbol.
Vertices en el borde: que no estan en el arbol pero que sonadyacentes a algun vertice que sı lo esta.
Vertices no vistos: todos los demas.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Primera aproximacion al algoritmo de PRIM
primtMST(grafo G, int n)
1. Inicializar los vertices como no vistos.
2. Seleccionar un vertice s para iniciar el arbol.
3. Clasificar todos los adyacentes a s como de borde.
4. Mientras existan vertices en el borde hacer:
4.1 Seleccionar una arista con peso mınimo entre un vertice del arbol t
y uno en el borde v .
4.2 Reclasificar a v como arbol y anadir tv al arbol.
4.3 Reclaclasificar todos vertices no vistos como adyacentes a v como de
borde.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Propiedad a∗
Sea G = (V ,E ,w) un grafo conexo y sea T un arbol abarcador deG . Se dice que T satisface la propiedad a∗ si para cualquier ladouv de E que no esta en T si se anade la arista uv a T se formaraun circuito donde no existe un lado en T de tal circuito que tengamayor peso que uv . Si C es el circuito formado al anadir uv :w(uv) ≥ w(st) para cualquier lado st de C .
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Lema 1
Sea G = (V ,E ,w) un grafo conexo y sean T1 y T2 dos arbolesabarcadores que satisfacen la propiedad a∗. Entonces tienen elmismo peso.
Por induccion sobre el n numero de aristas en que difieren T1 y T2. Si
n = 0 entonces son identicos y tienen el mismo peso. Sea k > 0 y
supongamos que la propiedad se cumple para cualquier dos arboles que
satisfacen a∗ y que difieren en j aristas con 0 ≤ j ≤ k . Veamos que se
cumple para j = k + 1. Sean T1 y T2 dos arboles que cumplen la
propiedad a∗ que difieren en k + 1. Sea uv una arista con peso mınimo
entre todas las aristan en que difieren T2 y T1. Digamos que uv este en
T2. En T1 debe haber un camino unico de u a v . Este camino debe
contener un lado que esta en T1 y que no esta en T2 digamos rs.
w(uv) ≥ w(rs) por cumplir T1 la propiedad a∗. w(uv) ≤ w(rs) porque
uv es la de peso menor en la que difieren. Anadimos el lado uv a T1 y
quitamos el lado rs para tener el arbol T ′1. T1 y T ′1 tienen el mismo peso,
T ′1 sigue teniendo la propiedad a∗ y T ′1 y T2 difieren en k aristas. Por la
hipotesis inductiva, T ′1 y T2 tienen el mismo peso. Ası tambien T1 y T2.CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Teorema
Sea G = (V ,E ,w) un grafo conexo. Un arbol T es un MST si ysolo si satisface la propiedad a∗.
Suponga que T es un MST. Suponga que no cumple a∗. entonces existeun par de vertices u y v tal que uv no esta en T y tal que en el caminode T de u a v existe un lado mayor que uv , digamos rs. Cambiemos Treemplazando a rs por uv . Al nuevo arbol abarcador tiene menor pesoque T , contradiciendo que T sea un MST.
Suponga que T cumpla a∗. Sea T2 un MST. Ası por la recien demostrado
T2 cumple a∗. Por el lema, T y T2 son arboles abarcadores que cumplen
a∗. Por el lema probado, T y T2 tienen el mismo peso. Por tanto, no
existe un arbol con menos peso que T . Por tanto, T es un MST.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Lema 2
Sea G = (V ,E ,w) un grafo conexo y con peso con n vertices. SeaTk el arbol construido hasta la iteracion k por el algoritmo dePrim y sea Gk el subgrafo de G que consta de los vertices de Tk .Entonces Tk cumple a∗ para Gk .
Por induccion sobre k. Claramente, vale para k = 0. Supongamosque Tk cumple a∗ para Gk . Veamos que Tk+1 tambien la cumplepara Gk+1. Supongamos que no. Debe existir un lado uv que noesta en Tk+1 que cuando se anade a Tk+1 forma un circuito ydonde existe un lado de Tk+1, tr con peso mayor: w(uv) < w(tr).Esto es imposible: si todos los lados del circuito excepto uv estanen Tk , por tanto el lado que se anadio en la iteracion k + 1 debeestar en tal circuito. Ası mismo, todos los lados del circuito queestan en Tk no tienen peso mayor que uv . Esto nos lleva a unacontradiccion pues el algoritmo debio haber elegido uv en lugar detr .
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Teorema
El algoritmo de Prim produce un MST.
Por el lema anterior, el arbol obtenido en la iteracion n cumple a∗
para G = Gn y por tanto es un MST.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Prim: con colas de prioridad
primMST(G,n)Inicializar la cola de prioridad cp como vacıa;Seleccionar un vertice arbitrario s para iniciar el arbol;Insertar (cp,s,0);Mientras cp no este vacıa hacer:
v = obtenerMin(cp); borrarMin(cp);anadir la arista que une con v al arbol;actualizar el borde del arbol;
actualizarBorde (cp, G, v);Para todos los vertices u de G adyacentes a v
Si u no vistoInsertar en cp (u,w(v , u));
Si u esta en la cola de prioridad cp hacer:Si la prioridad en cp de u es menor que w(v , u)
Cambiar la prioridad en cp de u por w(v , u).
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 ∞ N
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 N
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 N
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 N
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B -1 ∞ N
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F -1 ∞ N
G -1 ∞ N
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Bo
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Bo
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Bo
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C -1 ∞ N
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Bo
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Ar
H -1 ∞ N
I -1 ∞ N
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Ar
H -1 ∞ N
I G 1 Bo
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
7
6
4
2
28
1
26
5
1 3
4
3
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C B 4 Bo
D -1 ∞ N
E -1 ∞ N
F A 7 Bo
G A 3 Ar
H -1 ∞ N
I G 1 Bo
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
7
6
4
2
28
1
26
5
1 3
4
3
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C
D
E
F
G A 3 Ar
H
I
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C
D
E
F
G A 3 Ar
H
I
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C
D
E
F
G A 3 Ar
H
I
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
i Padre Pri Sta
A -1 0 Ar
B A 2 Ar
C
D
E
F
G A 3 Ar
H
I
primMST(Grafo G,int n,int s,int padre[])cp = crear(n, Sta, Padre, Pri)insertar(cp,s,-1,0)while (estaVacia(cp) == False)
v = obtenerMin(cp);borrarMin(cp);
actualizaBorde(cp, G, v);
A B
C
DE
F
G
HI
2
3
7
6
4
2
28
1
26
5
1 3
4
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Complejidad
T (n,m) = O(n T (obtenerMin) + n T (borrarMin) + m T (decrementarClave))= O(n log(n) + m log(n))
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Algoritmo de Kruskal
kruskalMST(G,n,F)Construir una cola de prioridad cp con los lados de G;Inicializar componente conexa (cada nodo en su componente);F=∅;while (vacia(cp) != false)
arista = obtenerMin(cp);borrarMin(cp);u = De(arista);v = A(arista);if (NumeroComponente(u) != NumeroComponente(v))
anadir arista a F;unirComponentes(u,v);
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Teorema
El algoritmo de Kruskal produce un MST.
Veamos que el arbol T producido por el algoritmo de Kruskalcumple la propiedad a∗: Razonemos por contradiccion,supongamos que no. Ası, debe existir un lado uv en E que no estaen T y que es tal que cuando se anade a T se forma un circuitodonde uv no es el mayor lado. Por consiguiente, debe haber almenos un lado tr en T en tal circuito con peso mayor:w(uv) < w(tr). Supongamos que el lado tr se anadio a T en laiteracion j . En dicha iteracion, el lado uv no formaba circuito enFj y tenıa un peso menor que tr . Por tanto, es imposible que elalgoritmo haya elegido a tr por encima de uv .
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Complejidad Kruskal
T (n,m) = O(m log(m) + (n − 1) AgrupaComponentes(n))= O(m log(n))
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
El problema del Camino mas Corto
Definicion
Sea G = (V ,E ,w) un grafo con peso y un vertice origen s ∈ V . Elproblema consiste en encontrar el camino mas corto de s a cadavertice de V .
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Algoritmo de DijkstradijsktraCC(G ,n,s, padre[])
cp=crear(n,sta,padre,prio);insertar(cp,s,-1,0);while (vacia(cp) != false)
v = obtenerMin(cp);borrarMin(cp);actualizarBorde(cp,G ,v);
actualizarBorde (cp, G, v);d = prioridad(cp,v);Para todos los vertices u de G adyacentes a v ;
Si u no vistopadre[u] = v ;Insertar en cp (u, d + w(v , u));
Si u esta en la cola de prioridad cp hacer:Si la prioridad en cp de u es menor que d + w(v , u)
Cambiar la prioridad en cp de u por d + w(v , u);padre[u] = v ;
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
El problema del Camino mas Corto
Lema 3
Sea G = (V ,E ,w) un grafo con pesos no negativos. Sea V ′ unsubconjunto de V y sea s un elemento de V ′. Suponga que d(s, y)es la distancia mas corta de s a y en G : si se escoge la arista yz demodo que d(s, y) + W (yz) es mınima entre todas las aristas quetienen un vertice y ∈ V ′ y un vertice z ∈ V − V ′, entonces elcamino mas corto de s a z es el camino mas corto de s a y seguidode la arista yz .
Razonemos por contradiccion: Supongamos que no, entonces debe haber
un camino de s a z que es mas corto: sea z1 el primer elemento de
V − V ′ en este camino y sea y1 el elemento de V ′ anterior a z1. Por
tanto, d(s, y1) + w(y1, z1) < d(s, z) ≤ d(s, y) + w(y , z). Esto es
imposible, pues se contradice la eleccion de z .
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos
Teorema
Dado un grafo ponderado G = (V ,E ,w) con pesos no negativos yun vertice s ∈ V . Entonces el algoritmo de Disjktra determina ladistancia mas corta de s a todos los vertices a los que se puedellegar desde s.
La correctitud del algoritmo de Disjktra se obtiene de la aplicacionrepetida del lema 3.
CSI / Depto Matematicas Algoritmos Codiciosos y problemas de Optimizacion en Grafos