Вы находитесь на странице: 1из 41

RBOLES

Los rboles representan las estructuras no lineales y dinmicas de datos ms


importantes en computacin. Los rboles pueden ser construidos con estructuras
estticas y dinmicas. Las estticas son arreglos, registros y conjuntos, mientras que
las dinmicas estn representadas por listas.
Un rbol es una estructura jerrquica aplicada sobre una coleccin de elementos u
objetos llamados nodos; uno de los cuales es conocido como raz. Adems se crea una
relacin o parentesco entre los nodos dando lugar a trminos como padre, hijo, hermano,
antecesor, sucesor, ancestro, etc.
Existen diferentes formas de representacin de un rbol, entre las ms comunes se
tienen las siguientes: Mediante crculos y flechas, Mediante parntesis anidados,
Mediante notacin decimal de Dewey. Algunas veces se incluye entre los rboles el
rbol nulo vaco, el cual, es un rbol sin nodos que se representa mediante la letra .
Cualquier nodo del rbol podra tener un nmero arbitrario de nodos hijos, a esto se le
conoce como un rbol general, como se muestra en la siguiente figura. Si se limita el
nmero de nodos hijos para cada nodo del rbol, digamos a un nmero n > 2 (llamado
la aridad del rbol), entonces el rbol de aridad n es llamado n-ario.
La terminologa que por lo regular se utiliza para el manejo de rboles es la siguiente:
-HIJO. X es hijo de Y, s y solo s el nodo X es apuntado por Y. Tambin se dice que X
es descendiente directo de Y.
-PADRE. X es padre de Y s y solo s el nodo X apunta a Y. Tambin se dice que X es
antecesor de Y.
-HERMANO. Dos nodos sern hermanos si son descendientes directos de un mismo
nodo.
-HOJA. Se le llama hoja o terminal a aquellos nodos que no tienen ramificaciones.
-NODO INTERIOR. Es un nodo que no es raz ni terminal.
-GRADO. Es el nmero de descendientes directos de un determinado nodo.
-GRADO DEL ARBOL Es el mximo grado de todos los nodos del rbol.
-NIVEL. Es el nmero de arcos que deben ser recorridos para llegar a un determinado
nodo. Por definicin la raz tiene nivel 1.
-ALTURA. Es el mximo nmero de niveles de todos los nodos del rbol.
-PESO. Es el nmero de nodos del rbol sin contar la raz.
-LONGITUD DE CAMINO. Es el nmero de arcos que deben ser recorridos para llegar
desde la raz al nodo X. Por definicin la raz tiene longitud de camino 1, y sus
descendientes directos longitud de camino 2 y as sucesivamente.

ORDEN DE LOS NODOS. Generalmente los rboles de un nodo se ordenan de


izquierda a derecha. Si no se toma en cuenta el orden de los nodos hijos, entonces se
habla de un rbol no ordenado.

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:

-Cada hoja es un operando.


DE -El nodo raz y los nodos internos son operadores.
EXPRESION -Los subrboles son sub_expresiones en las que
el nodo raz es un operador.

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.

Clasificacin de rboles binarios:


Existen cuatro tipos de rbol binario:
DISTINTOS. Dos rboles binarios son distintos cuando sus estructuras
son diferentes.

SIMILARES. Dos rboles binarios son similares cuando sus estructuras


son idnticas, pero la informacin que contienen sus
nodos es diferente.
RBOLES
BINARIOS EQUIVALENTES. Son aquellos rboles que son similares y que
adems los nodos contienen la misma informacin.

COMPLETOS. Son aquellos rboles en los que todos sus nodos


excepto los del ltimo nivel, tiene dos hijos; el
subrbol izquierdo y el subrbol derecho.

Recorrer el subrbol izquierdo


INORDEN Examinar la raz
Recorrer el subrbol derecho inorden

RECORRIDO DE Examinar la raz


UN ARBOL PREORDEN Recorrer el subrbol izquierdo en preorden
Recorrer el subrbol derecho en preorden

Recorrer el subrbol izquierdo en postorden


POSTORDEN Recorrer el subrbol derecho en postorden
Examinar la raz

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

Un rbol AVL es un rbol binario de bsqueda al que se le aade una condicin de


equilibrio. Esta condicin es que para todo nodo la altura de sus subrboles izquierdo y
derecho pueden diferir a lo sumo en 1. AVL son las iniciales de Adelson-Velskii y Landis,
los hombres que idearon este tipo de rbol.

Operaciones bsicas en los rboles binarios.


Insercin. La insercin de un elemento en un rbol AVL es idntica que en un rbol
binario de bsqueda, la diferencia se encuentra en la comprobacin que hay que realizar
posteriormente en los rboles AVL.
En un rbol AVL tras realizar la insercin hay que comprobar que se sigue manteniendo
la condicin de equilibrio, o lo que es lo mismo, que la altura del subrbol izquierdo y la
del subrbol derecho difieran en una unidad o sean iguales. Si se produce un
desequilibrio hay que reequilibrar la estructura para que siga siendo un rbol AVL.
Borrar. El procedimiento de borrado es el mismo que en el caso de arbol binario de
busqueda. La diferencia se encuentra en el proceso de reequilibrado posterior. Este
proceso es idntico al que se realiza en la insercin, la nica diferencia es que en la
insercin tras realizar una rotacin el rbol ya estaba equilibrado, mientras que en el
borrado puede ser necesario realizar mas de una rotacin.

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.

Los rboles B deben cumplir las siguientes caractersticas en cuanto a estructura:

1. Todas las hojas en el rbol estn al mismo nivel.


2. Cada nodo contiene entre n y 2n elementos, excepto la raz que tiene entre 1 y
2n.
3. Si en nodo tiene m elementos, en nodo contendr 0 m+1 hijos.
4. Los elementos de un nodo del rbol estn ordenados linealmente en el nodo.
5. Los elementos del rbol B estn organizados siguiendo las propiedades de un
ABB, es decir, los elementos menores a la izquierda y los mayores a la derecha
del nodo original.
Operaciones bsicas en los rboles B

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.

b).-Cuando el nodo que contiene el elemento a eliminar posee exactamente el mnimo


de elementos se buscara otro elemento que pueda sustituir al que se dar de baja y si
no existe un sustituto se deber unir dos nodos. Cuando alguno de los hermanos
adyacentes al nodo que se dar de baja tiene ms del mnimo de elementos, el
elemento padre del nodo con el elemento por borrar lo sustituir cuando sea borrado.
Si no existe un hermano adyacente con mas del mnimo de elementos el nodo donde
ocurre la eliminacin y un hermano adyacente se unen junto con el elemento padre
que desaparece del nodo padre, si este ultimo queda con mas del mnimo de
elementos el proceso termina, sino, se analiza la eliminacin en el nodo padre
repitiendo los pasos anteriormente mencionados.

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:

1- en el subrbol izquierdo del hijo izquierdo de X


2- en el subrbol derecho de hijo izquierdo
3- en el subrbol izquierdo del hijo derecho
4- en el subrbol derecho del hijo derecho

Caso 1 Caso 4 COMO ESTN LOS


INDICADORES DE BALANCE ?
Caso 2 Caso 3 COMO ESTN LOS
INDICADORES DE BALANCE ?

En el caso 1 y 4 se habla de un nodo externo causando el desbalanceo. En el caso 2 y 3 de uno


interno.

Para resolver el caso 1 y 4 de los nodos externos se hace lo que se llama rotacin simple (ej pag
513).

Static NodoArbol rotHijoIzq(NodoArbol p) { Static NodoArbol rotHijoDer(NodoArbol p)


{
NodoArbol q = p.izq; NodoArbol q = p.der;
p.izq = q.der; p.der = q.izq;
q.der = p; p.bal = 0; q.bal = 0; q.izq = p; p.bal = 0; q.bal = 0;
return q; return q;
} }
Para los casos 2 y 3 de los nodos internos se hace la llamada rotacin doble (ej pag 515)

P R

Q Q P

R D

A A B C D

B C

Static NodoArbol dobleConIzq(NodoArbol p) {


NodoArbol q = p.izq, r = q.der;
q.der = r.izq; p.izq = r.der;
r.izq = q; r.der = p;
if (r.bal > 0) { // B era mas alto que C
q.bal = 0; r.bal = 1; p.bal = -1;
}
}

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:

1- Cada nodo est coloreado rojo o negro


2- La raz es negra
3- Si un nodo es rojo, los hijos deben ser negros (no se permiten dos rojos seguidos en un path)
4- Cualquier path desde la raz hasta una referencia null debe contener el mismo nmero de
nodos negros
Ver ejemplo en pg 517.

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.

Insercin, primera aproximacin: botton up

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.

Hay varios casos a considerar (y sus espejos) si el padre era rojo:

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.

Para el caso de una insercin como nodo interno: rotacin doble.

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.

Insercin top-down en rboles rojo-negro

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

El procedimiento se basa en lo siguiente: mientras se va hacia abajo, si vemos un nodo x que


tiene dos hijos rojos cambiamos x a rojo y hacemos los hijos negros.

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.

2.1. Nociones generales

2.1.1. Grafos, vrtices, aristas, adyacencia e incidencia

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.

Si a = {u, v} es una arista de G, escribiremos slo a = uv = vu, y diremos que:

los vrtices u y v son adyacentes

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

el vrtice u (o el vrtice v) y la arista uv son incidentes

Adems, diremos que:

dos aristas son adyacentes si y slo si tienen algn extremo comn

un vrtice es aislado si no tiene otros vrtices adyacentes

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.

2.1.2. Bucles y aristas mltiples

Una arista a = uu se llama bucle.

Una arista que aparece repetida en A se llama arista mltiple.

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

Figura 2: Grafo con bucles y aristas mltiples


En un grafo simple no se permiten aristas mltiples ni bucles.

2.1.3. Subgrafos

Un subgrafo de G = (V, A) es otro grafo H = (V, A) tal que V V y A A. Si V = V, se dice


que H es un subgrafo generador.

El subgrafo inducido por un subconjunto de vrtices W V es el grafo cuyo conjunto de vrtices


es W y cuyas aristas son todas las de G cuyos extremos estn en W.

En la siguiente figura se muestra:

un grafo G

un subgrafo G1 de G inducido por el subconjunto de vrtices {a, b, c, e}

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

Figura 3: Un grafo G y dos subgrafos G1 y G2 de G

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.

En la siguiente figura se muestra:

un grafo G

el subgrafo G e, donde e es un vrtice de G

el subgrafo G be, donde be es una arista de G


En el caso de G e se puede observar que, al haberse eliminado el vrtice e, tambin se han
eliminado las aristas be, de y df.

a b c a b c a b c

G Ge G be

d e f d f d e f

Figura 4: El resultado de eliminar un vrtice o una arista

Aclararemos adems, para que se entiendan ms fcilmente algunos algoritmos que veremos ms
adelante, que:

si x es un vrtice del grafo G = (V, A) y H = (V, A) es un subgrafo de G tal que x V, se


indica por H + {x}, o simplemente H + x, al subgrafo de G que tiene como conjunto de
vrtices V + {x} y A como conjunto de aristas

si e = uv es una arista de G = (V, A) y H = (V, A) es un subgrafo de G tal que e A, se


indica por H + {e}, o simplemente H + e, al subgrafo de G que tiene como conjunto de
vrtices V {u, v} y A + {e} como conjunto de aristas

2.1.4. Recorridos, caminos y ciclos

Un recorrido en un grafo es una sucesin de vrtices y aristas de la forma v0 a1 v1 a2 vk-1 ak vk,


donde la arista ai une los vrtices vi-1 y vi. ste es un recorrido de v0 a vk, de longitud k, siendo v1,
, vk-1 los vrtices interiores del recorrido (tambin se dice que el recorrido conecta los vrtices
v0 y vk). Un recorrido es par o impar si su longitud es par o impar, respectivamente. Si v0 = vk
decimos que el recorrido es cerrado (en algunos textos a un recorrido cerrado se le llama circuito).
En un grafo simple se describe un recorrido por la sucesin de sus vrtices, pues no es necesario
especificar las aristas.

En el grafo que se muestra a continuacin, un posible recorrido es:

a e1 b e2 c e7 a e4 d e5 d

Y un posible circuito es:

a e1 b e2 c e7 a e4 d e6 c e7 a
a e1 b

e4 e7 e3 e2

e5
d e6 c

Figura 5: Grafo en el que se puede describir al menos un recorrido y un circuito

Un camino en un grafo es un recorrido en el que no se repiten vrtices ni aristas.

Un ciclo es un camino cerrado.

En el grafo que se muestra a continuacin, un posible camino es abcd, y un posible ciclo es abca.

a b

d c

Figura 6: Grafo en el que se puede describir al menos un camino y un ciclo

2.1.5. Grafos conexos y componentes conexas

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

Figura 8: Grafo no conexo con 6 componentes conexas

Un vrtice v se llama vrtice-corte (o punto de articulacin) de G si el grafo G {v} tiene ms


componentes conexas que G.

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

Figura 9: Un grafo y sus bloques

2.1.6. Digrafos

Un digrafo o grafo dirigido es un par D = (V, A) donde V es un conjunto no vaco (a cuyos


elementos llamaremos vrtices o nodos) y A es una familia finita de pares ordenados (u, v) de
vrtices de V (a cuyos elementos llamaremos aristas o arcos).

Un digrafo simple es un par D = (V, A) donde V es un conjunto no vaco y A es un conjunto finito


de pares ordenados (u, v) de vrtices distintos de V.

Si a = (u, v) es un arco escribiremos a = uv, y diremos que u es extremo inicial de a y que v es


extremo final de a.

Tambin se dice, de un arco a = uv, que el arco es saliente de u y entrante en v.

Un recorrido dirigido en un digrafo es una sucesin de vrtices y arcos de la forma v0 e1 v1 e2 ...


vk-1 ek vk, donde el arco ei tiene como extremos inicial y final vi-1 y vi, respectivamente. Si no se
repiten ni vrtices ni aristas se denomina camino dirigido. Dicho camino se llama camino de v0
a vk y su longitud es k.
Figura 10: Digrafo simple (izquierda) y digrafo (derecha)

2.1.7. rboles y bosques

Un rbol es un grafo conexo y acclico (sin ciclos).

Un bosque es un grafo acclico.

G1 G2 G3

Figura 11: G1 es un rbol (y un bosque); G2 no es un rbol ni un bosque; G3 no es un rbol, pero s es un


bosque

Propiedades de los rboles. Si G = (V, A) es un rbol de n vrtices y q aristas, entonces:

Para todo par de vrtices x e y de G existe un nico camino de x a y.


Todas las aristas de G son puentes.

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.

Para todo par de vrtices x e y de G existe un nico camino de x a y.

G es conexo y todas sus aristas son puentes.

G es acclico y maximal (la adicin de una arista nueva origina un ciclo).

G es acclico y q = n 1.

G es conexo y q = n 1.

2.1.8. rboles con raz

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.

Figura 12: Un rbol dirigido (izquierda) y un rbol con raz (derecha)

2.1.9. Grafos ponderados

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.

En la siguiente figura se muestra un grafo ponderado G y un subgrafo H de G. En este caso, w(H)


= 16.

1 1

2 2
5 3 3 3
G H
4 4
6 6

Figura 13: Un grafo ponderado G y un subgrafo H de G

2.2. rboles generadores

2.2.1. rboles generadores y bosques generadores

Un rbol generador de un grafo G (tambin llamado rbol recubridor o rbol expandido), es un


subgrafo de G que es rbol y contiene a todos los vrtices de G.

Anlogamente, un bosque generador de un grafo G, es un subgrafo de G que es bosque y contiene


a todos los vrtices de G.

G T F

Figura 14: Un grafo G, un rbol T generador de G y un bosque F generador de G

2.2.2. rbol generador mnimo


Un rbol generador mnimo en un grafo conexo y ponderado G es un rbol generador de G de
peso mnimo (o, lo que es lo mismo, un rbol generador de G tal que la suma de los pesos de sus
aristas es mnima). Se designa por MST(G).

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

ALGORITMO DE PRIM (1957) (Jarnk, 1930)

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.

Descripcin detallada del algoritmo

Paso 1. Se elige un vrtice u de G y se considera el rbol T = {u}.

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.

Paso 3. Si T tiene n 1 aristas, el algoritmo termina. En caso contrario se vuelve al paso


2.

Ejemplo
La siguiente figura muestra cmo se construye, paso a paso, un rbol generador mnimo aplicando
el algoritmo.

Figura 16: Construccin de un rbol generador mnimo (algoritmo de Prim)

Correccin del algoritmo

A continuacin se demuestra que el algoritmo de Prim construye un rbol generador en un grafo


conexo ponderado.

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*

Figura 17: Demostracin de la correccin del algoritmo de Prim

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.

Complejidad del algoritmo

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

Una buena estructura de datos mejora la complejidad. Consideremos las listas S y Z = V S. A


cada vrtice de Z le etiquetamos inicialmente as:

t(z) = w(uz) si existe la arista uz, t(z) = si no existe

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:

t(x) := min{t(x), w(zx)}

As, en cada paso el mnimo se calcula entre n k etiquetas. Y el coste total es

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

ALGORITMO DE KRUSKAL (1956)

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.

Descripcin detallada del algoritmo

Paso 1. Se elige la arista de mnimo peso e y se considera S = {e}.

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.

Paso 3. Si S tiene n 1 aristas, el algoritmo termina. En caso contrario se vuelve al paso


2.

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)

Correccin del algoritmo

A continuacin se demuestra que el algoritmo de Kruskal construye un rbol generador en un


grafo conexo ponderado.

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

Complejidad del algoritmo

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

ALGORITMO DE BORVKA (1928)

Este fue el primer algoritmo descrito en la literatura. Se utiliz para resolver el problema de la
electrificacin de las zonas rurales de Moravia.

En el algoritmo se toma un bosque generador F de G y se une cada componente conexa de F con


un vrtice de otra componente por una arista de mnimo peso.

Descripcin detallada del algoritmo

Paso 1. Se parte del bosque trivial (sin aristas) de n vrtices que llamamos F.

Paso 2. Para cada componente F de F se une un vrtice de F a un vrtice de otra


componente de F por una arista de mnimo peso. Designamos este conjunto de aristas por
S y tomamos F = F + S.
Paso 3. Si el nmero de aristas de F es n 1, el algoritmo termina. En caso contrario se
vuelve al paso 2.

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.

Figura 20: Construccin de un rbol generador mnimo (algoritmo de Borvka)

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.

Complejidad del algoritmo

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.2.3. rbol generador mximo

Un rbol generador mximo en un grafo conexo y ponderado G es un rbol generador de G de


peso mximo (o, lo que es lo mismo, un rbol generador de G tal que la suma de los pesos de sus
aristas es mxima). Se designa por MaxST(G).

El rbol generador mximo de un grafo, MaxST(G), no necesariamente es nico. Por ejemplo,


para el grafo G de la siguiente figura existen dos rboles generadores mximos:
G T1 T2
1

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

Para construir un rbol generador mximo de un grafo conexo y ponderado G de n vrtices y q


aristas se pueden utilizar los algoritmos de Prim, Kruskal y Borvka vistos anteriormente, aunque
con modificaciones en algunos pasos. Concretamente, en el caso del algoritmo de Prim, se debe
modificar el paso 2 (se muestra a continuacin dicho paso ya modificado):

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.

En el caso del algoritmo de Kruskal, es necesario modificar los pasos 1 y 2:

Paso 1. Se elige la arista de mximo peso e y se considera S = {e}.

Paso 2. Sea e la arista de mximo peso tal que e S y S + e es un grafo acclico. Se


hace S = S + e.

Por ltimo, en el caso del algoritmo de Borvka, basta con modificar el paso 2:

Paso 2. Para cada componente F de F se une un vrtice de F a un vrtice de otra


componente de F por una arista de mximo peso. Designamos este conjunto de aristas por
S y tomamos F = F + S.

2.2.4. rbol generador ms uniforme

Distinguiremos dos acepciones para rbol generador ms uniforme T en un grafo conexo y


ponderado G:

(1) rbol generador de G cuya mxima diferencia de pesos de dos aristas de T es mnima.

(2) rbol generador de G tal que w(e) m


eT
es mnimo, siendo m la media de los pesos de

las aristas de G.

Por lo tanto, un rbol generador T de un grafo G es ms uniforme:


segn la acepcin (1), cuanto menor sea la mxima diferencia de pesos de dos aristas de T

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

El rbol generador ms uniforme de un grafo no necesariamente es nico. En las dos figuras


siguientes, adems, se puede ver claramente que los rboles generadores ms 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
9 9

5 5 5
2 3 7 7 2 3

1 1
8 8

Figura 22: T1 y T2 son los rboles generadores ms uniformes (acepcin (1)) de G

G T1 T2
9

5 5 5
2 3 7 2 3 7 3 7

1
8 8

Figura 23: T1 y T2 son los rboles generadores ms uniformes (acepcin (2)) de G

De hecho, en el ejemplo que acabamos de ver:

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

A continuacin se describen dos algoritmos para la construccin del rbol generador ms


uniforme de un grafo conexo y ponderado G de n vrtices y q aristas:

uno para construir el rbol ms uniforme segn la acepcin (1) y


otro para construir el rbol ms uniforme segn la acepcin (2).

Construccin del rbol generador ms uniforme (acepcin (1))

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.

findroot(v): Devuelve la raz del rbol que contiene el vrtice v.

findcost(v): Devuelve una arista de peso mnimo en el camino desde v hasta su raz
(actual).

evert(v): Hace a v raz del rbol que contiene dicho vrtice.

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.

Descripcin detallada del algoritmo

A continuacin se describe detalladamente el algoritmo para construir el rbol generador ms


uniforme T:
Ordenar las aristas de G de forma que w(ei) w(ei+1), para i = 1, , q-1;
para todo v V hacer maketree(v);
z := +; T := ; S := ;
para u := 1 a q hacer
(Sea eu = (v, w).)
si findroot(v) = findroot(w) entonces
evert(v); findcost(w);
(Sea la arista devuelta por findcost la arista e saliente de x.)
cut(x); S := S {e};
fin si
link(v, w); S := S {eu};
si |S| = n 1 entonces
Encontrar el mnimo l tal que el S;
(Esto se puede hacer en un tiempo constante manteniendo las
aristas de S en una lista doblemente enlazada ordenada.)
si w(eu) w(el) < z entonces
z := w(eu) w(el); T := S;
si z = 0 entonces parar;
fin si
fin si
fin para

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

Complejidad del algoritmo

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

Construccin del rbol generador ms uniforme (acepcin (2))


El algoritmo que se describe a continuacin es similar al de Kruskal para hallar un rbol generador
mnimo (o para hallar un rbol generador mximo).

Descripcin detallada del algoritmo

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

Paso 2. Sea e la arista de peso ms cercano a m tal que e S y S + e es un grafo acclico.


Se hace S = S + e.

Paso 3. Si S tiene n 1 aristas, el algoritmo termina. En caso contrario se vuelve al paso


2.

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

Figura 25: Construccin del rbol generador ms uniforme (acepcin (2))

Correccin y complejidad del algoritmo

La demostracin de que este algoritmo construye el rbol generador ms uniforme, segn la


acepcin (2), en un grafo conexo ponderado es anloga a la demostracin de que el algoritmo de
Kruskal construye un rbol generador mnimo (o mximo) en un grafo conexo y ponderado.

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

Anlogamente, distinguiremos dos acepciones para rbol generador menos uniforme T en un


grafo conexo y ponderado G:

(1) rbol generador de G cuya mxima diferencia de pesos de dos aristas de T es mxima.

(2) rbol generador de G tal que w(e) m


eT
es mximo, siendo m la media de los pesos de

las aristas de G.

Por lo tanto, un rbol generador T de un grafo G es menos uniforme:

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

A continuacin se describen dos algoritmos para la construccin del rbol generador ms


uniforme de un grafo conexo y ponderado G de n vrtices y q aristas:

uno para construir el rbol menos uniforme segn la acepcin (1) y


otro para construir el rbol menos uniforme segn la acepcin (2).

Construccin del rbol generador menos uniforme (acepcin (1))

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

Descripcin detallada del algoritmo

A continuacin se describe detalladamente el algoritmo para construir el rbol generador menos


uniforme T:
Ordenar las aristas de G de forma que w(ei) w(ei+1), para i = 1, , q-1;
para todo v V hacer maketree(v);
z := +; T := ; S := ;
para u := 1 a q hacer
(Sea eu = (v, w).)
si findroot(v) = findroot(w) entonces
evert(v); findcost(w);
(Sea la arista devuelta por findcost la arista e saliente de x.)
cut(x); S := S {e};
fin si
link(v, w); S := S {eu};
si |S| = n 1 entonces
Encontrar el mnimo l tal que el S;
(Esto se puede hacer en un tiempo constante manteniendo las
aristas de S en una lista doblemente enlazada ordenada.)
si w(eu) w(el) > z entonces
z := w(eu) w(el); T := S;
si z = 0 entonces parar;
fin si
fin si
fin para

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

Construccin del rbol generador menos uniforme (acepcin (2))

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

Paso 2. Sea e la arista de peso menos cercano a m tal que e S y S + e es un grafo


acclico. Se hace S = S + e.

2.3. Caminos de capacidad mxima


En un grafo ponderado, el peso de una arista puede indicar la capacidad (o el caudal) de la misma.
En este caso, la capacidad (o el caudal) de un camino es el menor de los pesos de sus aristas (la
mnima de las capacidades, o el mnimo de los caudales, de sus aristas).

Teniendo en cuenta lo anterior, en un grafo ponderado G, un camino de capacidad mxima


(tambin llamado de caudal mximo o de congestin mnima) entre dos vrtices u y v de G es un
camino en G entre u y v tal que el menor de los pesos de sus aristas es mximo.
El camino de capacidad mxima en un grafo G entre dos vrtices u y v de G no necesariamente
es nico. En el grafo G de la siguiente figura, por ejemplo, existen dos caminos entre u y v de
capacidad mxima:

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

A continuacin se describe un algoritmo para la construccin de un camino de capacidad mxima


en un grafo conexo y ponderado G entre dos vrtices u y v de G:

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

Paso 2. Hallar en T el nico camino entre u y v.

Ejemplo

En la siguiente figura se muestra:

un grafo conexo y ponderado G

el rbol generador mximo T que se construye a partir de G al dar el primer paso del
algoritmo

el camino de capacidad mxima P que se construye a partir de T, dados dos vrtices u y v


(con etiquetas u y v en la figura), al dar el segundo paso del algoritmo
Figura 29: Construccin de un camino de capacidad mxima

Correccin del algoritmo

Demostrar la correccin de este algoritmo equivale a demostrar que, si G es un grafo conexo


ponderado y T es un rbol generador mximo de G, para cada par (u, v) de vrtices de G el nico
camino entre u y v en T es un camino de capacidad mxima en G.

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.

Complejidad del algoritmo

La complejidad de este algoritmo viene dada por la construccin del rbol T.

Вам также может понравиться