Академический Документы
Профессиональный Документы
Культура Документы
RBOLES BINARIOS
Un rbol binario es un rbol de grado 2, en el que todo nodo del rbol tiene un subrbol
binario izquierdo y derecho asociados.
rbol Binario Completo o Lleno: Es un rbol binario en el que todos sus nodos, excepto
las hojas, tienen siempre dos hijos (el subrbol izquierdo y el derecho) no nulos. El
nmero de nodos de un rbol completo se calcula por la frmula: Nmero de nodos =
2h-1 (donde h es la altura)
rbol Binario Completo de Altura o Profundidad H: Es un rbol Binario Completo en
donde todas las hojas estn en el nivel H. Esta es una de las pocas estructuras de rbol
que se pueden representar eficientemente usando arreglos.
Una expresin es una secuencia de componentes lxicos (tokens), que siguen reglas
preescritas. Un token puede ser un operador o un operando. Un rbol binario de
bsqueda es un rbol en el que todo nodo existente tiene un slo elemento y cumplen
lo siguiente:
RBOLES
BINARIOS -Todas las claves del subrbol izquierdo son menores
que la raz.
DE - Todas las claves del subrbol derecho son mayores
BUAQUEDA que la raz.
-Los subrboles izquierdo y derecho son tambin
rboles de bsqueda.
Representacin en memoria
Hay dos formas tradicionales de representar un rbol binario en memoria:
1.-Por medio de datos tipo punteros tambin conocidos como variables dinmicas o
listas. Esta es la forma ms utilizada, puesto que es la ms natural para tratar este tipo
de estructuras.
2.-Por medio de arreglos. Los nodos del rbol binario sern representados como
registros que contendrn como mnimo tres campos. En un campo se almacenar la
informacin del nodo. Los dos restantes se utilizarn para apuntar al subrbol izquierdo
y derecho del subrbol en cuestin.
Adems de estos recorridos tradicionales, se tienen los recorridos conversos, en los que
el orden del recorrido se invierte a derecha- izquierda, en vez de izquierda derecha.
Finalmente existe un recorrida llamado nivel por nivel en el que los nodos del rbol se
visitan por niveles a partir de cero y de izquierda a derecha.
rboles enhebrados
Existe un tipo especial de rbol binario llamado enhebrado, el cual contiene hebras que
pueden estar a la derecha o a la izquierda.
ARBOL ENHEBRADO A LA DERECHA. Este tipo de rbol tiene un apuntador a la
derecha que apunta a un nodo antecesor.
ARBOL ENHEBRADO A LA IZQUIERDA. Estos rboles tienen un apuntador a la
izquierda que apunta al nodo antecesor en orden.
BOSQUE
Entenderemos como bosque a un conjunto normalmente ordenado de dos o ms rboles
generales.
RBOLES AVL
Rotacin Simple
REEQUILIBRIO DE
LOS RBOLES AVL
Rotacin doble
Las operaciones adicionales en un rbol AVl son anlogas a las de rboles de busque
da binarios. Los rboles AVL son un subconjunto de los rboles de busque da binarios,
por lo que sus aplicaciones son muy similares.
RBOLES B
Los rboles reciben su nombre de R. Bayer, contienen entre n y 2n nodos, siendo n una
constante dada. Como consecuencia de esto se puede deducir que los rboles B no son
rboles binarios como s lo son los binarios de bsqueda o los AVL. En los rboles B los
nodos se agrupan dentro de pginas, por lo que se podra definir a la pgina como un
conjunto de nodos.
Insertar.
La primera accin a realizar en la operacin de insercin es localizar el lugar adecuado
en el rbol donde se insertar el nuevo elemento. Una vez localizado el lugar adecuado,
hay que tener en cuenta el nmero de nodos que tiene la pgina destino del nuevo
elemento. Si tiene menos de 2n, entonces se inserta el nuevo nodo y se da por finalizada
la operacin de insercin.
La complejidad se produce cuando la pgina destino est al completo de su capacidad,
es decir, tiene 2n nodos. En estos casos el procedimiento a seguir es el siguiente:
1. Insertar el nodo como si realmente tuviese sitio libre.
2. Extraer el nodo que ocupa la posicin del medio e insertarlo en la pgina padre.
Si no hubiese pgina padre se creara una nueva pgina con ese nodo.
3. Dividir la pgina original en dos nuevas pginas, cada una de ellas con n
elementos. Estas pginas sern los hijos derechos e izquierdos del nodo que
promocion a la pgina superior.
4. Si la pgina a la que promociona el nodo mediano tambin se encuentra
completa, se repetira la misma operacin de divisin y promocin.
Como consecuencia de que todas las hojas deben estar en el ltimo nivel, los rboles
B crecen hacia arriba (este crecimiento se produce cuando la insercin de un nodo en
una pgina completa provoca su divisin) y la ausencia de la restriccin de 2 hijos por
nodo que tienen los binarios son caractersticas que los diferencia del resto de
rboles. Los rboles B tienen un campo de aplicacin similar a los rboles binarios de
bsqueda, ya que tambin son rboles de bsqueda.
Borrar.
a).-Cuando el nodo que contiene el elemento por eliminar posee ms del mnimo de
elementos, se elimina el elemento del nodo y el proceso de eliminacin termina.
c).-Si el nodo que contiene el elemento por eliminar es la raz del rbol y posee un solo
elemento el nodo desaparece y la nueva raz del rbol ser el nodo resultado de la
unin de los hijos que dependan de la raz anterior.
Como en el caso de los rboles binarios las operaciones secundarias ms usuales son
las bsquedas y los recorridos. Estos algoritmos son semejantes a los utilizados para
los rboles binarios
rboles balanceados
Habamos visto que se puede demostrar por induccin que en un rbol completo el nmero de
nodos totales es
(2 ** h+1) 1. Esto nos indica que las cosas que se hacen en rboles son de orden log n pero
slo en el caso en
que el rbol est lleno. En el peor de los casos las cosas pueden ser lineales O(n). Cmo poder
garantizar,
entonces que se mantenga un balanceo? Cada vez que debido a una insercin o eliminacin el
rbol se
desbalancee, reubicar los nodos de modo que, manteniendo el invariante de un rbol de
bsqueda binaria,
se trate de mantener la altura del rbol. Ej:
El primer tipo de rboles balanceados fue el AVL (Adelson Velskii Landis). No son
frecuentemente implementados, ya que hay otros mejores, pero las ideas que hay detrs de ellos
se ven en los dems tipos de rboles balanceados. Se trata de incluir otra condicin ms en el
invariante de modo de asegurar que la bsqueda sea O(log n): LO ms simple sera requerir que
para un rbol AVL la altura de su subrbol derecho sea igual a la de su subrbil izquierdo.
Recordemos que los rboles se definen recursivanmete, por lo tanto esto se debera cumplir para
cada nodo. Esto es sin embargo muy restrictivo ya que implicara que todo rbol AVL debera
ser completo adems. La definicin de rboles AVL es entonces algo ms relajada:
Def: Un rbol AVL es un rbol binario con la propiedad adicional que para cualquier
nodo
En el rbol la altura de su subrbol izquierdo y de su subrbol derecho difieren a lo ms
en 1.
Esta condicin asegura que el rbol slo tendr altura logartmica. Para probar esto necesitamos
mostrar que un rbol de altura H tiene por lo menos C**H nodos para alguna constante H>1. En
otras palabras, si el mnimo nmero de nodos en un rbol es exponencial a su altura, entonces la
mxima altura de un rbol con N elementos es dada por Log en base C de N. Esto se puede
probar con los nmeros de Fibonacci:
Sea S(H) un rbol AVL con altura H y con el mnimo de elementos para esa altura. Entonces
S(0) = 1 y S(1) = 2. Ahora, por la condicin de un rbol AVL sabemos que un rbol AVL
mnimo de altura H tiene como hijos uno mnimo de altura H-1 y otro mnimo de altura H-2, ya
que el desbalanceo puede ser a lo ms de 1. Del dibujo podemos ver que la cantidad de nodos de
este rbol es S(H) = S(H-1) + S(H-2) + 1. Ahora los nmeros de Fibonacci eran F(N) = F(N-
1)+F(N-2) con F(0) = 1 y F(1) = 1. Corrigiendo: S(H) = F(H+3). Ahora, se sabe que el fibonacci
de un nmero i es alrededor de (K**i)/sqrt(5) con K alrededor de 1.618 (o sea > 1).
Consecuentemente un rbol AVL de altura H tiene a lo menos (gruesamente estimando)
K**(H+3)/sqrt(5), por lo cual la altura para un rbol AVL mnimo es logartmica con respecto al
nmero de nodos. Esto implica que las operaciones sobre un rbol AVL estn acotadas
logaritmicamente.
Pero esto no se logra gratis, el costo es la complicacin de las operaciones insertar y eliminar ya
que estas son las que pueden desbalancear un rbol. Una observacin clave es que es que
despus de una insercin slo los nodos que estaban en el recorrido desde la raz hasta el lugar
de insercin pueden resultar desblanceados. Al volver recursivamente hacia la raz despus de
haber insertado o eliminado un nodo es posible encontrar nodos cuyo nuevo balance viole el
principio de rbol AVL.
Para hacer ms fcil este control, los nodos de un rbol AVL adems de tener la informacin
normal (el elemento) tiene adems un nmero de balanceo que es la diferencia de alturas entre el
rbol izquierdo y el rbol derecho (altura(izq) atura(der)).
Veamos los casos de insercin que pueden desbalancear un rbol AVL. Un nodo X podria
necesitar ser rebalanceado si se inserta un nuevo nodo:
Para resolver el caso 1 y 4 de los nodos externos se hace lo que se llama rotacin simple (ej pag
513).
P R
Q Q P
R D
A A B C D
B C
Insercin en AVL.
La manera ms simple es un algoritmo recursivo: Para insertar un elemento X hacemos un
algoritmo recursivo (como el conocido para binarios) que inserta en el lugar preciso. El subrbol
formado por el nodo recin creado es 1ms alto que el antiguo as que debe informar de esto a su
padre para que recalcule el factor de balance. Si al calcularlo el padre ve que se mantiene el
balance, est todo en orden pero debe informar a su padre que creci en uno para que este
recalcule tambin. Si en algn momento se ve un desbalance que no se puede tolerar se realiza
la rotacin necesaria. Desde ese momento no es necesario informar de crecimiento de rbol
hacia arriba ya que se volvi la altura original.
ARBOLES ROJO-NEGRO
Tienen la gracia de que se puede balancear mientras se va hacia abajo (no se necesita el paso de
vuelta hacia arriba por lo cual no se necesita hacerlo en forma recursiva). Como resultado la
implementacin es ms simple y rpida que el AVL. Los rojo-negro tienen las siguientes
caractersticas:
Se puede demostrar por induccin que si todo path desde la raz hasta una referencia null tiene B
nodos negros, entonces tiene que haber por lo menos (2**B)-1 nodos negros en el rbol. Ms
an, como la raz es negra y no pueden haber dos nodos consecutivos rojos en el path, la altura
de un rbol rojo-negro es a lo ms 2*log(N+1) (intercalemos un nodo rojo en alguno de los path
cada nodo negro). Consecuentemente, la bsqueda est garantizada de ser logartmica.
Recordemos que todo nodo nuevo se inserta como una hoja en un rbol. Si la coloreamos negra
entonces de seguro estaremos violando la propiedad 4 ya que habr un path a una referencia null
con un nodo negra ms (en realidad 2). Insertemos la hoja nueva de color rojo. Si el padre era
negro est todo bien y hasta aqu llega el problema. Si el padre ya era rojo entonces estamos en
problemas, pero con rotaciones y cambios de colores es posible solucionar esto.
Primero consideremos que el tio era negro o null. Si llamamos x al nuevo nodo, p al padre, a al
abuelo y t al tio podemos hacer una rotacin y un cambio de colores que nos dejar todo en
orden de nuevo. Slo p y x pueden ser rojos en este caso porque si a fuera rojo hubiese una
situacin no vlida ANTES de insertar. Ahora podemos usar la terminologa de los rboles AVL
y decir que el nodo nuevo x puede ser externo o interno. Si es externo una rotacin simple y un
cambio de color de p y de a arreglan la cosa:
a p
p t
x a
x
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
C D E A t
B C
A B
D E
Aunque x es una hoja y en ese caso t es null, hemos dibujado un caso ms general para usar
esto ms adelante.
a x
p t p a
X
X
X
X
X
X
X
X
X
X
A t
X
X
X
X
X
X
X
X
X
X
x A B C
B C D E
Antes de continuar tenemos que estar seguros que esto funciona tambin para el caso general (en
que X no es hoja). Primero podemos ver que se mantienen las condiciones de rojo-negro
intercalados y tambin la de los nodos negros en los paths ya que se conservo la cantidad de
nodos negros (dos a la derecha, 1 a la izquierda). Tambin se puede ver que las races de A,B,C
y D deberan haber sido originalmente negras (o null) si todo estaba en orden antes de aparecer
X.
OK, hasta aqu, pero qu pasa si el to era rojo? Bueno, se ve que esto tambin se puede
arreglar:
a p
p t
x a
x
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
C D E A t
B C
A B
D E
a x
p t p a
X
X
X
X
X
X
X
X
X
X
A t
X
X
X
X
X
X
X
X
X
X
x A B C
B C D E
Aunque todo esto parece funcionar queda una pregunta: qu pasa si el padre de a era
originalmente rojo? Bueno, aqu podemos hacer los mismos anlisis que hemos hecho hasta
ahora. Esta vez s que tiene sentido tener en cuenta lo del caso general, o sea que estamos
tratando con nodos internos.
Para evitar la necesidad de tener que estar rotando el rbol cuando se vaya hacia arriba de vuelta
de haber hecho una insercin podemos usar un truco cuando vayamos hacia abajo de modo de
asegurar que cuando se llega al lugar que se debe insertar, el to nunca ser rojo por lo cual
bastar con insertar una hoja roja y hacer a lo ms una rotacin (simple o doble).
X X
Es claro que el nmero de nodos negros bajo x permanece inalterado. El problema es que si el
padre de x era rojo tenemos dos rojos consecutivos. En teste caso podemos aplicar las rotaciones
simple o doble vistas anteriormente, en las cuales haba un to negro, dependiendo de dnde se
encuentra x (estas no suben un nodo rojo as que no par ms). Pero qu pasa si el to es rojo !
ah si se pasa un nodo rojo hacia arriba !. Esto no puede pasar ya que en el viaje hacia abajo si se
encontr que el abuelo tena dos hijos rojos se cambiaron a negros.
Ejemplo: cuadros 18.34 (pg 517) se quiere poner el 45cuando bajamos vemos que el 50 tiene
dos hijos rojos. Esto se cambia (ver cuadro 18.39 en pg. 520). Esto produce que el 60 y el 50
queden sucesivamente rojos. Se hace una rotacin simple (ver cuadro 18.40 en pagina del lado)
y luego se puede poner el 45 sin problemas.
GRAFOS
TEORA DE GRAFOS
El apartado 2.1 de este captulo cubre conceptos de teora de grafos que no son especficos de
rboles generadores ni de caminos de capacidad mxima, pero es importante conocerlos para
entender los conceptos y algoritmos que se explican ms adelante. En el apartado 2.2 se explica
qu es un rbol generador, se presentan cuatro tipos de rboles generadores (mximo, mnimo,
ms uniforme y menos uniforme) y se describen algoritmos para la construccin de los mismos.
Por ltimo, en el apartado 2.3 se explica qu se entiende por camino de capacidad mxima y se
describe un algoritmo para hallarlo.
Un grafo es un par G = (V, A), donde V es un conjunto finito no vaco (a cuyos elementos
llamaremos vrtices o nodos) y A es una familia finita de pares no ordenados {u, v} de vrtices
de V (a cuyos elementos llamaremos aristas o arcos).
Un grafo simple es un par G = (V, A), donde V es un conjunto finito no vaco y A es un conjunto
finito de pares no ordenados {u, v} de vrtices distintos de V.
la arista uv es incidente con los vrtices u y v (tambin diremos que uv une los vrtices u
y v).
los vrtices u y v son incidentes con la arista uv (tambin diremos que u y v son extremos
de uv).
Por ejemplo, un grafo G = (V, A) con V = {a, b, c, d, e, f} y con A = {ab, ad, bc, bf, cd, cf} se
puede representar grficamente como en la siguiente figura:
b c
a d
f e
Figura 1: Un grafo
De este grafo podemos decir, por ejemplo, que los vrtices a y b son adyacentes y son incidentes
con (o son extremos de) la arista ab, que la arista ab es incidente con (o une) los vrtices a y b,
que el vrtice a y la arista ab son incidentes, que las aristas ab y bc son adyacentes (en este caso,
el extremo comn es el vrtice b) y que el vrtice e es aislado.
Por ejemplo, en la siguiente figura se representa un grafo que tiene tres aristas mltiples cuyos
extremos son los vrtices a y d, un bucle sobre el vrtice c y dos bucles sobre el vrtice b. Estos
dos ltimos bucles son tambin aristas mltiples.
a b
d c
2.1.3. Subgrafos
un grafo G
un subgrafo generador G2 de G
a b c a b c a b c
G G1 G2
d e f e d e f
Si x es un vrtice del grafo G = (V, A), se indica por G {x}, o simplemente G x, al subgrafo de
G que tiene como conjunto de vrtices V {x} y como aristas todas las de G menos las incidentes
con x.
Si e es una arista de G = (V, A), se indica por G {e}, o simplemente G e, al subgrafo de G que
tiene como conjunto de vrtices V y A {e} como conjunto de aristas.
un grafo G
a b c a b c a b c
G Ge G be
d e f d f d e f
Aclararemos adems, para que se entiendan ms fcilmente algunos algoritmos que veremos ms
adelante, que:
a e1 b e2 c e7 a e4 d e5 d
a e1 b e2 c e7 a e4 d e6 c e7 a
a e1 b
e4 e7 e3 e2
e5
d e6 c
En el grafo que se muestra a continuacin, un posible camino es abcd, y un posible ciclo es abca.
a b
d c
Un grafo es conexo si para cada par de vrtices u y v existe un camino de u a v. En caso contrario
se dir que el grafo es no conexo (o disconexo).
Si G es un grafo no conexo, cada uno de sus subgrafos conexos maximales se llama componente
conexa de G (con subgrafo conexo maximal queremos decir que si aadimos al mismo cualquier
otro vrtice de G, el subgrafo deja de ser conexo).
Figura 7: Grafo conexo
Una arista a de un grafo G se llama puente si G {a} tiene ms componentes conexas que G.
Los bloques de un grafo G son los subgrafos de G sin vrtices-corte y maximales con respecto a
esta propiedad.
En la siguiente figura se representa un grafo que tiene cuatro vrtices-corte (a, b, c y d) y dos
aristas puente (bc y de). Debajo del mismo se muestran sus bloques.
d
e
a b c
d d
e
a a b b c c
2.1.6. Digrafos
G1 G2 G3
q = n 1.
Todo rbol (con ms de un vrtice) tiene al menos dos hojas (vrtices incidentes con una
sola arista).
Caracterizaciones de los rboles. Sea G = (V, A) un grafo de n vrtices y q aristas. Las siguientes
condiciones son equivalentes:
G es un rbol.
G es acclico y q = n 1.
G es conexo y q = n 1.
Un rbol dirigido es un digrafo cuyo grafo asociado es un rbol. Un rbol dirigido T se llama un
rbol con raz si existe un vrtice r, llamado raz, tal que para cualquier otro vrtice v de T existe
un camino de r a v en T.
Como veremos ms adelante, tambin se puede entender por rbol con raz un rbol dirigido T en
el que existe un vrtice r (raz) tal que para cualquier otro vrtice v de T existe un camino de v a
r en T.
Un grafo ponderado (o con pesos) es un grafo G = (V, A) junto con una funcin w: A N, que
asigna a cada arista e A un nmero natural w(e) llamado peso de e.
Llamamos peso de un subgrafo H, w(H), a la suma de los pesos de todas las aristas de H.
1 1
2 2
5 3 3 3
G H
4 4
6 6
G T F
El rbol generador mnimo de un grafo, MST(G), no necesariamente es nico. Por ejemplo, para
el grafo G de la siguiente figura existen dos rboles generadores mnimos T1 y T2:
G T1 T2
1 1 1
2 2 2
5 3 3 5 3 5 3
4
6
Figura 15: Un grafo ponderado G y dos rboles generadores mnimos de G (T1 y T2)
Algoritmos
Se presentan a continuacin tres mtodos para construir un rbol generador mnimo de un grafo
conexo y ponderado G de n vrtices y q aristas:
Algoritmo de Prim
Algoritmo de Kruskal
Algoritmo de Borvka
La idea bsica consiste en aadir, en cada paso, un nuevo vrtice a un rbol previamente
construido. Este nuevo vrtice se une al rbol anterior con la arista de menor peso.
Paso 2. Se considera la arista e de mnimo peso que une un vrtice de T y un vrtice que
no es de T, y se hace T = T + e.
Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, un rbol generador mnimo aplicando
el algoritmo.
Al grafo T que va construyendo el algoritmo de Prim se le van aadiendo aristas de forma que el
grafo se mantiene conexo y acclico, es decir, el grafo en construccin es en todo momento un
rbol. Adems, T tiene n 1 aristas cuando se termina de construir; por lo tanto, contiene a los n
vrtices del grafo G que recibe el algoritmo como entrada. Por tanto, este algoritmo construye un
rbol generador.
Sea T el rbol construido por el algoritmo de Prim y supongamos que no es de peso mnimo. Sea
S un rbol generador mnimo que contenga el mayor segmento inicial de la lista de aristas elegidas
para T. Llamamos ek a la primera arista elegida para T que no est en S. Sean u y v los extremos
de ek, y llamemos P al nico camino en S que conecta los vrtices u y v.
ek v
u
P
Tk-1
e*
Sea Tk-1 el rbol creado por el algoritmo antes de introducir la arista ek. Uno de los extremos de
esta arista estar en Tk-1 y el otro no. Supongamos que u Tk-1. Como el camino P tiene un extremo
en Tk-1 y el otro no, debe contener una arista e* con slo un extremo en Tk-1.
Consideramos el grafo S* = S + ek e*. Este grafo sigue siendo un rbol generador. Adems,
cuando el algoritmo elige la arista ek, tanto ek como e* estn disponibles, luego w(ek) w(e*).
Por tanto, S* es un rbol generador con w(S*) w(S), es decir, es un rbol generador mnimo y
contiene una arista ms de T que el rbol S (la arista ek), en contradiccin con la eleccin de S.
(Primera aproximacin)
En el paso 2, si S tiene k vrtices hay n k vrtices en V S. Por tanto, necesitamos hallar la arista
de mnimo peso entre k(n k) aristas. Como k(n k) < (n 1)2, el coste resulta O(n2). Pero el
bucle del paso 2 se repite n 1 veces (se aaden n 1 vrtices al rbol inicial), luego la
complejidad es O(n3).
(Segunda aproximacin)
Ahora en el paso 2, se elige el vrtice z de Z con etiqueta mnima, se halla v S tal que t(z) =
w(vz), se aade z a S y se actualizan las etiquetas de los vrtices as:
(n 1) + (n 2) + + 1 = n(n 1) / 2 O(n2)
En 1993, Ahuja y otros consiguieron rebajar la complejidad hasta O(q + n log n) utilizando
montculos de Fibonacci. Para grafos planares (es decir, grafos que admiten una representacin
en el plano de tal forma que las aristas no se cortan, salvo en sus extremos) existe un algoritmo
lineal de Matsui (1995).
Este algoritmo es de tipo voraz o greedy. Como se quiere construir un rbol generador de
peso mnimo, la estrategia ser ir aadiendo aristas de mnimo peso hasta conseguir un rbol
generador. En cada paso, incorporacin de una nueva arista, se debe comprobar que no se forme
ningn ciclo con las aristas previamente introducidas.
Paso 2. Sea e la arista de mnimo peso tal que e S y S + e es un grafo acclico. Se hace
S = S + e.
Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, un rbol generador mnimo aplicando
el algoritmo. Ntese que antes de aadir la ltima arista, de peso 6, se encuentra una arista de
entre las no incorporadas hasta el momento de peso 5; sin embargo, esta arista no se aade debido
a que forma un ciclo con dos aristas incorporadas previamente (concretamente con las dos aristas
cuyos pesos son 4 y 2, respectivamente).
Figura 18: Construccin de un rbol generador mnimo (algoritmo de Kruskal)
El algoritmo de Kruskal construye un grafo que no tiene ciclos, ya que antes de la incorporacin
de cada arista se comprueba que no se forma ningn ciclo con las aristas previamente introducidas,
y que adems tiene n 1 aristas; por lo tanto, este algoritmo construye un rbol generador.
Sea T un rbol generador construido por el algoritmo de Kruskal y supongamos que no es de peso
mnimo. Sea S un rbol generador mnimo que contenga el mayor segmento inicial de la lista de
aristas elegidas para T. Llamamos e a la primera arista elegida para T que no est en S. Aadiendo
la arista e a S se crea un ciclo C. Este ciclo debe contener una arista e* que no es de T, pues T no
contiene ningn ciclo. Consideramos el grafo S* = S + e e*. Este grafo es un rbol generador.
Adems, cuando el algoritmo elige la arista e, tanto e como e* estn disponibles, luego w(e)
w(e*). Por tanto, S* es un rbol generador con w(S*) w(S), es decir, es un rbol generador
mnimo y contiene una arista ms de T que el rbol S (la arista e), en contradiccin con la eleccin
de S.
Figura 19: Demostracin de la correccin del algoritmo de Kruskal
El coste del primer paso, ordenacin de las aristas segn su peso, es O(q log q), es decir, O(q log
n). En el segundo paso se debe detectar si la arista elegida forma un ciclo con las previamente
elegidas. Esto se puede hacer con una bsqueda en profundidad con un coste de O(n) por arista.
En total, pues, O(q log n + qn).
Pero la deteccin de un posible ciclo se puede mejorar. Para ello basta tener marcada la
componente conexa a la que pertenece cada vrtice (inicialmente habra n componentes, una por
vrtice). Si se elige una arista con extremos de la misma etiqueta se est formando un ciclo y si
tienen distinta etiqueta no hay ciclo y la eleccin es correcta. En este caso se deben actualizar las
etiquetas para mantener una por cada componente conexa. El coste total de este paso es O(q), por
la comprobacin de la correccin, ms O(n2) por las actualizaciones, pues en el peor caso en cada
uno de los n pasos se deben actualizar las etiquetas de los n vrtices. La complejidad total del
algoritmo de Kruskal es, por tanto, O(n2 + q log n).
El proceso de averiguar si una arista une vrtices en diferente componente conexa puede
mejorarse, rebajando la complejidad hasta O(log n). La complejidad total es as O(q log n), mejor
que la del algoritmo de Kruskal para grafos de tamao q O(n).
Este fue el primer algoritmo descrito en la literatura. Se utiliz para resolver el problema de la
electrificacin de las zonas rurales de Moravia.
Paso 1. Se parte del bosque trivial (sin aristas) de n vrtices que llamamos F.
Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, un rbol generador mnimo aplicando
el algoritmo. Cabe destacar que, en una iteracin, la arista de mnimo peso elegida para una
componente conexa puede ser la misma que la elegida para otra componente. En el ejemplo de la
figura se puede observar que, en la primera iteracin, para dos componentes conexas se elige una
misma arista de peso 3, para otras dos componentes se elige una misma arista de peso 4 y para las
dos componentes restantes se elige una misma arista de peso 2.
Si hay aristas con el mismo peso, este algoritmo puede producir ciclos. Para evitarlos basta
establecer un orden de eleccin de las aristas con idntico peso.
En cada iteracin, el nmero de componentes conexas del bosque F es, a lo ms, la mitad del
nmero de componentes en la iteracin anterior. Por tanto el algoritmo efecta O(log n) pasos. El
coste de cada uno de ellos es a lo ms O(q), pues se deben elegir elementos mnimos en un
conjunto de listas de tamao total q. La complejidad del algoritmo de Borvka es, por tanto, O(q
log n).
2
3 3 5 3 5 3 5
4 4 4
6 6 6
Figura 21: Un grafo ponderado G y dos rboles generadores mximos de G (T1 y T2)
Algoritmos
Paso 2. Se considera la arista e de mximo peso que une un vrtice de T y un vrtice que
no es de T, y se hace T = T + e.
Por ltimo, en el caso del algoritmo de Borvka, basta con modificar el paso 2:
(1) rbol generador de G cuya mxima diferencia de pesos de dos aristas de T es mnima.
las aristas de G.
segn la acepcin (2), cuanto ms cercanos sean los pesos de las aristas de T a la media de
los pesos de las aristas de G
G T1 T2
9 9
5 5 5
2 3 7 7 2 3
1 1
8 8
G T1 T2
9
5 5 5
2 3 7 2 3 7 3 7
1
8 8
ninguno de los rboles generadores ms uniformes segn la acepcin (1) es uno de los ms
uniformes segn la acepcin (2)
ninguno de los rboles generadores ms uniformes segn la acepcin (2) es uno de los ms
uniformes segn la acepcin (1)
Algoritmos
En este algoritmo, presentado por Z. Galil y B. Schieber en 1988, se van aadiendo y borrando
aristas a/de un bosque generador F de G (F inicialmente sin aristas). Las aristas se aaden
siguiendo un orden (de menor a mayor peso). Cada vez que se detecta que los vrtices extremos
de la siguiente arista a aadir pertenecen a la misma componente conexa de F, se borra primero
(es decir, antes de aadir la arista en cuestin) la arista de menor peso en el camino de F que
conecta dichos vrtices. Durante el proceso de aadir/borrar aristas se van hallando distintos
rboles generadores; la salida del algoritmo es el rbol generador ms uniforme de todos los
hallados durante el proceso en cuestin.
Estructura de datos
Para la construccin del rbol generador ms uniforme mediante este algoritmo se utiliza una
estructura de datos desarrollada por D. D. Sleater and R. E. Tarjan. Esta estructura de datos
mantiene una coleccin de rboles con raz cuyos conjuntos de vrtices son disjuntos, rboles que
van cambiando a lo largo del tiempo a medida que se van aadiendo o borrando aristas. Usando
esta estructura se pueden realizar eficientemente las siguientes operaciones:
maketree(v): Crea un nuevo rbol que contiene el vrtice v, previamente en ningn rbol.
findcost(v): Devuelve una arista de peso mnimo en el camino desde v hasta su raz
(actual).
link(v, w): Combina los rboles que contienen los vrtices v y w aadiendo la arista (v, w)
y haciendo a v la raz del nuevo rbol. Esta operacin asume que v y w estn en rboles
distintos.
cut(v): Divide el rbol que contiene el vrtice v en dos rboles borrando la arista saliente
de v (todas las aristas estn dirigidas hacia la raz). Esta operacin asume que v no es la
raz del rbol.
Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, el rbol generador ms uniforme
aplicando el algoritmo. Concretamente, en esta figura se reflejan los estados por los que va
pasando el bosque generador con el que se trabaja durante todo el proceso a medida que se van
aadiendo o borrando aristas al/del mismo. Tambin se indica qu rboles generadores Ti se van
encontrando a lo largo del proceso y en qu casos se toma el rbol Ti como el ms uniforme
encontrado hasta el momento (o, lo que es lo mismo, se asigna Ti a T).
La salida del algoritmo (es decir, el rbol generador ms uniforme) es el rbol T al final del proceso
(en este ejemplo, concretamente, T = T2 al final del proceso).
Figura 24: Construccin del rbol generador ms uniforme (acepcin (1))
El coste de la ordenacin de las aristas segn su peso es, como ya sabemos, O(q log n). En cuanto
al proceso posterior a la ordenacin de las aristas, utilizando la estructura de datos descrita
anteriormente se consigue que el coste del mismo sea tambin O(q log n) y que, por lo tanto, la
complejidad total del algoritmo sea O(q log n).
Paso 1. Se calcula la media m de los pesos de las aristas de G, se elige la arista e de peso
ms cercano a m y se considera S = {e}.
Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, el rbol generador ms uniforme
aplicando el algoritmo (en este caso, m = 5,2).
La complejidad de este algoritmo, al igual que en el caso del algoritmo de Kruskal, es O(n2 + q
log n).
2.2.5. rbol generador menos uniforme
(1) rbol generador de G cuya mxima diferencia de pesos de dos aristas de T es mxima.
las aristas de G.
segn la acepcin (1), cuanto mayor sea la mxima diferencia de pesos de dos aristas de T
segn la acepcin (2), cuanto menos cercanos sean los pesos de las aristas de T a la media
de los pesos de las aristas de G
El rbol generador menos uniforme de un grafo no necesariamente es nico. En las dos figuras
siguientes, adems, se puede ver claramente que los rboles generadores menos uniformes que se
pueden encontrar en un grafo no tienen por qu ser los mismos para la acepcin (1) que para la
acepcin (2) (ntese que G es el mismo grafo en una y otra figura).
G T1 T2
7 7
9 9 9
2 1 1 1 2 1
7 7
8 8
Figura 26: T1 y T2 son dos de los rboles generadores menos uniformes (acepcin (1)) de G
G T1 T2
7
9 9 9
2 1 1 2 1 1 1 1
7
8 8
Figura 27: T1 y T2 son los rboles generadores menos uniformes (acepcin (2)) de G
En este ejemplo, no todos los rboles generadores menos uniformes segn la acepcin (1) son los
menos uniformes segn la acepcin (2), aunque s se cumple en este caso que los dos rboles
menos uniformes segn la acepcin (2) lo son tambin segn la acepcin (1).
Algoritmos
En este caso es vlido cualquier mtodo para construir un rbol generador que contenga alguna
arista de peso mnimo y alguna arista de peso mximo. Un posible mtodo es el algoritmo descrito
anteriormente para construir el rbol generador ms uniforme segn la acepcin (1) con algunas
modificaciones.
Estructura de datos
Para la construccin del rbol generador menos uniforme se utiliza la misma estructura de datos
para mantener una coleccin de rboles descrita anteriormente. Ahora bien, en este caso,
findcost(v) devuelve una arista de peso mximo en el camino desde v hasta su raz (actual).
La flecha () indica qu lnea cambia con respecto al algoritmo para construir el rbol generador
ms uniforme segn la acepcin (1). En la lnea en cuestin, concretamente, el operador >
sustituye al operador <.
En este caso, se puede utilizar el algoritmo descrito anteriormente para la construccin del rbol
generador ms uniforme segn la acepcin (2), aunque con modificaciones en los pasos 1 y 2. A
continuacin se muestran ambos pasos ya modificados:
Paso 1. Se calcula la media m de los pesos de las aristas de G, se elige la arista e de peso
menos cercano a m y se considera S={e}.
Figura 28: Un grafo ponderado G y dos caminos P1 y P2 de capacidad mxima en G entre dos vrtices de G, u
yv
Algoritmo
Paso 1. Construir el rbol generador de peso mximo T. Para ello se puede utilizar
cualquiera de los algoritmos descritos anteriormente para la construccin de un rbol
generador mximo (algoritmos de Prim, Kruskal y Borvka).
Ejemplo
el rbol generador mximo T que se construye a partir de G al dar el primer paso del
algoritmo
Sea P ese camino en T. P contiene al menos una arista e tal que su capacidad es igual a la capacidad
de P. Supongamos que hay otro camino P en G de u a v de mayor capacidad. Este camino P no
contiene a la arista e, por lo que debe contener a una arista e que conecte las dos componentes de
T e. Adems la capacidad de e es mayor que la capacidad de e. Por tanto, si consideramos el
rbol T e + e tendremos un rbol de mayor peso que T, contradiciendo que T sea el de peso
mximo.