Upload
elizabeth-chavez
View
51
Download
0
Embed Size (px)
Citation preview
rboles
Carlos Delgado Kloos M Carmen Fernndez Panadero Raquel M. Crespo Garca Ingeniera Telemtica Univ. Carlos III de [email protected] Java: rboles / 1
ndice ConceptoDefinicin no recursiva Definicin recursiva Ejemplos
ImplementacinBasada en secuencias Basada en estructuras enlazadasOperaciones bsicas Recorridos
TerminologaConceptos bsicos Propiedades
Casos especialesrboles de bsqueda binarios Montculos binariosJava: rboles / 2
Cita "The structure of concepts is formally called a
hierarchy and since ancient times has been a basic structure for all western knowledge. Kingdoms, empires, churches, armies have all been structured into hierarchies. Tables of contents of reference material are so structured, mechanical assemblies, computer software, all scientific and technical knowledge is so structured..." -- Robert M. Pirsig: Zen and the Art of Motorcycle [email protected] Java: rboles / 3
rboles
Qu son?. Caractersticas
Un rbol es una estructura de datos no lineal que almacena los elementos jerrquicamente Se puede definir de dos formas:Definicin no-recursiva Definicin recursivaf T1 b g i
ae
T2
j k
Definicin [email protected] rboles 4
Definicin no recursivaUn rbol consiste en un conjunto de nodos y un conjunto de aristas, de forma que:Se distingue un nodo llamado raz A cada nodo h, excepto la raz, le llega una arista de otro nodo p (p padre de h, h uno de los hijos de p) Para cada nodo hay un camino (secuencia de aristas) nico desde la [email protected] Java: rboles / 5
EjemploRaz (sin padre) El padre de h Un hijo de p
p h
hermano de h
Hojas Hojas (sin (sin hijos) hijos)[email protected]
Hojas Hojas (sin(sin hijos) hijos)Java: rboles / 6
EjemploRaz (sin padre) El padre de h Un hijo de p
p h
hermano de h
Hojas Hojas (sin (sin hijos) hijos)[email protected]
Hojas (sin(sin hijos) hijos)Java: rboles / 7
rboles
Definicin recursiva
a
b
c
d
e
f
g
h
i
j
k
Java: rboles/
8
rboles
Definicin recursiva
a
b
c
d
e
f
g
h
i
j
k
Java: rboles/
9
rboles
Definicin recursiva
a
b
c
d
e
f
g
h
i
j
k
Java: rboles/
10
rboles
Definicin recursiva
a
b
c
d
e
f
g
h
i
j
k
Java: rboles/
11
rboles
Definicin recursiva
a
b
c
d
e
f
g
h
i
j
k
Java: rboles/
12
Definicin recursiva (1)Un rbol esUn nodo o un nodo y subrboles conectados con el nodo por medio de una arista a su raz
No incluye al rbol [email protected] Java: rboles / 13
Definicin recursiva (2)Un rbol esvaco o un nodo y cero o ms subrboles no vacos conectados con el nodo por medio de una arista a su raz
Java: rboles /
14
EjemplosSistema de ficheros Estructura de un libro o de un documento rbol de decisin Expresiones aritmticas
Java: rboles /
15
EjemploExpresiones
()
() ()
() ()
()
(()(()())())[email protected] Java: rboles/ 16
TerminologaUn nodo es externo, si no tiene hijos (es hoja) Un nodo es interno, si tiene uno o ms hijos Un nodo es ascendiente de otro, si es padre de l o ascendiente de su padre. Un nodo es descendiente de otro, si este es ascendiente del primero Los descendientes de un nodo determinan un subrbol en el que ese nodo hace el papel de [email protected] Java: rboles / 17
TerminologaUn camino de un nodo a otro, es una secuencia de aristas consecutivas que llevan del primero al segundo.Su longitud es el nmero de aristas que tiene.
La profundidad de un nodo es la longitud del camino de la raz a ese nodo. La altura de un rbol es la profundidad del nodo ms profundo. El tamao de un rbol es el nmero de nodos que [email protected] Java: rboles / 18
Ejemploab f g c
Terminologa y propiedadesNodo Altura Profundidad Tamao Interno / Externo Interno Interno
d h i
e j k
a b
3 1
0 1
11 3
cd e f
01 2 0
11 1 2
12 4 1
ExternoInterno Interno Externo Externo Externo Externo Interno Externo
Tamao del rbol: 11 Altura del rbol: 3
gh i j k
00 0 1 0
22 2 2 3
11 1 2 1Java: Trees /
19
Terminologarbol ordenado
a b c c
ab
Un rbol es ordenado, si para cada nodo existe un orden lineal para todos sus [email protected] Java: Trees / 20
Terminologarbol binario
Un rbol binario es un rbol ordenado, en el que cada nodo tiene 0, 1 2 hijos (el hijo izquierdo y el derecho).
Java: rboles /
21
Algoritmos bsicosTamao (nmero de nodos) Profundidad de un nodo Altura RecorridosEuler Pre-, in- y post-orden
Suponemos rboles binarios para
Java: rboles /
22
ImplementacionesBasada en estructura enlazada Basada en secuencia
Java: rboles /
23
Implementacin basada en enlaces
1
24 5 6
37
Java: rboles /
24
Implementacin basada en secuencia12 4 1 5 2 3 4 6 5 6 3p(raiz)=1 p(x.izq)=2*p(x) p(x.der)=2*p(x)+1
7 7Java: rboles / 25
Clase rbol binariopublic class BTree { protected BNode root; BTree() { root = null; } BTree(Object info){ root = new Bnode(info); }[email protected] Java: rboles/ 26
Clase rbol binariopublic int size() { int size = 0; if (root != null) size=root.size(); return size; } public int height(){ int h = -1; if (root != null) h=root.height(); return h; }
Java: rboles/
27
... Clase rbol binariopublic void preorder() { if (root!=null) root.preorder(); } public void inorder() { if (root!=null) root.inorder(); } public void postorder() { if (root!=null) root.postorder(); } }[email protected] Java: rboles/ 28
Clase nodo binario...class BNode { private Object info; private BNode left; private BNode right; BNode() { this(null); } BNode(Object info) { this(info,null,null); } BNode(Object info, BNode l, BNode r) { this.info=info; left=l; right=r; }[email protected] Java: Trees /
29
... Clase nodo binario...int size (){...;} int height (){...;} void preorder (){...;} void inorder (){...;} void postorder (){...;} }
Java: rboles/
30
Clase BNode: Sizeint size (){ int size = 1; if (left != null) size += left.size(); if (right != null) size += right.size(); return size; }[email protected] Java: rboles/ 31
Clase BNode: Heightint height() { int hl = -1; int hr = -1; if (left !=null) hl = left.height(); if (right !=null) hr = right.height(); return 1 + Math.max(hl, hr); }[email protected] Java: rboles/ 32
Recorrido de Euler
Java: rboles /
33
Recorrido preorden1
2Primero el nodo Despus sus hijos (recursivamente)[email protected]
34 5 7Java: rboles / 34
6
Recorrido postorden7
1Primero sus hijos (recursivamente) Despus el [email protected]
63 2 4Java: rboles / 35
5
Recorrido inorden (simtrico)2 1 Primero el hijo izquierdo (recursivamente) Despus el nodo Primero el hijo derecho (recursivamente)[email protected]
5 3 7
4
6Java: rboles / 36
(A+B)*(CD)*
+A B C
D
Java: rboles /
37
EjemploInfijo A+BA+BC (A+B)*(CD)[email protected]
Prefijo +AB+ABC *+ABCD
Posfijo AB+AB+C AB+CD*Java: rboles / 38
Actividad
Visualizacin de expresiones como rboles http://www.cs.jhu.edu/~goodrich /dsa/05trees/Demo1/
Java: rboles /
39
Notacin postfijoCalculadoras HP Pila para almacenar operandos Ej.: 3 5 + 6 2 *
2 5 4 6 32 8 [email protected] Java: rboles / 40
Clase BNode: preordervoid preorder (){ System.out.println(info); if (left != null) left.preorder(); if (right != null) right.preorder(); }[email protected] Java: rboles / 41
Clase BNode: postordervoid postorder (){ if (left != null) left.postorder(); if (right != null) right.postorder(); System.out.println(info); }[email protected] Java: rboles / 42
Clase BNode: inordervoid inorder (){ if (left != null) left.inorder(); System.out.println(info); if (right != null) right.inorder(); }[email protected] Java: rboles / 43
Propiedades de rboles binariosSea E=Nmero de nodos externos I=Nmero de nodos internos N=Tamao=E+I H=Altura
Se cumple E=I+1 H+1E2H HI2H-1 log2(N+1)-1H(N-1)/[email protected]
2*H+1N2H+1-1
Java: rboles /
44
rboles binarios de bsquedaUn rbol binario de bsqueda es un rbol binario en el que para cada nodo n, todas las claves de los nodos del subrbol izquierdo son menores que la clave de n (o iguales) y todas las del subrbol derecho mayores (o iguales).
Java: rboles /
45
Ejemplo42 1 3 6 5 7Java: rboles / 46
1
82
93
Ejemplo81
6
9
75
2 3 4
3Java: rboles /
47
OperacionesBsqueda Insercin Eliminacin
Java: rboles /
48
BsquedaBuscamos el 3: 32: Subrbol derecho 3=3: Elemento encontrado
4
21http://www.cosc.canterbury.ac.nz/ mukundan/dsal/[email protected]
83 5 6 7Java: rboles / 49
9
InsercinInsertar 6: 62: Subrbol derecho Hueco libre: insertar
7
95 6Java: Trees / 50
Eliminacin (1)Eliminar 5: si es una hoja: eliminar si es un nodo degenerado: reemplazar por el hijo
7
95 3
Java: Trees /
51
Eliminacin (2)Eliminar 2: si el nodo tiene 2 hijos: reemplazar por el mayor del subrbol izquierdo, o el menor del subrbol derecho
7
2 31 [email protected]
95
Java: Trees /
52
ActividadVer animacin de rboles binarios de bsquedahttp://www.ibr.cs. tu-bs.de/courses/ ss98/audii/applets/ BST/BST-Example.html
Java: rboles /
53
Montculos (Heaps)Un montculo es un rbol binario en el que para cada nodo n (excepto para el raz), su clave es mayor o igual que la de su padre. Aplicaciones:Colas con prioridad Ordenacin
Java: rboles /
54
Ejemplo12 3 5 [email protected]
4 6 7Java: rboles / 55
9
Montculo completo12 3 [email protected]
4 5 6 9
7Java: rboles / 56
Implementacin basada en secuencias12 4 1 5 2 3 4 6 5 6 3p(root)=1 p(x.left)=2*p(x) p(x.right)=2*p(x)+1
7 7Java: Trees / 57
Insertar45 15 16 25 14 9 7 12 11 8Java: rboles / 58
6 20
Insertar45 15 16 25 14 9 7 12 11 8 2Java: rboles / 59
6 20
Insertar45 15 16 25 14 9 7 12 11 8 20Java: rboles / 60
6 2
Insertar45 15 16 25 14 9 7 12 11 8 20Java: rboles / 61
2 6
Insertar25 15 16 25 14 9 7 12 11 8 20Java: rboles / 62
4 6
Eliminar45 15 16 25 14 9 7 12 11 8Java: rboles / 63
6 20
Eliminar85 15 16 25 14 9 7 12 11Java: rboles / 64
6 20
Eliminar58 15 16 25 14 9 7 12 11Java: rboles / 65
6 20
ActividadProbar el formulario dehttp://www.csse.monash.edu.au/~lloyd /tildeAlgDS/Priority-Q/
Java: rboles /
66
ActividadProbar el applet dehttp://www.cosc.canterbury.ac.nz/ mukundan/dsal/MinHeapAppl.html
Java: rboles /
67