“UNIVERSIDAD NACIONAL DE TRUJILLO “
“Escuela De Ciencias Físicas Y Matemáticas” Ingeniería Informática
Curso: Estructura de Datos
Profesor: Iris Cruz
Alumno: Montaez !ulcamoro Marisol "cas #aldaa !$oan Pereda #antos "scar "la%id Portales Armas Fredd& 'iancarlo (uis)e *amírez Ang& #arac$aga Flores Daniel #uarez Prínci)e !os+ Alfred
2014 – Trujillo
ÁRBOLES AA 1. CONCEPTO: En el campo de informática se le conoce como árbol binario e búsqueda auto balanceable utilizado para almacenar y recuperar información de manera eciente! El nombre de "árboles ##$ se debe a su in%entor #rne #nderson! &on una simplicación de las re'las de los árboles coloreados y ori'inan un nú mero bastante menor de situaciones que deben ser analizadas (oa árboles ## son una %ariación del árbol)rojo)ne'ro* que a la %ez es una mejora del árbol binario d búsqueda! # diferencia de los árboles rojo)ne'ro* los nodos en un árboles ## sólo pueden a+adirse como un ,ijo derec,o! -in'ún nodo puede ser un ,ijo izquierdo* de esta forma se adecúa a un árbol 2). en %ez de un árbol 2).)4* lo que simplica las operaciones de mantenimiento! (os al'oritmos de mantenimiento para un árbol rojo) ne'ro necesitan considerar siete diferentes formas para balancear adecuadamente el árbol! # continuación obser%emos el 'ráco/
ero ya que el requisito indica que sólo los enlaces derec,os pueden ser rojos* solo es necesario considerar 2 formas/
Ejemplo de árbol de . nodos
2. ROTACIONES DE BALANCEO
2. ROTACIONES DE BALANCEO &e diferencia de los árboles rojo)ne'ros porque son 'eneralmente usados con la idea de un ni%el en lu'ar de un color! ada nodo tiene un ampo ni%el y debe cumplir las si'uientes condiciones para que sea %álido/ 1. El nivel de un nodo hoja es uno.
2. El nivel de un hijo izquierdo es estrictamente menor que el de su padre.
3. El nivel de un hijo derecho es menor o igual que el de su padre.
4. El nivel de un nieto derecho es estrictamente menor que el de su abuelo. Cada nodo de nivel mayor que uno debe tener dos hijos. &e
necesitan dos operaciones para que el
árbol ## se manten'a equilibrado! (as operaciones son/
-Torsión (S!"#: Es una rotación derec,a que se realiza cuando una inserción o un borrado 'eneran un enlace ,orizontal izquierdo* puede ser un enlace rojo)izquierdo en el conteto árbol rojo) ne'ro (a función torción es/ Entrada: ! un nodo que representa un "rbol ## que requiere ser rebalanceado. salida: $tro nodo que representa el "rbol ## rebalanceado. si nil%& entonces devuelve 'il si no si nivel%izquierda%&& (( nivel%& entonces Cambia los apuntadores de los enlaces horizontales a la izquierda. ) ( izquierda%& izquierda%& :( derecha%)& derecha%)& :( devuelve ) si no devuelve *in si *in de la *unci+n
(a torsión 3uncionara as/
-Di$isión (S%&i'#/
Es una rotación izquierda condicional que tiene lu'ar cuando una inserción o un borrado
Es una rotación izquierda condicional que tiene lu'ar cuando una inserción o un borrado crea dos enlaces ,orizontales derec,os* pero se corresponde con os enlaces rojos consecuti%os en el conteto de árboles rojo)ne'ro!
(a función di%isión es/ Entrada: ! un nodo que representa un "rbol ## que requiere ser rebalanceado. ,alida: $tro nodo que representa el "rbol ## rebalanceado. si nil%& entonces devuelve 'il si no si nivel%& (( nivel%derecha%derecha%&&& entonces enemos dos enlaces horizontales a la derecha. oma el de en medio! el-valo! y devu-lvelo. ( derecha%& derecha%& :( izquierda%& izquierda%& :( nivel%& :( nivel%& / 1 devuelve si no devuelve *in si *in de la *unci+n
.INSERCI)N &e empieza con una búsqueda en un árbol binario y su procedimiento de inserción* lue'o* a medida que se desenrolla la pila de llamadas* es fácil comprobar la %alidez del árbol y realizar las rotaciones que se precisen! &i aparece un enlace ,orizontal izquierdo* se realiza una torsión* y si aparecen dos enlaces ,orizontales derec,os* se realiza una di%isión* despu5s incrementando el ni%el del nue%o nodo raz del subárbol correspondiente! 6bser%e que el códi'o de muestra realiza un incremento de ni%el 7T8! (o que ,ace que podamos continuar comprobando la %alidez del árbol a medida que las modicaciones suben desde las ,ojas! (a inserción por la izquierda se'uida de una torsión* puede ori'inar una nue%a %iolación a las propiedades de los árboles ##! (ue'o se dibuja en forma con%encional* de acuerdo a los ni%eles de los nodos! (a ilustración muestra la situación lue'o del s9e:; lo cual produce el doble rojo* o dos ,ijos ,orizontales* debe notarse que el reci5n insertado es la nue%a raz! (a situación se corri'e con u na rotación a la izquierda* respecto del nodo reci5n insertado* y lue'o incrementando el ni%el del nodo central! Esta última operación se denomina partir 7&plit8* y se deri%a de los <)tres antecesores de los árboles ##* en los
cuales se di%ide un multinodo que ecede el máimo número de cla%es en dos
cuales se di%ide un multinodo que ecede el máimo número de cla%es en dos multinodos! =nserción por la izquierda &9e:/
=nserción por la izquierda – &9e: y &plit en el mismo ni%el
0nserci+n por la izquierda ,e y ,plit en niveles de recursi+n di*erentes:
&i se inserta por la derec,a* si el padre no tiene descendiente derec,o no ,ay modicaciones que efectuar; pero si el padre es un descendiente derec,o se producen dos descendientes ,orizontales* la situación equi%ale a dos rojos adyacentes* y se corri'e efectuando una rotación a la izquierda* e incrementando en uno el ni%el del nodo central; es decir con un &plit! -o se requiere en este caso de la operación s9e:!
*. Ins!r+ión %or &* ,!r!+*:
(a operación split* al subir el ni%el de un nodo* puede ocasionar un nue%o descendiente izquierdo de i'ual ni%el que el padre o tres nodos adyacentes de i'ual ni%el! or esta razón debe ascenderse ,asta la raz* si'uiendo la ruta por la que se descendió* para ubicar la posición de inserción* efectuando las operaciones s9e: y split* en ese orden* en cada uno de los nodos de la ruta! &in embar'o* como se %erá más adelante* en cada ni%el de recursión* cuando debe efectuarse una modicación para mantener las propiedades sólo se efectúa un s9e: o un split o un incremento de ni%el! &e ,an analizado las diferentes situaciones de inserción que se producen en el primer ni%el de un árbol ##! Esto se lo'ró efectuando inserciones en un árbol con un nodo* e inserciones en un árbol con dos nodos! #plicando las operaciones anteriores* puede comprobarse la estructura de los árboles ##* para 4* >* ? y @ nodos! Aebe notarse que en cada dia'rama ,ay que estudiar 7 nB18 casos de inserción* ya que 5ste es el número de nodos eternos* o los posibles lu'ares para insertar el nue%o nodo! &in embar'o si se obser%an las formas que se producen en los diferentes ni%eles* puede deducirse que los casos de inserción analizados antes son los únicos que se presentan!
# ins!r+ión %or &* i/0i!r,* < de ni%el i &i el subárbol derec,o era ##* los nodos y A deben tener ni%el 7i)18! En la 3i'ura 1>!14* se Cuestra el nodo n de ni%el i* lo que %iola las propiedades de un árbol ##* y la estructura debe &er corre'ida! &e'ún se analizó antes* la única forma en que un nodo aumenta su ni%el es teniendo ambos ,ijos de i'ual ni%el! Entonces si antes de insertar el nodo n el árbol era ##* y si el nodo n alcanza 'rado i quiere decir que lo ,a lo'rado teniendo ,ijos de i'ual ni%el! Esto implica que a y b deben ser de ni%el 7i)18! &i # tiene padre debe ser de ni%el 7iB18! Dinserción por la izquierda < de ni%el i!
En este caso lue'o de un s9e: en t* resulta el dia'rama a la izquierda de la 3i'ura 1>!1>; y lue'o del split en el nue%o t* resulta el subárbol ## a la derec,a de la 3i'ura 1>!1>! En este caso* debido a que el nodo # aumenta su ni%el inicial* es preciso continuar la re%isión ascendente! (a situación puede ser corre'ida* sin realizar rotaciones* cambiando solamente el ni%el del nodo #* en la 3i'ura 1>!14! -ótese que se preser%a la propiedad de que el nodo que aumenta su ni%el tiene ambos ,ijos i'uales y de un ni%el menor! D=nserción por la izquierda* cambio de ni%el/
E!3%&os ,! ins!r+ión. &i se realiza una inserción de cla%es en orden ascendente* desde el 1 ,asta el 1>* se obtiene lue'o de las operaciones de re)balance* despu5s de cada inserción* inmediatamente lue'o de insertado el nodo con %alor 1>! &e de%uel%e si'uiendo la ruta desde la raz al nodo insertado* pero en forma ascendente! omo el nodo 1> cumple las propiedades* es un árbol ##; se asciende al 14* que tambi5n es ##! ero al ascender al 1.* 5ste tiene dos ,ijos ,orizontales; entonces debe realizarse un split en el nodo 1.! El árbol cuya raz es el nodo con %alor 14 es ##* notar que 5sta es la raz lue'o del split!
0nserci+n de nodo con valor 1 en "rbol ##
#l ascender al nodo con %alor 12* tambi5n se cumplen las propiedades de los árboles ##! ero al ascender al nodo con %alor 10* debe %ol%er a efectuarse un split!
ontinuando el ascenso* no es necesario efectuar correcciones en el nodo con %alor * pero al ascender a la raz* debe %ol%er a efectuarse un split; que muestra un árbol perfectamente balanceado* con raz ! En secuencias de inserciones ascendentes sólo es necesario realizar operaciones splits!
# partir de una inserción de secuencias descendentes de cla%es! &e ,an insertado* en forma descendente las cla%es desde 1> a F* y lue'o se ,an efectuado las operaciones de mantención! (a 3i'ura* a la izquierda* muestra la inserción de un nodo con cla%e ; lo cual produce un descendiente izquierdo de i'ual ni%el que su padre* por lo cual debe efectuarse un s9e:* al ascender al nodo F! # la derec,a de la 3i'ura* se muestra el árbol ## resultante* ya que al recorrer la ruta ascendente* pasando por el 10 y lle'ando a la raz 12* no es necesario efectuar mantenciones!
)uego de insertar el y luego del se en 5 y ascender hasta la ra6z.
&i en el árbol ##* a la derec,a se inserta un nodo con %alor @* se tiene el dia'rama a la izquierda del dia'rama!
(a función insertar es entrada/ G* el %alor a ser insertado* y T* la raz del árbol en el cual se insertará! salida/ Hna %ersión balanceada de T que incluye a G! Iaz el procedimiento normal de inserción de un árbol de búsqueda binario! #si'na al ,ijo correcto el resultado de la llamada recursi%a en caso de que un nodo nue%o fue creado o la raz del subárbol cambió! si nil7T8 entonces rea una nue%a ,oja con G! de%uel%e nodo7G* 1* -il* -il8 si no si G J %alor7T8 entonces izquierda7T8 /K insertar7G* izquierda7T88 si no si G L %alor7T8 entonces derec,a7T8 /K insertar7G* derec,a7T88 n si -ote que el caso G KK %alor7T8 no está especicado! En esta implementación* no tendrá nin'ún ejemplo! &e puede cambiar el comportamiento dependiendo de la implementación! &e realiza la torsión y lue'o la diisión! (as condiciones de si serán ,ec,as ambas acciones están dentro de los procedimientos ya descritos arriba! T /K torsión7T8 T /K di%isión7T8 de%uel%e T n de la función
4. RENDIMIENTO
El rendimiento de un "rbol ## es equivalente al de un "rbol rojo7negro. 8n "rbol ## realiza m"s rotaciones que un "rbol rojo7negro! pero la mayor sencillez de sus algoritmos tiende a hacerlos m"s r"pidos! y estos *actores se compensan resultando en un rendimiento similar. 8n "rbol rojo7negro es m"s constante en su rendimiento que un "rbol ##! pero un "rbol ## tiende a ser m"s llano lo que produce menor tiempo de b9squeda.
Pro%i!,*,!s: )Todos los nodos de un ni%el superior a uno* tiene dos ,ijos* el nodo sucesor o predecesor* tendrá ni%el 1* ,aciendo que su eliminación sea tri%ial! ) El ni%el de un ,ijo izquierdo debe ser menor que el n i%el de su padre! )El ni%el de un ,ijo derec,o debe ser menor o i'ual al ni%el de su padre! )El ni%el de un nieto derec,o debe ser menor que el ni%el de su abuelo! )(as ,ojas son de ni%el 1! )(os nodos que no son ,ojas deben tener dos ,ijos!
4. TIPOS DE DATOS
# continuación se mostrarán al'unos al'oritmos para la creación de árboles ## con
# continuación se mostrarán al'unos al'oritmos para la creación de árboles ## con funciones! t&)edef int data, t&)edef struct node struct node .left/ .rig$t, int ni%el, data cla%e,
M nodo* Dpnodo; typedef pnodo arbol; NNOaribles 'lobales )nodo nil, nodo centinela, %oid initglo0al%aria0les12 - nil34centinela, nil56ni%el 3 7, 88ni%el del centinela/ está 0a9o las $o9as nil56left 3 nil, nil56rig$t 3 nil,
M
Creación de nodo.
;a inserci?;;2 -)rintf1@Error memorian@2, eBit1=2, else - )56cla%e 3 %alor, )56left 3 nil, 88a)untan al centinela )56rig$t 3 nil, )56ni%el 3 =, 88$o9as en ni%el = return1)2,
M
O%!r*+ion!s 5si+*s. 8. rotaci
- register )nodo tem)3t,
- register )nodo tem)3t, t 3 t56rig$t, tem)56rig$t 3 t56left, t56left 3 tem), t56ni%el, return1t2, )nodo seG 1)nodo t2 - )nodo tem), if 1t56left56ni%el33 t56ni%el 2 88no falla/ en los ni%eles inferiores/ de0ido al centinela - 8. rotaci
M
if 1t56rig$t56rig$t56ni%el33 t56ni%el 2 - 8. rotaci
if 1t56rig$t56rig$t56ni%el33 t56ni%el 2 - 8. rotaci
M M
CONCLUSIONES. )(os árboles funcionan similarmente a las listas doblemente enlazadas )oseen Aiferentes 3unciones como inserción y <úsqueda! )(os arre'los pueden ser modicados! )&on aplicados con colores!