Tema 4: rboles
Departamento de Informtica
Universidad de Valladolid
Curso 2011-12
10 Sep. 2011
1. DEFINICIONES Y
PROPIEDADES
9 Feb. 2011
Definiciones (I)
11 Feb. 2011
Definiciones (II)
11 Feb. 2011
a
b
c
e
d
f
g
c
e
d
f
g
Altura
11 Feb. 2011
3
0
2
0
0
1
0
Profundidad
La profundidad de la raiz es 0
2
0
Altura
11 Feb. 2011
Nivel 0
0
0
1
0
1
2
Profundidad
Nivel 1
Nivel 2
Nivel 3
Recorrido de rboles
11 Feb. 2011
Preorden:
a,b,c,e,f,g,d
Postorden:
b,e,g,f,c,d,a
Inorden:
b,a,e,c,g,f,d
Por Niveles:
a,b,c,d,e,f,g
a
b
Preorden:
Postorden:
Inorden:
Por Niveles:
(a) (b c d) (e f) (g)
11 Feb. 2011
Expresiones matemticas
*
1
+
^
3
11 Feb. 2011
2
4
Serecorreelarbolenpostorden:
Siesunoperando,seinsertaenpila
Siesunoperador:
Seextraendosoperandos
Seaplicaeloperador
Seinsertaenpilaelresultado
Alfinal,lapiladebecontenerun
nicovalor,elresultado.
Csar Vaca Rodrguez, Dpto. de Informtica, UVa
11 Feb. 2011
10
11 Feb. 2011
11
12
2. REPRESENTACIONES
DEL TAD DIRECTORIO
9 Feb. 2011
13
Representaciones
11 Feb. 2011
14
11 Feb. 2011
15
3. RBOLES BINARIOS
9 Feb. 2011
16
rboles binarios
a
c
11 Feb. 2011
f
g
17
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
a
b
d
11 Feb. 2011
a
b
c
e
No completo,
indistinguibles
c
e
b
c
f
19
11 Feb. 2011
20
4. MONTCULOS (BINARIOS)
9 Feb. 2011
21
Montculo
11 Feb. 2011
22
Ejemplo
11 Feb. 2011
23
11 Feb. 2011
24
Utilidad
11 Feb. 2011
25
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
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
28
11 Feb. 2011
29
Ejemplo de insercin
11 Feb. 2011
30
11 Feb. 2011
31
11 Feb. 2011
32
11 Feb. 2011
33
11 Feb. 2011
34
Otros montculos
11 Feb. 2011
35
5. RBOLES BINARIOS DE
BSQUEDA
9 Feb. 2011
36
11 Feb. 2011
<
>
Elementos
menores que x
Elementos
mayores que x
37
Ejemplo de rbol BB
11 Feb. 2011
38
Propiedades y operaciones
11 Feb. 2011
39
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
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
44
11 Feb. 2011
45
11 Feb. 2011
46
11 Feb. 2011
47
10
acceso(9)
5
4
0
6
1
11 Feb. 2011
2
3
acceso(9-4-1 = 4)
acceso(4-1-1 = 2)
1
10
2 - 1 a la izquierda:
El nodo 9 es el buscado
48
Utilidad
La fusin es O(n).
11 Feb. 2011
49
Equilibrado en rboles BB
11 Feb. 2011
50
6. RBOLES AVL
9 Feb. 2011
51
rboles equilibrados
11 Feb. 2011
52
rboles AVL
11 Feb. 2011
53
11 Feb. 2011
54
ltura logartmica
11 Feb. 2011
55
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
y
x
C
z
z
y
y
x
11 Feb. 2011
x
z
58
Rotaciones en AVL
11 Feb. 2011
59
11 Feb. 2011
60
11 Feb. 2011
61
11 Feb. 2011
62
11 Feb. 2011
63
11 Feb. 2011
64
11 Feb. 2011
65
66
67
68
69
7. ANLISIS DE EFICIENCIA
9 Feb. 2011
70
Contigua
ordenada
rbol AVL
Pertenencia (conjunto)
Acceso por clave (mapa)
O(log n)
O(n)
O(log n)
O(log n)
O(n)
O(n)
O(log n)
O(log n)
O(n)
O(n)
O(log n)
O(log n)
O(n)
O(n)
O(n)
O(n)
O(n)
11 Feb. 2011
71
rbol AVL
Contigua
ordenada
O(1)
O(log n)
O(n)
O(log n)
O(n)
O(log n)
Bsqueda
Fusin
11 Feb. 2011
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)
72
Contigua
ordenada
Contigua
Arbol AVL
Montculo
Acceso mnimo
O(1)
O(1)
O(log n)
O(1)
Borrado mnimo
O(1)
O(n)
O(log n)
O(log n)
Borrado elemento
dada su referencia
O(n)
O(n)
O(log n)
O(log n)
O(n)
O(1)
O(log n)
O(log n)
Creacin a partir de un
array desordenado
O(n log n)
---
O(n log n)
O(n)
Fusin
O(n log n)
O(n)
O(n log n)
O(n)
11 Feb. 2011
73
Contigua
ordenada
Enlazada
ordenada
Arbol AVL
O(log n)
O(n)
O(log n)
O(1)
O(n)
O(log n)
O(1)
O(1)
O(1)
O(n)
O(n)
O(log n)
O(n)
O(n)
O(log n)
O(n)
O(1)
O(log n)
O(n)
O(n)
O(log n)
11 Feb. 2011
74
8. RBOLES B
9 Feb. 2011
75
Motivacin
11 Feb. 2011
76
Caso prctico
11 Feb. 2011
77
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:
<x
11 Feb. 2011
> x, < y
> y, < z
>z
78
rboles B
h=2
1 2
11 Feb. 2011
7 10
3
4
8 9
11
79
Reestructuraciones
2d+1
d+1
11 Feb. 2011
Divisin
d-1
d-1
Transferencia
Fusin
2d
80
Bsqueda e Insercin
Bsqueda:
Insercin:
11 Feb. 2011
81
Borrado
11 Feb. 2011
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
1 3
11 Feb. 2011
7 8 10 12
13
21
15 19 20
35
24 26 30
37 40
83
13
21
35
1 3
11 Feb. 2011
7 8 10 12
15 19 20
24 26 30
37 40
84
1 2 3
11 Feb. 2011
7 8 10 12
13
21
15 19 20
35
24 26 30
37 40
85
1 2 3
11 Feb. 2011
7 8 10 12
13
21
15 19 20
35
24 26 30
37 40
86
13
21
35
11
1 2 3
11 Feb. 2011
7 8 10 12
15 19 20
24 26 30
37 40
87
1 2 3
11 Feb. 2011
7 8 10 11 12
13
21
15 19 20
35
24 26 30
37 40
88
13
21
35
10
1 2 3
11 Feb. 2011
7 8
11 12
15 19 20
24 26 30
37 40
89
1 2 3
11 Feb. 2011
7 8
11 12
10
13
21
35
15 19 20
24 26 30
37 40
90
1 2 3
11 Feb. 2011
7 8
21
10
11 12
15 19 20
35
24 26 30
37 40
91
1 2 3
7 8
21
10
11 12
15 19 20
35
24 26 30
37 40
11 Feb. 2011
92
1 2 3
7 8
21
10
11 12
15 19 20
35
24 26 30
37 40
11 Feb. 2011
93
1 2 3
7 8
21
10
11 12
15 19 20
30
24 26 35
37 40
11 Feb. 2011
94
1 2 3
21
10
7 8
11 12
15 19 20
30
24 26
37 40
Se borra el elemento.
11 Feb. 2011
95
Borrado Transferencia
13
1 2 3
7 8
21
10
11 12
15 19 20
30
24 26
37 40
11 Feb. 2011
96
Borrado Transferencia
13
1 2 3
21
10
11 12
15 19 20
35
26 30
37 40
11 Feb. 2011
97
Borrado Transferencia
13
21
10
35
1 2
11 12
15 19 20
26 30
37 40
11 Feb. 2011
98
Borrado Transferencia
13
1 2
11 Feb. 2011
5 7
21
10
11 12
15 19 20
35
26 30
37 40
99
Borrado Fusin
13
1 2
5 7
21
10
11 12
15 19 20
35
26 30
37 40
11 Feb. 2011
100
Borrado Fusin
13
1 2
5 7
21
10
12
15 19 20
35
26 30
37 40
11 Feb. 2011
101
Borrado Fusin
13
1 2
5 7 10 12
21
15 19 20
35
26 30
37 40
11 Feb. 2011
102
Borrado Fusin
1 2
5 7 10 12
13
21
15 19 20
35
26 30
37 40
Se fusionan los nodos, tomando la nica clave del raiz, que queda
vaco.
11 Feb. 2011
103
Borrado Fusin
1 2
11 Feb. 2011
5 7 10 12
13
21
15 19 20
35
26 30
37 40
104
Usos y Variantes
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