Anda di halaman 1dari 12

UNIVERSIDAD TCNICA DE AMBATO

FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL


CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

I. PORTADA
UNIVERSIDAD TCNICA DE AMBATO
Facultad de Ingeniera en Sistemas, Electrnica e Industrial

Ttulo: Tipo de Arbol Rojo - Negro


Carrera: Ingeniera en Sistemas Computacionales
rea Acadmica: Nombre del rea Acadmica
Lnea de Investigacin: Lnea de la Carrera
Nivel y Paralelo: Tercero A
Alumnos participantes: Chasi Christian Paul
Pintag Marco
Villacs Johanna Carolina
Mdulo y Docente: Estructura de Datos
PhD. Flix Oscar Fernndez Pea

II.
1. PP
INFORME DEL PROYECTO
2. YY

2.1 Ttulo
Tipo de Arbol Rojo - Negro

2.2 Objetivos

Identificar aspectos fundamentales del rbol rojo - negro


Determinar las caractersticas que abarcan el rbol rojo - negro

2.3 Resumen

La investigacin y el anlisis de diversas formas del tipo de rbol binario dentro


de la estructura de datos se llevarn a cabo gracias a las diversas distribuciones
que nos facilitan a gran escala la identificacin de una manera ms eficaz del
tema tratado en el presente informe.

2.4 Palabras clave: (Palabra1, palabra2, palabra3..)


-Arbol
-Rojo
-Negro
-Binario
2.5 Introduccin

El presente trabajo pretende dar a conocer los resultados obtenidos tras la


investigacin cualitativa del tipo de rbol binario rojo - negro dentro de la estructura
de datos de TDA. Como primer punto se realiz la investigacin del tema tratado en
el presente trabajo poniendo en marcha la aplicacin del primer objetivo de este
trabajo cumpliendo as el anlisis de las diferentes especificaciones del rbol y as
obtener un anlisis ms minucioso en representacin al tema.
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

2.6 Materiales y Metodologa

rboles coloreados. Red black.


Si las claves siempre ingresan ordenadas en forma aleatoria, puede emplearse un rbol
binario de bsqueda. Sin embargo si por momentos se producen ingresos de claves en
orden, debe escogerse una estructura que pueda rebalancear dinmicamente el rbol.
El rbol coloreado, como se ver, tiene un criterio de balance un tanto ms relajado que
un AVL.

Por esta razn, si los datos ingresan preponderantemente ordenados el rbol AVL tiene
un mejor comportamiento que el red-black, ya que tiene una altura menor.

Si los datos son accesados mayormente en forma secuencial, el rbol desplegado,


splay, tiene un mejor comportamiento que los anteriores. [1]

2.6.1. Propiedades de los rboles coloreados.


Se agrega a cada nodo un dato que indica su color. Existen reglas que deben cumplirse
para asignar el color a cada nodo, de tal modo que una trayectoria cualquiera desde un
nodo a una hoja no sea mayor que el doble del largo de cualquier otra. Esto asegura
que el rbol coloreado se mantenga ms o menos balanceado, asegurando un costo
logartmico para las operaciones en peor caso.

Propiedades:

1. Cualquier nodo es rojo o negro.

2. Cualquier descendiente de hoja se considera negro. (Los nodos externos, son


negros; stos no son nodos con informacin.) La raz debe ser negra.
3. Si un nodo es rojo, sus hijos son negros. No hay dos rojos adyacentes.
4. Cualquier trayecto desde un nodo hacia una hoja contiene el mismo nmero de nodos
negros.
La Figura 1 muestra los nodos con valores 4, 7, 12 y 20 de color rojo. La estructura
cumple las propiedades anteriores.

4 15

2 5 12 20

Figura 1 rbol de bsqueda binaria coloreado.


UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

Una buena interpretacin de los nodos rojos en un rbol coloreado, es dibujarlos en un


nivel horizontal, de este modo se refleja que no alteran las alturas negras de los nodos.
Esto se muestra en la Figura 2, para el rbol coloreado de la Figura 1. En la
representacin con rojos en nivel horizontal, debe cuidarse que cada nodo tenga dos
hijos, para que el rbol sea binario.

Tambin puede verse, con esta representacin, que en un rbol coloreado todas las
hojas tienen la misma altura. El rbol coloreado es un caso particular de un B-Tree, en
los cuales los nodos pueden almacenar varias claves.

4 9

2 5 7 12 15 20

Figura 1a rbol coloreado con rojos horizontales.

Debido a la presencia de nodos rojos, al menos la mitad de los nodos de un trayecto de


un nodo hasta las hojas deben ser negros.

La trayectoria ms larga, una que alterna entre nodos rojos y negros, es slo el doble
del largo de la trayectoria ms corta, la formada slo por nodos negros.

Figura 2 Trayectos en peor caso.

Luego de insertar desde el 1 hasta el 14, que es un peor caso de rbol binario de
bsqueda, en el rbol coloreado que se muestra en la Figura 2, el trayecto ms largo es
de 6 nodos por la va ms larga y de tres nodos por la ms corta.
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

En la Figura 2, puede comprobarse que las alturas negras de todos los nodos son
iguales, y que no hay dos rojos adyacentes; adems la raz es negra, cumpliendo todas
las propiedades. [2]

2.6.2. Complejidad en rboles coloreados.

En un rbol coloreado, con n nodos internos, debe cumplirse que la altura h es a lo


ms:

h 2log( n 1)

Se define la funcin altura negra de un nodo x, bh(x), como el nmero de nodos negros
de cualquier trayectoria desde x hasta una hoja, no contando el nodo x.

Se desea probar, mediante induccin, que un subrbol, que parte en el nodo x, contiene
bh(x)
a lo menos 2 -1 nodos internos.

Si x es un nodo externo, entonces bh(x) = 0, y el nmero de nodos internos


es: 20-1=0. Si x es una hoja, entonces bh(x) = 1, y el nmero de nodos
internos es: 21-1=1.

Si x tiene alto h, los nodos hijos de x, tienen altura (h-1).

Si el hijo es rojo tiene altura negra: bh(x), igual a la del padre

Si el hijo es negro tiene altura negra: bh(x)-1, ya que no se cuenta el nodo


negro.

Considerando verdadera la proposicin para el nmero de nodos internos del subrbol


que comienza en x; los subrboles de los hijos de x, deben entonces tener a lo menos:
2bh(x)-1-1 nodos internos.

Para obtener el nmero de nodos internos del subrbol que comienza en x, sumamos
los nodos internos de los subrboles hijos, ms el nodo interno x, se obtiene:

n >= (2bh(x)-1-1) + (2bh(x)-1-1) + 1 = 2(2bh(x)-1) - 1=2bh(x)-1

Lo cual demuestra la proposicin inicial.


UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

Pero en un rbol coloreado al menos la mitad de los nodos de un trayecto de un


nodo hasta las hojas deben ser negros, entonces si h es la altura de un rbol, que
comienza en x, se tiene que:

bh (x)
2

Entonces, reemplazando en la expresin de n, en funcin de bh(x), la cota para bh(x),


se obtiene:

n 2bh ( x ) 1 2h /2 1

Despejando h, se logra:

h 2log( n 1) (log( n))

Debe notarse que sta es la complejidad de peor caso.

Al insertar o descartar nodos en un rbol coloreado, pueden violarse las propiedades


que los definen; y para mantenerlo coloreado, como se ver ms adelante, deben
cambiarse los colores de algunos nodos y tambin posiblemente efectuar rotaciones.
Esto se refleja en un costo adicional para las funciones de insercin y descarte en un
rbol binario de bsqueda.

Para un rbol AVL, la cota para la altura resulta menor que en rbol coloreado:

hAVL 1, 4404 log( n ) (log( n))

La Figura 2a, muestra la complejidad del rbol coloreado, respecto del AVL, y puede
observarse que son muy similares. Pero las operaciones se realizan en menor tiempo,
en un rbol coloreado.

En un rbol binario de bsqueda, en promedio, si las claves llegan aleatoriamente, se


tiene la altura: hBST 1, 3863 log( n ) (log( n)) . Pero sta se incrementa hasta n, en el
peor caso.
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

coloreado

AVL

Bst promedio

balanceado

Figura 2a. Comparacin de complejidades. Red-Black, AVL, Balanceado. [3]

2.6.3 Insercin.
La codificacin resulta sencilla detallando de los diferentes casos..

Se pasa por referencia el rbol.

pnodo insertar(pnodo *tree, pnodo nuevo)

pnodo y=NULL;

pnodo x=*tree;

if (nuevo==NULL) {Error(1,0); return (NULL);} //malloc no pudo crear nodo

//Busca posicin para insertar.

while(x!=NULL)

{ y = x;

if (nuevo->clave < x->clave) x=x->left;

else if (nuevo->clave > x->clave) x=x->right;

else {Error(2, nuevo->clave); return(NULL);} //clave duplicada


UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

//y apunta al padre del lugar de insercin.

nuevo->padre=y;

if (y == NULL) {*tree=nuevo; nuevo->color=BLACK;


return(nuevo);} else if (nuevo->clave < y->clave) y->left=nuevo;

else y->right=nuevo;

/*Cdigo adicional para preservar las propiedades de rbol


coloreado*/ x=nuevo;

while ( (x->padre!=NULL) && ( x->padre->color==RED) ) //doble rojo

{ if ( x->padre==x->padre->padre->left) //como la raz es negra, existe el


abuelo de x //si x es descendiente izquierdo del abuelo.

{ y=x->padre->padre->right; // y apunta al to

if ((y!=NULL)&&(y->color==RED)) // solo
recoloracin. { x->padre->color=BLACK;

y->color=BLACK; //pinta NEGRO al to y al padre x->padre-


>padre->color=RED; //el abuelo que era negro, cambia de color
x=x->padre->padre; //debe seguir revisando ascendentemente

else //Debe reestructurarse mediante rotaciones. Si y es nulo o y apunta a


negro.

if (x==x->padre->right) { x= x->padre;
lrot(tree,x);} x->padre->color=BLACK; x-
>padre->padre->color=RED;

rrot(tree, x->padre->padre);

}
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

else //Cdigo especular. Si x es descendiente derecho del


abuelo. { y=x->padre->padre->left; // y apunta al to

if ((y!=NULL)&& (y->color==RED)) // solo


recoloracin. { x->padre->color=BLACK;

y->color=BLACK; //pinta al to

x->padre->padre->color=RED; //el abuelo que era negro, cambia


de color x=x->padre->padre; //debe seguir revisando

else //Debe reestructurarse mediante rotaciones

if (x==x->padre->left) { x= x->padre;
rrot(tree,x);} x->padre->color=BLACK; x-
>padre->padre->color=RED;

lrot(tree, x->padre->padre);

(*tree)->color=BLACK; //pinta la raz


negra return (nuevo);

2.6.4 Descarte.

Para marcar con x la raz de un subrbol, que disminuy su altura negra, se emplea un
nodo externo, de color negro, para almacenar un puntero al padre de ste, cuando el
nodo que debe ser descartado es negro y es una hoja. Se pasa como argumento, a la
funcin que restaura las propiedades de un rbol coloreado, en caso de descartar un
nodo negro, si el nodo x es un centinela (nodo externo); de esta forma antes de modificar
el puntero x, se podr escribir el valor nulo en el padre de x.

/* Descarta nodo z, liberando el


espacio*/ //z no debe ser NULL
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

void descarta(pnodo *rootp,


pnodo z) { nodo externo; int
centinela=0;

pnodo x, y;
if(z==NULL)
Error(3,0);

if (z->left == NULL || z->right == NULL) y=z; //un hijo u


hoja else y=sucesor(z);

//Si hay hijo rojo, lo pega; si es hoja: y->right es nulo, y


tambin x. if (y->left != NULL) x=y->left; else x=y->right;

if(y->color==BLACK)
{ //y es negro.

if (x==NULL) {centinela=1; x=&externo; x->color=BLACK;}/y es hoja; x es nodo


externo.

x->padre = y->padre; //si y tiene hijo rojo, o si y es hoja

if (y->padre == NULL)

{ if(centinela) *rootp=NULL; else


*rootp=x;} else if (y==y->padre->left) y-
>padre->left = x; else y->padre->right = x;

if (y!=z) { z->clave =y->clave; }

if (y->color == BLACK) delete_fix(rootp, x, centinela);

free(y);

/* Reestablece propiedades rbol coloreado luego de un


descarte */ void delete_fix(pnodo *rootp, pnodo x, int
esexterno)
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

pnodo w;

while (x!=*rootp && x->color==BLACK)

if (x==x->padre->left) //x es descendiente izquierdo

w=x->padre->right; //w es el
hermano if (w->color==RED)

w->color=BLACK; x-
>padre->color=RED;
lrot(rootp, x->padre);
w=x->padre->right;

//ahora el hermano es negro.

if ( (w->left==NULL || w->left->color==BLACK)
//nodo externo o interno

&& (w->right==NULL || w->right->color==BLACK) )

w->color=RED;//ambos sobrinos
negros if(esexterno)

{x->padre->left=NULL; esexterno=0;}

x=x->padre; //cambia x. Asciende un nivel y sigue balanceando.

else

{//uno o ambos sobrinos son rojos

if (w->right==NULL || w->right->color ==
BLACK) //externo o interno
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

{//sobrino derecho negro

w->left->color=BLACK;
w->color=RED;
rrot(rootp, w); w=x-
>padre->right;

//ahora el sobrino derecho es


rojo w->color=x->padre-
>color; x->padre->color =
BLACK; w->right->color =
BLACK; lrot(rootp, x->padre);
if(esexterno)

{x->padre->left=NULL; esexterno=0;}
x=*rootp; //lleva x a la raiz, se sale del
lazo

else //cdigo especular del if

{ //x es descendiente derecho.


w=x->padre->left;

if (w->color==RED)

{w->color=BLACK; x->padre->color=RED; rrot(rootp, x->padre);


w=x->padre->left;

if ( (w->right==NULL || w->right->color==BLACK) &&


(w->left==NULL || w->left->color==BLACK))

{
w->color=RED;
if(esexterno)

{x->padre->right=NULL;
esexterno=0;} x=x->padre;

else

{
UNIVERSIDAD TCNICA DE AMBATO
FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES E INFORMTICOS
PERODO ACADMICO: MARZO 2017 / SEPTIEMBRE 2017

if (w->left==NULL || w->left->color == BLACK)

w->right->color=BLACK;
w->color=RED;
lrot(rootp, w); w=x-
>padre->left;

}
w->color=x->padre->color;
x->padre->color = BLACK;

w->left->color =
BLACK; rrot(rootp, x-
>padre); if(esexterno)

{x->padre->right=NULL;
esexterno=0;} x=*rootp;

//Al salir del while: x es la raz o es rojo. Si es la raz la pinta


negra. x->color=BLACK; //corrige caso con un solo hijo rojo

2.7 Referencias bibliogrficas

Bibliografa

[1] R.Bayer, Symmetric binary B-trees, -: Acta Informatica, 1972.

[2] ESTRUCTURASITE, Estructura de datos ll, WORDPRESS, 10 04 2016. [En lnea]. Available:
https://estructurasite.wordpress.com/arbol-avl/. [ltimo acceso: 2017 06 17].

[3] U. Alicante, DLSI, [En lnea]. Available:


https://rua.ua.es/dspace/bitstream/10045/16037/7/ped-09_10-tema3_5.pdf.

Anda mungkin juga menyukai