Beruflich Dokumente
Kultur Dokumente
Jose Aguilar
J. Aguilar
Mcbo
Pto. Cabello
Caracas
Valencia
Valera
Maracay
Bqto
Acarigua
Barinas
Mda
San Carlos
San Juan
San Fernando
San Cristobal
J. Aguilar
Aplanar
terreno
Pintar
pirmide
Comprar
piedras
Hacer
camino
Cincelar
piedras
Colocar
piedras
J. Aguilar
J. Aguilar
Modelo 1
4
3
7
5
6
Modelo 2
a
c
e
d
J. Aguilar
J. Aguilar
J. Aguilar
Grafos etiquetados
Es un grafo que tiene un valor entero o real asignado a
cada arista
2
d
f
3
1
10
rboles de expansin o
recubrimiento mnimo
Sea un grafo etiquetado no dirigido y conexo G = (N, A), el
rbol de expansin (T) de G es un subconjunto acclico de
A,
T A, w(T) = donde w: A .
Encontrar T es el denominado problema del rbol de
expansin mnimo.
J. Aguilar
11
3
2
3
5
ALGORITMO DE PRIM
El algoritmo incrementa continuamente el tamao de
un rbol, comenzando por un vrtice inicial al que se le
van agregando sucesivamente vrtices cuya distancia a
los anteriores es mnima. Esto significa que en cada
paso, las aristas a considerar son aquellas que inciden
en vrtices que ya pertenecen al rbol.
El rbol recubridor mnimo est completamente
construido cuando no quedan ms vrtices por agregar.
J. Aguilar
13
Algoritmo de Prim
Es un algoritmo incremental.
J. Aguilar
14
Algoritmo de Prim
La idea bsica consiste en aadir, en cada paso, una
arista de peso mnimo a un rbol previamente
construido
1. Empezar en un vrtice cualquiera v. El rbol consta
inicialmente slo del nodo v.
2. Del resto de vrtices, buscar el que est ms prximo a v (es
decir, con la arista (v, w) de coste mnimo). Aadir w y la arista
(v, w) al rbol.
3. Buscar el vrtice ms prximo a cualquiera de estos dos. Aadir
ese vrtice y la arista al rbol de expansin.
4. Repetir sucesivamente hasta aadir los n vrtices.
Algoritmo de Prim
Versin 1.0
T(n) = O(A + N lg N)
J. Aguilar
18
Algoritmo de Prim
PRIM(G, r)
para cada vrtice u en G
clave[u] = infinito
padre[u] = NULO
clave[r] = 0
Meter los vrtices u de G a una cola de prioridad Q con clave[u]
Mientras no este vaca Q
Extraer un vrtice de Q y llamarlo u
Para cada vrtice v que sea adyacente a u
Si v esta en Q y el peso de (u,v) < clave[v]
padre[v] = u
clave[v] = w(u,v)
La clase ColaPrioridad debe ser implantada con montculos de Fibonacci
para poder tener un tiempo mejor que el algoritmo de Kruskal. Si se
implanta con un montculo binario su complejidad es igual a la del algoritmo
J. Aguilar
de Kruskal.
19
20
crea()
union()
destruye()
J. Aguilar
21
Cola de Prioridad
Implementaciones de un TDA de Cola de Prioridad
Arboles equilibrados
Montculos Binarios
Montculos a la izquierda
Montculos oblicuos
Colas binomiales, colas binomiales perezosas
Colas de Fibonacci
Un montculo binario (o simplemente montculo) es un
rbol binario semicompleto en el que el valor de la clave
almacenada en cualquier nodo es menor o igual que los
valores claves de sus hijos
Propiedad de ordenamiento parcial
J. Aguilar
22
Algoritmo de Prim
Paso
2
f
3
1
(u, v)
J. Aguilar
23
Algoritmo de Kruskal
J. Aguilar
24
ALGORITMO DE KRUSKAL
El algoritmo de Kruskal permite hallar el
rbol minimal de cualquier grafo valorado
(con capacidades). Hay que seguir los
siguientes pasos:
1. Se marca la arista con menor valor. Si hay ms de una,
se elige cualquiera de ellas.
2. De las aristas restantes, se marca la que tenga menor
valor, si hay ms de una, se elige cualquiera de ellas.
3. Repetir el paso 2 siempre que la arista elegida no
forme un ciclo con las ya marcadas.
4. El proceso termina cuando tenemos todos los nodos
del grafo en alguna de las aristas marcadas, es decir,
cuando tenemos marcados n-1 arcos, siendo n el
nmero de nodos del grafo
J. Aguilar
25
ALGORITMO DE KRUSKAL
Esquema: G= (V, A)
1. Empezar con un grafo sin aristas: G= (V, )
2. Seleccionar la arista de menor coste de A.
3. Si la arista seleccionada forma un ciclo en G,
eliminarla. Si no, aadirla a G.
4. Repetir los dos pasos anteriores hasta tener n-1
aristas.
Cmo saber si una arista (v, w) provocar un ciclo en
el grafo G?
ALGORITMO DE KRUSKAL.
Necesitamos:
Ordenar las aristas de A, de menor a mayor:
O(a log a).
Saber si una arista dada (v, w) provocar un ciclo.
Cmo comprobar rpidamente si (v, w) forma un ciclo?
Una arista (v, w) forma un ciclo si v y w estn en el mismo
componente conexo.
La relacin estar en el mismo componente conexo es una
relacin de equivalencia.
J. Aguilar
28
ALGORITMO DE KRUSKAL
Usamos la estructura de relaciones de equivalencia
con punteros al padre:
J. Aguilar
29
Algoritmo
1A=
2 while A does not form a MST
3 do find an edge (u,v) safe for A
4
A<-A U {(u,v)}
5 return A
rboles de expansin o
recubrimiento mnimo
Aplicacin:
G={N, A} N={ciudades} y A={costo de lnea telefnica del
nodo a al nodo b}
31
Arcos Seguros
Corte: (S, V-S) es una particin de V.
Respeta A
A
corte
Conceptos
Nocin de Corte
Teorema:
Sea G = (V,E) un grafo conexo, con
w : ER.
Sea A un subgrafo de E que se incluye en algn
MST G.
Sea (S, V-S) cualquier corte de G que respeta A y
Sea (u,v) un Arco Ligero que cruza (S,V-S).
(u,v) es seguro para A.
Conceptos
J. Aguilar
35
Algoritmo de Kruskal
Versin 1.0
KruskalAEM( ): Conjunto[Arista]
{pre: n > 0 }
{pos: n > 0 G' = G X es el rbol de expansin mnima de G }
1 [ cdis.incluir(v) ] v N
-X. Conjunto[X]. rbol de expansin mnima
2
Ordene ascendente las aristas de G por
resultante para el grafo.
3
sus pesos w
-cdis: ConjDisj[TipoClave]. Bosque de nodos
4 [ Si ( cdis.buscar(v) cdis.buscar(u) )
del grafo.
entonces
-incluir( ), buscar( ), union( ). Definidas en la
clase ConjDisj.
X = X {(u, v)}
cdis.union(u, v)
// O(A lg A)
- ( ). Funcin de la clase Conjunto [X].
fsi ] (u, v) A por orden ascendente de w
regrese X
T(n) = O(A lg A)
J. Aguilar
36
Algoritmo de Kruskal
Paso
componentes
conexos
2
f
3
1
arista
considerada
J. Aguilar
37
rboles de expansin
mnimos.
Ambos algoritmos (Prim y Kruskal) encuentran
siempre la solucin ptima.
La solucin obtenida ser la misma, o no...
La estructura de los dos algoritmos es muy parecida:
Empezar con una solucin vaca.
Aadir en cada paso un elemento a la solucin (Prim: un
nodo; Kruskal: una arista).
Una vez aadido un elemento a la solucin, no se quita
(no se deshacen las decisiones tomadas).