Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2011-12
10 Sep. 2011
1. DEFINICIONES Y PROPIEDADES
9 Feb. 2011
Definiciones (I)
Un rbol consiste en un nodo (r, denominado nodo raiz) y una lista o conjunto de subrboles (A1, A2, .. Ak). Si el orden de los subrboles importa, entonces forman una lista, y se denomina rbol ordenado (por defecto un rbol se supone que es ordenado). En caso contrario los subrboles forman un conjunto, y se denomina rbol no ordenado. Se definen como nodos hijos de r a los nodos raices de los subrboles A1, A2, .. Ak Si b es un nodo hijo de a entonces a es el nodo padre de b Un nodo puede tener cero o ms hijos, y uno o nngun padre. El nico nodo que no tiene padre es el nodo raz del rbol. Un nodo sin hijos se denomina nodo hoja o externo. En caso contrario se denomina nodo interno.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 3
11 Feb. 2011
Definiciones (II)
Se define un camino en un arbol como cualquier secuencia de nodos del arbol, n1 ... np, que cumpla que cada nodo es padre del siguiente en la secuencia (es decir, que ni es el padre de ni+1). La longitud del camino se define como el nmero de nodos de la secuencia menos uno (p-1). Los descendientes de un nodo (c en el diagrama) son aquellos nodos accesibles por un camino que comience en el nodo. Los ascendientes de un nodo (f en el diagrama) son los nodos del camino que va desde la raiz a l.
a b e c f g d b e a c f g d
11 Feb. 2011
Altura
Se define la altura de un nodo en un arbol como la longitud del camino ms largo que comienza en el nodo y termina en una hoja.
3 0 0 2 1 0 0
La altura de un nodo hoja es 0 La altura de un nodo es igual a la mayor altura de sus hijos + 1
La altura de un rbol se define como la altura de la raiz. La altura de un arbol determina la eficiencia de la mayora de operaciones definidas sobre rboles.
11 Feb. 2011
Profundidad
Se define la profundidad de un nodo en un arbol como la longitud del camino (nico) que comienza en la raz y termina en el nodo. Tambin se denomina nivel.
0 0 1 0
Profundidad
Nivel 0
1 2
1 2 3
Nivel 1
Nivel 2
Nivel 3
11 Feb. 2011
Recorrido de rboles
Preorden: Se pasa por la raiz y luego se recorre en preorden cada uno de los subrboles. Recursivo. Postorden: Se recorre en postorden cada uno de los subrboles y luego se pasa por la raiz. Recursivo. Inorden: Se recorre en inorden el primer subrbol (si existe). Se pasa por la raz y por ltimo se recorre en inorden cada uno de los subrboles restantes. Tiene sentido fundamentalmente en rboles binarios. Recursivo. Por Niveles: Se etiquetan los nodos segn su profundidad (nivel). Se recorren ordenados de menor a mayor nivel, a igualdad de nivel se recorren de izquierda a derecha.
No recursivo: Se introduce el raiz en una cola y se entra en un bucle en el que se extrae de la cola un nodo, se recorre su elemento y se insertan sus hijos en la cola.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 7
11 Feb. 2011
a (b) (c (e) (f (g))) (d) (b) ((e) ((g) f) c) (d) a (b) a ((e) c ((g) f)) (d) (a) (b c d) (e f) (g)
11 Feb. 2011
Expresiones matemticas
Preorden Notacin prefija : * 1 + ^ 3 4 2 Postorden Notacin postfija: 1 3 4 ^ 2 + * Inorden Notacin habitual: 1 * ((3 ^ 4) + 2)
* 1 + ^ 3 4 2
Evaluacin de expresiones Serecorreelarbolenpostorden: Siesunoperando,seinsertaenpila Siesunoperador: Seextraendosoperandos Seaplicaeloperador Seinsertaenpilaelresultado Alfinal,lapiladebecontenerun nicovalor,elresultado.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 9
11 Feb. 2011
11 Feb. 2011
10
11 Feb. 2011
11
9 Feb. 2011
13
Representaciones
Las representaciones del TAD Directorio (elementos con relacin de jerarqua) suelen ser representaciones enlazadas, donde cada nodo almacena enlaces al nodo padre y/o a los nodos hijos. El nico nodo distinguido es el nodo raz. El mtodo ms habitual de realizar las operaciones es mediante un iterador (cursor) que marca un nodo concreto que sirve de referencia. Otra posibilidad es indicar un nodo concreto mediante el camino de la raiz a ese nodo.
11 Feb. 2011
14
Los nodos tienen un nmero fijo de enlaces: al padre, al primer hijo y al siguiente hermano. La lista de hijos esta representada como una lista enlazada.
a b c d
11 Feb. 2011
15
3. RBOLES BINARIOS
9 Feb. 2011
16
rboles binarios
rbol binario: Es un rbol que o bien esta vaco (sin contenido) o bien consta de un nodo raiz con dos subrboles binarios, denominados izquierdo y derecho.
La existencia de rboles vacos es una convencin para que no exista ambigedad al identificar el subarbol izquierdo y derecho. Se representa por un cuadrado. La altura de un rbol vaco es -1 Cada nodo puede tener 0 hijos (subrbol izquierdo y derecho vacos), 1 hijo (algn subrbol vaco) o 2 hijos.
a c a
e g
11 Feb. 2011
17
rbol estricto: Si un subrbol est vaco, el otro tambin. Cada nodo puede tener 0 2 hijos. rbol lleno: rbol estricto donde en cada nodo la altura del subrbol izquierdo es igual a la del derecho, y ambos subrboles son rboles llenos. rbol completo: Arbol lleno hasta el penltimo nivel. En el ltimo nivel los nodos estn agrupados a la izquierda.
11 Feb. 2011
18
Los rboles llenos son los rboles con mximo nmero de nodos (n) para una altura (h) dada. Se cumple que n = 2h+1-1
El nmero de nodos de un rbol lleno slo puede ser una potencia de dos menos uno: 1, 3, 7, 15, 31,
Los rboles completos pueden almacenar cualquier nmero de nodos y se sigue cumpliendo que su altura es proporcional al logaritmo del nmero de nodos: h O(log n) Adems tienen la propiedad de que conocido el recorrido por niveles del rbol es posible reconstruirle: a
a b d e f c d
Completo, nico.
a b e c f
No completo, indistinguibles
b c e d f
19
11 Feb. 2011
Es posible almacenar un rbol completo en un vector en el orden dado por su recorrido por niveles, y a partir del ndice de un elemento en el vector conocer el ndice de su nodo padre y los de sus nodos hijos:
11 Feb. 2011
20
4. MONTCULOS (BINARIOS)
9 Feb. 2011
21
Montculo
Un montculo (binario) es un arbol completo cuyos nodos almacenan elementos comparables mediante y donde todo nodo cumple la propiedad de montculo: Propiedad de montculo: Todo nodo es menor que sus descendientes. (montculo de mnimos).
Menor Mayores
Menor Mayores
11 Feb. 2011
22
Ejemplo
11 Feb. 2011
23
El nodo raz (en primera posicin del vector) es el mnimo. La altura de un montculo es logartmica respecto al nmero de elementos almacenados (por ser arbol completo). Si un slo elemento no cumple la propiedad de montculo, es posible restablecer la propiedad mediante ascensos sucesivos en el rbol (intercambindole con su padre) o mediante descensos en el rbol (intercambindole con el mayor de sus hijos). El nmero de operaciones es proporcional a la altura. Para insertar un nuevo elemento se situa al final del vector (ltima hoja del rbol) y se asciende hasta que cumpla la propiedad. Para eliminar la raiz se intercambia con el ltimo elemento (que se elimina en O(1)) y se desciende la nueva raiz hasta que cumpla la propiedad.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 24
11 Feb. 2011
Utilidad
El acceso al mnimo es O(1). La insercin por valor es O(log n) (tiempo amortizado). El borrado del mnimo es O(log n). No usa una representacin enlazada, sino un vector. La creacin a partir de un vector es O(n) y no requiere espacio adicional. El borrado o modificacin de un elemento, conocida su posicin en el montculo, es O(log n).
Para la bsqueda y acceso al i-simo menor se comporta igual que un vector desordenado. La fusin de montculos (binarios) es O(n)
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 25
11 Feb. 2011
Representacin (Java)
public class Monticulo<E>implements ColaPrioridad<E>{ //Vectorquealmacenaloselementos,loshijosdevec[n] //sonvec[2*n+1]yvec[2*n+2].Elpadreesvec[(n1)/2]. Object[]vec; //Nmerodeelementos int num; //Ampliarlacapacidaddelvector protected void ampliar(){ vec=Arrays.copyOf(vec,2*vec.length); } //Restodeoperaciones... }
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 26
Elevacin de un nodo
void elevar(int i){ int k=i;//Posicindelelemento E x=(E)vec[i];//Elemento while(k>0){ int p=(k1)/2;//Posicindelpadre //Sielelementoes>=padre,terminar if(vec[k]>=vec[p])break; //Encasocontrario,intercambiarloconelpadre vec[k]=vec[p]; k=p; } //Colocarelementoenposicinfinal vec[k]=x; }
11 Feb. 2011
27
Descenso de un nodo
void descender(int i){ if(num<2)return; int k=i; //Posicindelelemento E x=(E)vec[i]; //Elemento int lim=(num2)/2; //Posicindelultimonodoconhijos while(k<=lim){ int h=2*k+1;//Posicindelprimerhijo //Escogerelhijomspequeo if(h+1<num&&vec[h]>vec[h+1]){h++;} //Sielelementoesmenorqueelmenorhijo,terminar if(x<=vec[h])break; //Encasocontrario,intercambiarconhijomenor vec[k]=vec[h]; k=h; } vec[k]=x;//Colocarelementoenposicinfinal }
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 28
11 Feb. 2011
29
Ejemplo de insercin
11 Feb. 2011
30
11 Feb. 2011
31
11 Feb. 2011
32
Es posible crear un montculo directamente de un array, sin necesidad de realizar n inserciones: Se hace un recorrido por niveles, del penltimo hacia arriba, descendiendo la raiz de esos subrboles. El orden es O(n) y no se requiere espacio extra. public void crear(Object[]vec){ //Setrabajasobreelvectorproporcionado this.vec=vec; this.num=vec.length; //Recorrernodosporniveles(delltimoal //primero)descendiendosuraiz for(int i=(num2)/2;i>=0;i){ descender(i); } }
11 Feb. 2011
33
La ordenacin por montculos se basa en la posibilidad de crear un montculo directamente sobre el propio array, y del efecto colateral del borrado del mnimo, que (al intercambiarle con el ltimo) lo coloca en la ltima posicin.
Primero se reorganiza un vector desordenado como montculo: Esta operacin tarda O(n). A continuacin se realizan n extracciones del mnimo: O(n log n).
El resultado es un montculo vaco (num = 0), pero en el vector que lo sostena se han depositado los elementos borrados en las posiciones inversas: Se obtiene un vector ordenado de mayor a menor.
11 Feb. 2011
Otros montculos
Los montculos que hemos visto son los montculos binarios. Existen otros tipos de montculos, generalmente basados en representacin enlazada (se sigue manteniendo la propiedad de montculo)
Montculo binomial: La operacin de fusin de montculos es O(log n), en vez de O(n) como en los binarios. Sin embargo, el acceso al mnimo es O(log n) en vez de O(1). Montculo de Fibonacci: Las operaciones de acceso al mnimo, insercin y fusin son O(1) en tiempo amortizado. La operacin de borrado del mnimo es O(log n), tambin en tiempo amortizado. Montculo Min-Max: Cada nodo en nivel par es menor que sus descendientes, y cada nodo en nivel impar es mayor que sus descendientes.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 35
11 Feb. 2011
9 Feb. 2011
36
Un rbol binario de bsqueda (rbol BB) es un rbol binario cuyos nodos almacenan elementos comparables mediante y donde todo nodo cumple la propiedad de ordenacin: Propiedad de ordenacin: Todo nodo es mayor que los nodos de su subrbol izquierdo, y menor que los nodos de su subrbol derecho.
x
<
Elementos menores que x
>
Elementos mayores que x
11 Feb. 2011
37
Ejemplo de rbol BB
11 Feb. 2011
38
Propiedades y operaciones
Un recorrido inorden por el rbol recorre los elementos en orden de menor a mayor. El elemento mnimo es el primer nodo sin hijo izquierdo en un descenso por hijos izquierdos desde la raiz. El elemento mximo es el primer nodo sin hijo derecho en un descenso por hijos derechos desde la raiz. Para buscar un elemento se parte de la raiz y se desciende escogiendo el subrbol izquierdo si el valor buscado es menor que el del nodo o el subrbol derecho si es mayor. Para insertar un elemento se busca en el rbol y se inserta como nodo hoja en el punto donde debera encontrarse. Para borrar un elemento, se adaptan los enlaces si tiene 0 o 1 hijo. Si tiene dos hijos se intercambia con el mximo de su subrbol izquierdo y se borra ese mximo.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 39
11 Feb. 2011
Representacin (Java)
public class ArbolBB<E>{ //ClaseinternaquerepresentaunnodoBB privateclass Nodo<E>{ E elem; //Elemento Nodo<E>izdo,dcho;//Enlaces //Constructor(nodosinenlaces) Nodo(E elem){this.elem=elem;izdo=dcho=null;} } //Nodoraiz Nodo<E>raiz=null; //Restodeoperaciones... }
11 Feb. 2011
40
11 Feb. 2011
41
Insercin
public void add(E elem){ if(raiz==null){raiz=new Nodo(elem);return;} Nodo<E>ant=null; Nodo<E>act=raiz; do { ant=act; act=(elem<act.elem)? act.izdo: act.dcho; }while(act!=null); //Insertarnuevonodo act=newNodo(elem); if(elem<ant.elem){ ant.izdo=act; }else { ant.dcho=act; } }
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 42
Borrado (I)
public void del(E elem){ //Sielelementonoexiste,nohacernada if(get(elem)==null)return; //Bsquedadelnodoaborrar(existe) if(raiz==null){raiz=new Nodo(elem);return;} Nodo<E>ant=null; Nodo<E>act=raiz; while(elem!=act.elem) { ant=act; act=(elem<act.elem)? act.izdo: act.dcho; }while(act!=null); //actapuntaalelementoaborraryantasupadre ...
11 Feb. 2011
43
Borrado (II)
//Sitienedoshijos,lointercambiamoscon //elmximodesusubarbolizquierdo if(act.izdo!=null &&act.dcho!=null){ Nodo<E>tmp=act; ant=act;act=act.izdo; while(act.dcho!=null){ant=act;act=act.dcho;} tmp.elem=act.elem; } //Elnodoaborrarsolotiene0o1hijos Nodo<E>h=(act.izdo!=null)?act.izdo:act.dcho; if(ant==null){ raiz=h; }else { if(ant.izdo=act){ant.izdo=h;}else {ant.dcho=h;} } }
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 44
11 Feb. 2011
45
11 Feb. 2011
46
11 Feb. 2011
47
Es posible extender un ABB para que la operacin de acceso al i-simo menor sea eficiente aadiendo un campo a cada nodo que indique el nmero de elementos del subrbol: 5
4 10
acceso(9)
5
1
0 3 1
7
3
acceso(9-4-1 = 4) 9 acceso(4-1-1 = 2)
1
2
1 1
6
1
10
11 Feb. 2011
48
Utilidad
Un rbol BB podra ser adecuado para representar los TADs Conjunto, Mapa, Diccionario y Lista ordenada:
El acceso por valor (bsqueda) es O(h) La insercin por valor es O(h) El borrado por valor es O(h). El acceso al -simo menor (con la extensin anterior) es O(h). El borrado del i-simo menor es O(h). La fusin es O(n).
Se define arbol equilibrado como aqul que garantiza que su altura es logartmica h O(log n) Desafortunadamente, los rboles BB no son equilibrados (no tiene porqu cumplirse que la altura sea logartmica).
11 Feb. 2011
49
Equilibrado en rboles BB
El que un rbol BB est equilibrado o no depende de la secuencia de inserciones. Desafortunadamente, el insertar elementos en orden provoca caer en el peor caso: Un rbol lineal (altura O(n), proporcional al nmero de elementos) En un rbol lineal todas las operaciones relevantes seran O(n), arruinando la eficiencia. Si los elementos se insertan al azar, se puede demostrar que la altura del rbol BB es, en promedio, logartmica.
11 Feb. 2011
50
6. RBOLES AVL
9 Feb. 2011
51
rboles equilibrados
Los rboles equilibrados son rboles BB que imponen restricciones estructurales para garantizar (o tender a) que su altura sea logartmica. Para ello aaden etapas extra a las operaciones de insercin y borrado (y a veces al acceso) rboles AVL: Imponen que para todo nodo la diferencia de altura entre los subrboles izquierdo y derecho no sea mayor que uno. rboles Rojo-Negro: Los nodos se clasifican como rojos o negros, y se cumple:
Los hijos de un nodo rojo son negros Todo camino de la raiz a una hoja pasa por el mismo nmero de nodos negros.
Splay Trees: Cada vez que se accede a un nodo se eleva en el rbol pasando a ser la raiz (equilibrado promedio)
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 52
11 Feb. 2011
rboles AVL
Los rboles AVL son rboles BB donde todo nodo cumple la propiedad de equilibrado AVL: La altura del subrbol izquierdo y del derecho no se diferencian en ms de uno.
En un rbol AVL el factor de equilibrio de todo nodo es -1, 0 +1. Tras la insercin o borrado de un elemento, slo los ascendientes del nodo pueden sufrir un cambio en su factor de equilibrio, y en todo caso slo en una unidad. Se aade una etapa donde se recorren los ascendientes. Si alguno est desequilibrado (+2 o -2) se vuelve a equilibrar mediante operaciones denominadas rotaciones.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 53
11 Feb. 2011
11 Feb. 2011
54
ltura logartmica
Todo rbol binario con equilibrado AVL tiene altura logartmica Se define rbol de Fibonacci (Fh) como:
F-1 es el rbol vaco. F0 es el rbol con un nico nodo. Fh es el rbol con subrbol izquierdo Fh-2 y derecho Fh-1
11 Feb. 2011
55
Un rbol AVL es un rbol binario de bsqueda (ABB), ampliado con un campo que indica el factor de equilibrio de cada nodo. Las operaciones de acceso son idnticas a las de un ABB. Las operaciones de insercin y borrado se realizan igual que en un ABB, salvo que se aade una etapa posterior de reequilibrado. El reequilibrado recorre los ascendientes del nodo que ha sufrido modificacin, recalculando sus factores de equilibrio y aplicando las rotaciones adecuadas cuando es necesario. El recorrido se detiene al llegar al nodo raiz o cuando el subrbol del nodo actual no haya sufrido cambios en altura respecto a la situacin anterior a la operacin. Es necesario controlar el cambio de altura de los subrboles, dH, a lo largo del recorrido.
11 Feb. 2011
56
Cambios en altura
En insercin (dH > 0), si un hijo (y) incrementa su altura, el padre (x) tambin la incrementa si su factor de equilibrio era -1 o 0 (hijo izquierdo) o bien 0 o +1 (hijo derecho) En borrado (dH < 0), si un hijo (y) decrementa su altura, el padre (x) tambin la decrementa si su factor de equilibrio era -1 (hijo izquierdo) o +1 (hijo derecho)
11 Feb. 2011
57
Rotaciones
Una rotacin es una reestructuracin local de un subrbol BB que mantiene la propiedad de ordenacin.
y x x y
C
z
z y x x y z x y
11 Feb. 2011
58
Rotaciones en AVL
Tras una operacin de insercin o borrado, se recorren los ascendientes, recalculando sus factores de equilibrio y teniendo en cuenta el cambio en altura del subrbol. Es posible que en el recorrido el factor de equilibrio de algn nodo pasa a valer +2 -2 (desequilibrado). En ese caso se aplica una determinada rotacin que restablece el equilbrio del nodo (aunque es posible que cambie la altura del nodo). En un rbol AVL se necesitan 2 tipos de rotaciones (simples y dobles), en un sentido u otro (izquierdas y derechas). Teniendo en cuenta los distintos ajustes de factores de equilibrio y posibles resultados respecto al cambio de altura, existen seis casos a considerar.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 59
11 Feb. 2011
Posibles causas: Borrado en A que decrementa su altura (sin cambiar la del subrbol x) o insercin en C que incrementa su altura (incrementando la de los subarboles y, x). Tras la rotacin el subarbol decrementa en uno su altura.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 60
11 Feb. 2011
Posibles causas: Borrado en A que decrementa su altura (sin cambiar la del subrbol x) Tras la rotacin el subarbol mantiene su altura. Las modificaciones son las mismas que el caso anterior
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 61
11 Feb. 2011
Posibles causas: Borrado en A que decrementa su altura (sin cambiar la del subrbol x) insercin en B C que incrementa su altura y la de los subarboles z, y, x Tras la rotacin el subarbol decrementa en uno su altura.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 62
11 Feb. 2011
Posibles causas: Borrado en C que decrementa su altura (sin cambiar la del subrbol x) o insercin en A que incrementa su altura (incrementando la de los subarboles y, x). Tras la rotacin el subarbol decrementa en uno su altura.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 63
11 Feb. 2011
Posibles causas: Borrado en C que decrementa su altura (sin cambiar la del subrbol x) Tras la rotacin el subarbol mantiene su altura. Las modificaciones son las mismas que el caso anterior.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 64
11 Feb. 2011
Posibles causas: Borrado en D que decrementa su altura (sin cambiar la del subrbol x) insercin en B C que incrementa su altura y la de los subarboles z, y, x Tras la rotacin el subarbol decrementa en uno su altura.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 65
11 Feb. 2011
7. ANLISIS DE EFICIENCIA
9 Feb. 2011
70
Acceso i-simo menor Borrado i-simo menor Insercin por valor Bsqueda Fusin
Nota:
Se supone que los nodos del rbol AVL disponen de un campo extra que almacena el nmero de elementos del subrbol.
11 Feb. 2011
72
Acceso mnimo Borrado mnimo Borrado elemento dada su referencia Insercin por valor Creacin a partir de un array desordenado Fusin
11 Feb. 2011
Acceso por clave Acceso clave i-sima menor Acceso por iterador Borrado por clave Borrado clave i-sima menor Borrado por iterador Insercin por valor
11 Feb. 2011
8. RBOLES B
9 Feb. 2011
75
Motivacin
Los sistemas de almacenamiento masivo suelen tener un tiempo de acceso mucho mayor que el tiempo de transferencia: La localizacin de un elemento es mucho ms costosa que la lectura secuencial de datos, una vez localizados. Esto se aplica sobre todo a discos duros, pero tambin, aunque en menor medida, a memorias de estado slido (flash) e incluso a memorias voltiles. Esto supone un problema para estructuras enlazadas, como los rboles AVL, donde las operaciones acceden a bastantes nodos de pequeo tamao. Para grandes volmenes de datos, sera conveniente reducir el nmero de accesos, a cambio de que esos accesos contuvieran elementos de mayor tamao.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 76
11 Feb. 2011
Caso prctico
El SACYL trabaja con una base de datos de unas 2.500.000 tarjetas sanitarias, ocupando cada una aprox. 1 Kb de datos. Si se almacenan en un rbol AVL, su altura (rbol de Fibonacci) sera:
Lo que supone entre 25-31 accesos a disco para cualquier bsqueda de un elemento. En cambio, si se almacenan en un rbol B de orden 1.000 (aproximadamente 1 Mb por nodo) tendra altura 3, o 2 con una ocupacin media del 80%. Slo se necesitaran 1 2 accesos a disco (la raiz reside en memoria) para cada bsqueda. El orden para ambos casos es logartmico, pero si el tiempo de acceso es dominante, la segunda solucin sera 10-30 veces ms rapida.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 77
11 Feb. 2011
rboles (a,b)
Los rboles (a,b) son rboles generales (no binarios) donde cada nodo interno puede tener un nmero de hijos, m+1, en el rango [a,b]. Cada nodo almacena m claves (elementos comparables por ), ordenadas de menor a mayor, que sirven para que se pueda usar como un rbol de bsqueda. El contenido tpico de un nodo consiste en:
Un entero, m [a-1,b-1], que indica el nmero de claves almacenadas. Un vector, c, de capacidad b-1, que almacena las m claves. Un vector, e, de capacidad b, que almacena los m+1 enlaces a hijos.
<x
11 Feb. 2011
> x, < y
> y, < z
>z
78
rboles B
Un rbol B (Bayer-McCreight 1972) de orden d es un rbol (d+1,2d+1) con las propiedades adicionales siguientes:
La raiz puede tener cualquier nmero de claves. Todas las hojas se encuentran a la misma profundidad, h.
La segunda propiedad garantiza que un rbol B es un rbol equilibrado: Su altura es logartmica respecto al nmero de claves almacenadas. Ejemplo: Un rbol B de orden 1 es un rbol (2,3): Cada nodo puede contener 1 o 2 claves y tener 2 o 3 hijos.
5
h=2
1 2
11 Feb. 2011
3 4 6
7 10
8 9
11
79
Reestructuraciones
2d+1 Divisin d d
d+1
d-1
Transferencia
d-1
Fusin
2d
11 Feb. 2011
80
Bsqueda e Insercin
Bsqueda:
Se desciende desde la raiz hasta el nodo que contenga el elemento (o bien llegar a una hoja que no lo contenga). En cada nodo se busca en el array de claves (bsqueda secuencial o binaria). Si no se encuentra, se pasa al hijo asociado a la primera clave mayor que el valor buscado (o el ltimo hijo si el valor buscado es mayor que todas las claves).
Insercin:
Se desciende (igual que en la bsqueda) hasta el nodo hoja que debera contener el elemento. Se inserta en la posicin adecuada del array de claves. Si con ello se supera el nmero mximo de claves (2d), el nodo se divide, transfiriendo su clave en posicin media al padre. Es posible que el padre deba dividirse a su vez, y as con todos los ascendientes.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 81
11 Feb. 2011
Borrado
Se desciende desde la raiz hasta el nodo que contenga el elemento a borrar. Se intercambia con el mximo del hijo izquierdo o con el mnimo del hijo derecho (se elige el hijo con ms claves). Se pasa a borrar el elemento en el hijo (al final el borrado se produce en un nodo hoja)
Se elimina del array de claves (desplazamiento). Si con ello el nmero de claves es d-1:
Se intenta una transferencia con el hermano izquierdo o derecho, el que contenga ms claves. Si no es posible (ambos tienen d hijos o no existen), se produce una fusin con el hermano izquierdo (o el derecho, si no existe). La fusin toma un elemento del padre, por lo que ste a su vez puede necesitar transferencias o fusiones (y as con los ascendientes)
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 82
11 Feb. 2011
13
21
35
1 3
7 8 10 12
15 19 20
24 26 30
37 40
11 Feb. 2011
83
5 2
13
21
35
1 3
7 8 10 12
15 19 20
24 26 30
37 40
11 Feb. 2011
84
13
21
35
1 2 3
7 8 10 12
15 19 20
24 26 30
37 40
11 Feb. 2011
85
13
21
35
1 2 3
7 8 10 12
15 19 20
24 26 30
37 40
11 Feb. 2011
86
13
21
35
11 1 2 3 7 8 10 12 15 19 20 24 26 30 37 40
11 Feb. 2011
87
13
21
35
1 2 3
7 8 10 11 12
15 19 20
24 26 30
37 40
11 Feb. 2011
88
Se crea un nuevo nodo y se traslada la mitad derecha de los elementos a l. El elemento en posicin media (10), junto con el enlace al nuevo nodo, se enva al padre para su insercin
13
21
35
10 1 2 3 7 8 11 12 15 19 20 24 26 30 37 40
11 Feb. 2011
89
10
13
21
35
1 2 3
7 8
11 12
15 19 20
24 26 30
37 40
11 Feb. 2011
90
Se crea un nuevo nodo y se traslada la mitad derecha de los elementos a l. El elemento en posicin media (13), junto con el enlace al nuevo nodo, se enva al padre para su insercin
13 5 10 21 35
1 2 3
7 8
11 12
15 19 20
24 26 30
37 40
11 Feb. 2011
91
10
21
35
1 2 3
7 8
11 12
15 19 20
24 26 30
37 40
Como no existe padre, se crea un nuevo nodo raiz que contiene nicamente esa clave
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 92
11 Feb. 2011
10
21
35
1 2 3
7 8
11 12
15 19 20
24 26 30
37 40
11 Feb. 2011
93
10
21
30
1 2 3
7 8
11 12
15 19 20
24 26 35
37 40
Es un nodo interno. Se intercambia con el mximo de su hijo izquierdo y se pasa a borrar esa clave.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 94
11 Feb. 2011
10
21
30
1 2 3
7 8
11 12
15 19 20
24 26
37 40
Se borra el elemento.
11 Feb. 2011
95
Borrado Transferencia
13
10
21
30
1 2 3
7 8
11 12
15 19 20
24 26
37 40
11 Feb. 2011
96
Borrado Transferencia
13
10
21
35
1 2 3
11 12
15 19 20
26 30
37 40
Se borra la clave. El nodo pasa a tener menos claves que las permitidas (2).
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 97
11 Feb. 2011
Borrado Transferencia
13
5 3
10
21
35
1 2
11 12
15 19 20
26 30
37 40
Se comprueba el hermano con ms claves (el izquierdo). Se transfiere su ltima clave al padre y la del padre al nodo.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 98
11 Feb. 2011
Borrado Transferencia
13
10
21
35
1 2
5 7
11 12
15 19 20
26 30
37 40
11 Feb. 2011
99
Borrado Fusin
13
10
21
35
1 2
5 7
11 12
15 19 20
26 30
37 40
11 Feb. 2011
100
Borrado Fusin
13
10
21
35
1 2
5 7
12
15 19 20
26 30
37 40
Al borrar la clave pasa a tener menos claves que las permitidas. Su nico hermano (izquierdo) no puede transferir claves.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 101
11 Feb. 2011
Borrado Fusin
13
21
35
1 2
5 7 10 12
15 19 20
26 30
37 40
Se fusionan el nodo con su hermano izquierdo, tomando una clave extra del padre. El padre pasa a tener una sola clave, y su hermano derecho no puede transferir.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 102
11 Feb. 2011
Borrado Fusin
13
21
35
1 2
5 7 10 12
15 19 20
26 30
37 40
Se fusionan los nodos, tomando la nica clave del raiz, que queda vaco.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa 103
11 Feb. 2011
Borrado Fusin
13
21
35
1 2
5 7 10 12
15 19 20
26 30
37 40
11 Feb. 2011
104
Usos y Variantes
Gestores de Bases de Datos. Sistemas de Ficheros: NTFS (Windows), HFS+ (Apple), btrfs, Ext4 (Linux) rboles con prerecorrido: Antes de insertar se realiza una bsqueda
que divide todos los nodos llenos. El nmero mximo de claves es 2d+1.
Variantes principales:
rboles B+: Slo las hojas contienen elementos, los nodos internos
contienen claves para dirigir la bsqueda (esas claves se encuentran tambin en los nodos hoja). Los nodos hoja forman una lista doblemente enlazada.
11 Feb. 2011
105