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

Estructuras de Datos y Algoritmos Tema 4: rboles

Departamento de Informtica Universidad de Valladolid

Curso 2011-12

Grado en Ingeniera Informtica Grado en Ingeniera Informtica de Sistemas

10 Sep. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

1. DEFINICIONES Y PROPIEDADES

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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.

La profundidad de la raiz es 0 La profundidad de un nodo es igual a la profundidad de su padre + 1 3 0 0


Altura

0 0 1 0
Profundidad

Nivel 0

1 2

1 2 3

Nivel 1

Nivel 2

Nivel 3

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Recorrido de rboles (II)


Preorden: Postorden: Inorden: Por Niveles:

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


e f b a c d

Parentizado sobre subrboles:


Preorden: Postorden: Inorden: Por Niveles:

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Interludio en Haskell (I)


Unarbolesunnodoquecontieneunelemento, detipogenricoa,yunalistaderboles data Arbola=Nodoa[Arbola] Arboldetest test::ArbolChar test=Nodo'a'[(Nodo'b'[]),(Nodo'c'[(Nodo'e'[]), (Nodo'f'[(Nodo'g'[])])]),(Nodo'd'[])] Comprobacindesiunnodoesunahoja esHoja::Arbola>Bool esHoja(Nodo_[])=True esHoja_=False Valormximodeunalista maxlis::(Orda)=>[a]>a maxlislis=foldl1 max lis

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

10

Interludio en Haskell (II)


Alturadeunrbol altura::Arbola>Int altura(Nodo_[])=0 altura(Nodo_lis)=1+maxlis(map alturalis) Convierteunalistadelistasenunalista,concatenndolas aplanar::[[a]]>[a] aplanar[]=[] aplanarlis=foldl1 (++)lis Recorridoenpreorden preorden::Arbola>[a] preorden(Nodox[])=[x] preorden(Nodoxlis)=x: aplanar(map preordenlis)

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

11

Interludio en Haskell (III)


Recorridoenpostorden postorden::Arbola>[a] postorden(Nodox[])=[x] postorden(Nodoxlis)=(aplanar(map postordenlis))++ [x] Recorridoeninorden inorden::Arbola>[a] inorden(Nodox[])=[x] inorden(Nodox(a1:res))=(inordena1)++ [x]++ (aplanar(map inordenres)) Recorridoporniveles niveles::Arbola>[a] nivelesa=nivcol[a]where auxiliar,procesacola nivcol[]=[] nivcol((Nodoxlis):res)=x: nivcol(res++ lis)
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 12

2. REPRESENTACIONES DEL TAD DIRECTORIO

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

14

Padre - primer hijo - hermano

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

15

3. RBOLES BINARIOS

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

17

Variantes de rboles binarios

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

18

rboles completos (I)

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

rboles completos (II)

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

20

4. MONTCULOS (BINARIOS)

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

22

Ejemplo

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

23

Propiedades del Montculo


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

Un montculo es una representacin extremadamente til para el TAD Cola de Prioridad:


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

Existen otras operaciones para las que no se comporta bien:

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Acceso al mnimo e insercin


public E min(){return (E)vec[0];} public void add(E elem){ //Ampliararraysilleno if(num>=vec.length)ampliar(); //Ponerelelementoalfinal num++; vec[num1]=elem; //Elevarelelemento elevar(num1); }

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

29

Ejemplo de insercin

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

30

Borrado del mnimo


public E delMin(){ Ex=(E)vec[0]; //Moverltimoaraiz(elementoaborrar) vec[0]=vec[num1]; vec[num1]=x; num; //Descenderelnuevoelementoraiz descender(0); return x; }

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

31

Ejemplo de borrado del mnimo

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

32

Creacin a partir de array

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

33

Ordenacin por montculos

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.

Con un montculo de mximos se obtendra un vector ordenado de menor a mayor.

El tiempo es O(n log n) y el espacio O(1).


Csar Vaca Rodrguez, Dpto. de Informtica, UVa 34

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

5. RBOLES BINARIOS DE BSQUEDA

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

36

rbol Binario de Bsqueda

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

37

Ejemplo de rbol BB

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

40

Acceso por valor (bsqueda)


public E get(E elem){ if(raiz==null)return null; Nodo<E>p=raiz; do { if(elem==p.elem)break; p=(elem<p.elem)? p.izdo: p.dcho; }while(p!=null); return (p==null)?null :p.elem; }

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Ejemplo de borrado 0 hijos

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

45

Ejemplo de borrado 1 hijos

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

46

Ejemplo de borrado 2 hijos

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

47

Extensin: Acceso por ndice

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

2 - 1 a la izquierda: El nodo 9 es el buscado

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

En las medidas de eficiencia h es la altura del rbol.

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

50

6. RBOLES AVL

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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.

Se define factor de equilibrio de un nodo como: Fe(nodo) = altura(derecho) altura(izquierdo)

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

Ejemplo de rbol AVL

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

El rbol Fh tiene altura h y nmero de elementos:


F5

Un rbol de fibonacci es el rbol AVL con mayor desequilibrio

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

55

Operaciones en rbol AVL

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Rotacin 2|1 (Simple derecha)

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

Rotacin 2|0 (Simple derecha)

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

Rotacin 2|-1 (Doble derecha)

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

Rotacin -2|-1 (Simple izquierda)

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

Rotacin -2|0 (Simple izquierda)

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

Rotacin -2|1 (Doble izquierda)

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

Implementacin en Haskell (I)


Nodoeixd i,d:Subarbolesizquierdoyderecho x:elementoalmacenado e:Factordeequilibrio=altura(d)altura(i) data AVLa=Nulo |Nodo Int(AVLa)a(AVLa) Elementomnimo minimo::AVLa>a minimo(Nodo_Nulox_)=x minimo(Nodo_i__)=minimoi Bsqueda busqueda::AVLa>a>Bool busquedaNulo_=False busqueda(Nodo_iyd)x |x==y=True |x<y=busquedaix |x>y=busquedadx
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 66

Implementacin en Haskell (II)


Equilibraunsubarbolenelculelnodoraizestdesequilibrado (+2o2)aplicandolarotacinadecuada.Devuelveunparconel subarbolequilibradoylamodificacindelaalturarespectoalsubarbol anterior(seacumulaalparmetropquetomaencuentamodificaciones dealturadeoperacionesanteriores). equil::AVLa>Int>(AVLa,Int) equil(Nodo2ax(Nodo1byc))p= (Nodo0(Nodo0axb)yc,p1) equil(Nodo2ax(Nodo0byc))p= (Nodo(1)(Nodo1axb)yc,p) equil(Nodo2ax(Nodo(1)(Nodoebzc)yd))p= (Nodo0(Nodo(min(e)0)axb)z(Nodo(max(e)0)cyd),p1) equil(Nodo(2)(Nodo(1)ayb)xc)p= (Nodo0ay(Nodo0bxc),p1) equil(Nodo(2)(Nodo0ayb)xc)p= (Nodo1ay(Nodo(1)bxc),p) equil(Nodo(2)(Nodo1ay(Nodoebzc))xd)p= (Nodo0(Nodo(min(e)0)ayb)z(Nodo(max(e)0)cxd),p1) equilap=(a,p) Casoenquenoestdesequilibrado
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 67

Implementacin en Haskell (III)


insercion insertar::(Orda)=>AVLa>a>AVLa insertarax=fst(insauxax) Insertaenunsubarbolydevuelvelamodificacionenaltura (+1,0)delsubarbolresultante insaux::(Orda)=>AVLa>a>(AVLa,Int) insauxNulox=(Nodo0NuloxNulo,1) insauxa@(Nodoeiyd)x | x<y=let (i',k)= insauxixin equil(Nodo(ek)i'yd)(min(k*(1e))1) | x>y=let (d',k)= insauxdxin equil(Nodo(e+k)iyd')(min(k*(1+e))1) | x==y=(a,0) Nota:Envioleta aparecenfrmulasderivadasdelos diagramasdelatransparencia57
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 68

Implementacin en Haskell (IV)


borrado borrar::(Orda)=>AVLa>a>AVLa borrarax=fst(borauxax)where borauxNulo_=(Nulo,0) boraux(Nodoeiyd)x | x<y=let (i',k)= borauxixin equil(Nodo(ek)i'yd)(min(k*e)0) | x>y=let (d',k)= borauxdxin equil(Nodo(e+k)iyd')(min(k*e)0) | x==y=case (i,d)of (Nulo,Nulo)> (Nulo,1) (Nulo,_)> (d,1) (_,Nulo)> (i,1) (_,_)> equil(Nodo(ek)i'zd)kwhere z=maximoi (i',k)=borauxiz
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 69

7. ANLISIS DE EFICIENCIA

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

70

Eficiencia TADs Conjunto/Mapa


rbol bin. bsq. (caso promedio) rbol bin. bsq. (peor caso) rbol AVL Contigua ordenada Pertenencia (conjunto) Acceso por clave (mapa) Borrado (por valor/clave) Insercin (por valor) Iterar todos los elementos Unin (ambos tamao n)
11 Feb. 2011

O(log n) O(n) O(n) O(n) O(n)

O(n) O(n) O(n) O(n)

O(log n) O(log n) O(log n) O(n)

O(log n) O(log n) O(log n) O(n)

O(n log n) O(n log n) O(n log n)


71

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

Eficiencia TAD Lista Ordenada


rbol AVL Contigua ordenada

Acceso i-simo menor Borrado i-simo menor Insercin por valor Bsqueda Fusin

O(1) O(n) O(n)

O(log n) O(log n) O(log n)

Nota:
Se supone que los nodos del rbol AVL disponen de un campo extra que almacena el nmero de elementos del subrbol.

O(log n) O(log n) O(n) O(n)

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

72

Eficiencia TAD Cola de Prioridad


Arbol AVL Montculo Contigua ordenada Contigua

Acceso mnimo Borrado mnimo Borrado elemento dada su referencia Insercin por valor Creacin a partir de un array desordenado Fusin
11 Feb. 2011

O(1) O(1) O(n) O(n) O(n log n) O(n log n)

O(1) O(n) O(n) O(1) --O(n)

O(log n) O(log n) O(log n) O(log n) O(n log n) O(n log n)

O(1) O(log n) O(log n) O(log n) O(n) O(n)


73

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

Eficiencia TAD Diccionario


Arbol AVL Contigua ordenada Enlazada ordenada

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

O(log n) O(1) O(1) O(n) O(n) O(n) O(n)

O(n) O(n) O(1) O(n) O(n) O(1) O(n)

O(log n) O(log n) O(1) O(log n) O(log n) O(log n) O(log n)


74

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

8. RBOLES B

9 Feb. 2011

Csar Vaca Rodrguez, Dpto.Informtica, UVa

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.

Propiedad de ordenacin: Nodo e[i] almacena claves menores que c[i] x y z

<x
11 Feb. 2011

> x, < y

> y, < z

>z
78

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

Reestructuraciones
2d+1 Divisin d d

d+1

d-1

Transferencia

d-1

Fusin

2d

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Borrado en nodo interno:

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)

Borrado en 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

Insercin Sin reestructuracin

Insercin del valor 2 en rbol B de orden 2 (rbol (3,5))

13

21

35

1 3

7 8 10 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

83

Insercin Sin reestructuracin

Se busca el nodo hoja donde debe encontrarse el elemento

5 2

13

21

35

1 3

7 8 10 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

84

Insercin Sin reestructuracin

Se inserta en orden en la hoja (desplazamiento)

13

21

35

1 2 3

7 8 10 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

85

Insercin Divisin de nodos

Insercin del valor 11

13

21

35

1 2 3

7 8 10 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

86

Insercin Divisin de nodos

Se busca el nodo hoja donde debe encontrarse el elemento

13

21

35

11 1 2 3 7 8 10 12 15 19 20 24 26 30 37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

87

Insercin Divisin de nodos

Se inserta en el nodo. En este caso el nodo sobrepasa el lmite de claves (4).

13

21

35

1 2 3

7 8 10 11 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

88

Insercin Divisin de nodos

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

89

Insercin Divisin de nodos

Se inserta en el nodo padre. Se sobrepasa el lmite de claves permitidas (4)

10

13

21

35

1 2 3

7 8

11 12

15 19 20

24 26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

90

Insercin Divisin de nodos

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

91

Insercin Divisin de nodos


13

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

Borrado Sin reestructuracin


13

10

21

35

1 2 3

7 8

11 12

15 19 20

24 26 30

37 40

Borrado de la clave 35. Se busca el nodo donde est el elemento.

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

93

Borrado Sin reestructuracin


13

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

Borrado Sin reestructuracin


13

10

21

30

1 2 3

7 8

11 12

15 19 20

24 26

37 40

Se borra el elemento.

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

95

Borrado Transferencia
13

10

21

30

1 2 3

7 8

11 12

15 19 20

24 26

37 40

Borrado de la clave 8. Se busca el nodo.

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

99

Borrado Fusin
13

10

21

35

1 2

5 7

11 12

15 19 20

26 30

37 40

Borrado del elemento con clave 11. Se busca el nodo.

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

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

Se elimina el nodo raiz.

13

21

35

1 2

5 7 10 12

15 19 20

26 30

37 40

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

104

Usos y Variantes

Los rboles B y sus variantes se usan en:


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.

rboles B*: El nmero mnimo de claves es 2/3 de la capacidad. Se


fusionan 3 nodos en 2, y se dividen 2 nodos en 3.

11 Feb. 2011

Csar Vaca Rodrguez, Dpto. de Informtica, UVa

105

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