Sie sind auf Seite 1von 38

rboles abarcadores mnimos:

algoritmo de Prim y algoritmo


de Kruskal.

Jose Aguilar
J. Aguilar

Grafo de carreteras entre ciudades


Coro

Mcbo

Pto. Cabello

Caracas

Valencia

Valera

Maracay

Bqto
Acarigua

Barinas
Mda

San Carlos

San Juan

San Fernando

San Cristobal
J. Aguilar

Grafo de carreteras entre ciudades


Problemas
Cul es el camino ms corto de Valera a Ccs?
Existen caminos entre todos los pares de
ciudades?
Cul es la ciudad ms lejana a Valencia?
Cul es la ciudad ms cntrica?
Cuntos caminos distintos existen de Mda a
Barinas?
Cmo hacer un tour entre todas las ciudades en el
menor tiempo posible?
J. Aguilar

Grafo de planificacin de tareas


Licencia
de obras

Aplanar
terreno

Pintar
pirmide

Comprar
piedras

Hacer
camino

Cincelar
piedras

Colocar
piedras

J. Aguilar

Grafo de planificacin de tareas


Problemas
En cuanto tiempo, como mnimo, se puede
construir la pirmide?
Cundo debe empezar cada tarea en la
planificacin ptima?
Qu tareas son ms crticas (es decir, no pueden
sufrir retrasos)?

J. Aguilar

Grafos asociados a dibujos


Escena

Modelo 1

4
3
7

5
6
Modelo 2

a
c

e
d
J. Aguilar

Grafos asociados a dibujos


Problemas
Cuntos grupos hay en la escena?
Qu objetos estn visibles en la escena y en qu
posiciones?
Qu correspondencia hay entre puntos del
modelo y de la escena observada?

J. Aguilar

rboles Expansin Mnimos

En ocasiones se presenta el problema de elegir uno de


varios rboles de expansin que cumplan con el
requisito de que la suma total del peso de sus vrtices
sea la mnima posible.

Este es un problema de optimizacin en donde se busca


reducir el costo total de unir una serie de puntos en un
grafo,
por ejemplo, unir con caminos un conjunto de ciudades de
tal forma que la longitud total de los caminos a
construir sea el mnimo y que adems permita que
todas estn conectadas.

J. Aguilar

rboles de expansin mnimos.


Definicin: Un rbol de expansin de un grafo G=(V, A) no
dirigido y conexo
es un subgrafo G=(V, A) conexo y sin ciclos.
Ejemplo: los rboles de expansin en profundidad y en
anchura de un grafo conexo.
En grafos con pesos, el coste del rbol de expansin es la
suma de los costes de las aristas.

Problema del rbol de expansin de coste mnimo:


Dado un grafo ponderado no dirigido, encontrar el rbol de
expansin de menor coste.

Grafos etiquetados
Es un grafo que tiene un valor entero o real asignado a
cada arista
2

d
f

3
1

Un grafo etiquetado es un grafo G = (N, A) donde sus aristas


tienen asignada alguna informacin.
J. Aguilar

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

rboles de expansin mnimos.


2

3
2

3
5

Problema: Conectar todos los


ordenadores con el menor coste
total.
Solucin: Algoritmos clsicos de
Prim y Kruskal (O(AElgV))

Usos de los AEM:


Identificacin de grupos en un
conjunto de puntos.
Grafos esparcidos que dan
bastante informacin del grafo
original.
Cableado de la compaa
telefnica, cable, etc.

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

Se mantienen dos conjuntos, el de los vrtices incluidos en el


rbol y el de los que no lo estn.

El procedimiento consiste en elegir la arista de menor peso que


une un vrtice en el conjunto del rbol con un vrtice que no esta
en el rbol.

Es un algoritmo incremental.

El rbol formado es un rbol simple, que se comienza a formar con un


nodo arbitrario y crece hasta tener todos los nodos en X.

Se implementa con una cola por prioridad para seleccionar fcilmente la


nueva arista a ser incluida en X.

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

PrimAEM(Nodo: r, Arreglo[n]De Nodo: &clave): Arreglo[n]De Nodo


{pre: n > 0 r N }
{pos: n > 0 G' = G }
1 [ c.entrar(v, MV) ] v N
-c. ColaPrioridad[X]. Cola de nodos.
2
clave( r ), padre( r ) = 0, Nulo
-clave: Arreglo[n]De Nodo. Variable auxiliar
3
( c.vaciaCola( ) )[ u = c.min( )
con los pesos.
4
-entrar(), vaciaCola(), min(). Definidas
[Si (v c w(u, v) < clave( v )) ent.
padre( v ) = u
en la clase ColaPrioridad.
clave( v ) = w(u, v)
-padre. Arreglo[n]De Nodo. Variable auxiliar
con el rbol de expansin mnima.
fsi ] v u.listaAdyacencia
regrese padre

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

Colas por prioridad


Caractersticas:

Su nombre viene de una aplicacin de Sistemas


Operativos: el mantenimiento de las colas internas de
procesos, donde esos procesos son manejados segn
su prioridad asignada.

Cada entrada en la cola es un par [clave, valor]

Clave: es un campo especial para reconocer la


entrada. Las claves estn siempre ordenadas segn
un orden total

Los valores asociados a las claves se pueden


actualizar, pero no las claves

20

Colas por prioridad


Las operaciones ms importantes en un TDA de colas por
prioridad se refieren aquellas que permiten repetidamente
seleccionar el elemento de la cola de prioridad que tiene
como clave el valor mnimo (mximo).

Una cola por prioridad P debe soportar las siguiente


operaciones:
inserta(ent)
min()
extMin()

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

El algoritmo de Kruskal basa su funcionamiento en la


eleccin de las aristas de menor peso que no forman
ciclos,

para poder elegir dichas aristas es necesario usar un


mtodo de almacenamiento que las ordene de menor
a mayor peso, pero adems, de otros artificios
matemticos.

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:

Inicializacin: crear una relacin de equivalencia vaca


Seleccionar las aristas (v, w) de menor a mayor.
La arista forma ciclo si: Encuentra(v)=Encuentra(w)
Aadir una arista (v, w): Unin(v, w) (juntar dos
componentes conexos en uno).

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}

El rbol abarcador mnimo T de G es la red ms barata


para conectar las ciudades utilizando conexiones
directas
C={candidatos}=A
T={solucin}
Conjunto de aristas seguras si no contiene ciclos
Funcin objetivo: minimizar la longitud total de las
aristas en T
J. Aguilar

31

Arcos Seguros
Corte: (S, V-S) es una particin de V.
Respeta A

A
corte

Blancos: parte del MST.


Negros: an por ser considerados.
Debe encontrarse un Arco Liviano del corte para incluirlo en la solucin.

Conceptos

Corte: Un corte (S, N-S) de un grafo no dirigido G =


(N, A) es una particin de N.

Una arista (u, v) A cruza el corte (S, N-S) si uno de


los nodos terminales de la arista est en S y el otro en
N-S.

Un corte respeta A si no hay aristas en A que crucen el


corte.
Una arista es ligera cruzando el corte si su peso es el
mnimo de cualquier arista cruzando el corte.

Una arista es ligera satisfaciendo una propiedad dada,


si su peso es el mnimo para cualquier arista que
33
satisfaga la propiedad.

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

Teorema: Sea G =(N, A) un grafo no dirigido conexo


etiquetado con una funcin real para los pesos w definida
en A, sea X A que est incluido en algn rbol de
expansin mnima para G, sea (S, N-S) cualquier corte de
G que respete X y sea (u, v) una arista ligera cruzando (S,
N-S), entonces la arista (u, v) es segura para X.

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).

Das könnte Ihnen auch gefallen