Universidad Técnica Federico Santa María - Departamento de ... · es el ABB cuyo nodo raíz...
Transcript of Universidad Técnica Federico Santa María - Departamento de ... · es el ABB cuyo nodo raíz...
Universidad Técnica Federico Santa María - Departamento de Informática
1
Estructura de Datos
Árboles Binarios de BúsquedaABB
Prof.: Mauricio Solar Prof.: Lorna Figueroa
Primer Semestre, 2010
2
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• El árbol binario de búsqueda (ABB) toma su nombre del método de búsqueda dicotómico usado para listas ordenadas,• usa un array para mantener un conjunto de items (número
de items limitado, y operaciones de inserción y borrado de elementos costosas).
• Una implementación dinámica sería muy ineficiente. • Otra solución consistiría en utilizar un árbol para mantener la
información ordenada, con operaciones de inserción y extracción muy eficientes.
3
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• El TAD ABB es un árbol binario en el que los nodos están ordenados.
• El orden impuesto a los nodos es tal que para cada nodo, todos los valores de su subárbol izquierdo son menores que su valor, y todos los valores del derecho son mayores. • El tipo base requiere una relación de orden total.
• Un árbol ordenado lleno permite la búsqueda óptima de sus elementos.
4
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• En un árbol binario ordenado cada vez que se compara el elemento buscado con la raíz se decide si continuar hacia abajo por la derecha o por la izquierda, dejando así la mitad de los nodos a un lado.
• En un número de comparaciones proporcional a la altura del árbol (h ≈ log2(N)) se habrá decidido si el elemento está o no en el árbol.
• Por ejemplo, si hay 32.768 (= 215) elementos en el árbol de búsqueda lleno, sólo se requieren 15 comparaciones.
5
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• Los árboles binarios de búsqueda son estructuras de datos con un gran rendimiento cuando las tareas a realizar implican búsquedas, inserciones y eliminación de nodos.
• No basta con almacenar la información en un árbol para facilitar la búsqueda, se debe utilizar un tipo especial de árbol: un árbol binario de búsqueda. • Si además se quiere que la búsqueda sea eficiente se deben
utilizar árboles de búsqueda binarios equilibrados.
6
Universidad Técnica Federico Santa María - Departamento de Informática
Árboles de Búsqueda Binaria
15
9
3
27
21
18
30
24
7
Universidad Técnica Federico Santa María - Departamento de Informática
ABB - Definición
Un árbol binario de búsqueda es una estructura de datos en el que para todos sus nodos, el hijo izquierdo, si existe, contiene un valor menor que el nodo padre y el hijo derecho, si existe, contiene un valor mayor que el del nodo padre.
15
9
3
27
21
18
30
24
8
Universidad Técnica Federico Santa María - Departamento de Informática
ABB - Definición
• Se define ABB para un conjunto S, como un árbol binario rotulado, en que cada nodo v tiene un rótulo l(v) tal que :
• Para todo u en el subárbol derecho de v, l(u) > l(v) • Para todo u en el subárbol izquierdo de v, l(u) < l(v)• Para a ∈ S, existe un único v tal que l(v) = a
9
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB
• Son una subclase muy importante del TAD AB ya que permiten el ordenamiento y búsqueda de datos en forma simple y eficiente.
• La especificación del TAD ABB es muy similar a la de AB.
10
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ArbolBB
Operaciones:• CrearArbol → ArbolBB
• Su resultado es la creación de un ABB vacío.• ArbolVacio(ArbolBB) → Logico
• Devuelve cierto si el argumento de entrada es un ABB vacío, falso en caso contrario.
• BuscarNodo(ArbolBB, TElemento x) → ArbolBB• A partir de un ABB y de un valor de tipo base, el resultado
es el ABB cuyo nodo raíz contiene dicho valor.
11
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ArbolBB
• InsertarNodo(ArbolBB, TElemento x) → ArbolBB• A partir de un ABB y de un valor de tipo base, el resultado
es un nuevo ABB en el que se ha añadido el nuevo valor (es decir, la inserción es ordenada).
• EliminarNodo(ArbolBB, TElemento x) → ArbolBB• A partir de un ABB y de un valor de tipo base, el resultado
es un nuevo ABB en el que se ha eliminado el nodo que contenía la información de tipo base.Existen tres casos posibles:a) Que el nodo sea una hojab) Que el nodo a eliminar tenga sólo un hijoc) Que el nodo a eliminar sea un nodo interior
12
Universidad Técnica Federico Santa María - Departamento de Informática
Para la secuencia: 15, 18, 14, 5, 10, 12, 7, se construye el ABB:
15
14 18
5
12
10
7
InOrden : 5, 7, 10, 12, 14, 15, 18
ABB – Ejemplo
13
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB – Ejemplo
• Debido al orden impuesto sobre los elementos de un ABB no vacío el menor de ellos es aquel que está almacenado en el nodo más a la izquierda del mismo.
ArbolBB Minimo (AB ab) /* pre: ab es un ABB no vacío
post: retorna el mínimo elemento de ab */ if (ArbolVacio(SubArbIzq(ab)))
return RaizAB(ab); else
return Minimo(SubArbIzq(ab));
ArbolBB Minimo (AB ab) /* pre: ab es un ABB no vacío
post: retorna el mínimo elemento de ab */ if (ArbolVacio(SubArbIzq(ab)))
return RaizAB(ab); else
return Minimo(SubArbIzq(ab));
14
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo
• Suponga que se busca un elemento x en el árbol. • Lo primero es comprobar si se encuentra en el nodo raíz. • Si no es así, si el elemento buscado es menor que el
contenido en el nodo raíz se deduce que, de estar en el árbol, se encuentra en el subárbol izquierdo.
• Si el elemento buscado es mayor que el contenido en el nodo raíz se deduce que, de estar en el árbol, se encuentra en el subárbol derecho.
• Para continuar la búsqueda en el subárbol adecuado se aplica recursivamente el mismo razonamiento.
15
Universidad Técnica Federico Santa María - Departamento de Informática
• El esquema del algoritmo será el siguiente :
ABB – BuscarNodo
1. Si el valor del nodo actual es igual al valor buscado encontrado.
2. Si valor buscado es menor que el del nodo actual
buscar en el subárbol izquierdo.
1. Si valor buscado es mayor que el del nodo actual
buscar en el subárbol derecho.
1. Si el valor no está en el árbol no encontrado.
16
Universidad Técnica Federico Santa María - Departamento de Informática
typedef int TipoElemento;typedef struct nodo
TipoElemento dato;struct nodo *izq;struct nodo *der;
Nodo;typedef Nodo* ArbolBinar;
typedef int TipoElemento;typedef struct nodo
TipoElemento dato;struct nodo *izq;struct nodo *der;
Nodo;typedef Nodo* ArbolBinar;
ABB – BuscarNodo – Implementación
Autor: Ing Rolando Simon Titiosky
17
Universidad Técnica Federico Santa María - Departamento de Informática
Nodo *BuscarNodo(Nodo *raiz, TipoElemento buscado) if(!raiz)
return 0; /*Árbol vacío*/else if (buscado == raiz–>dato)
return raiz;else if (buscado < raiz–>dato)
return BuscarNodo(raiz–>izq, buscado);else
return BuscarNodo(raiz–>der, buscado);
Nodo *BuscarNodo(Nodo *raiz, TipoElemento buscado) if(!raiz)
return 0; /*Árbol vacío*/else if (buscado == raiz–>dato)
return raiz;else if (buscado < raiz–>dato)
return BuscarNodo(raiz–>izq, buscado);else
return BuscarNodo(raiz–>der, buscado);
ABB – BuscarNodo – Implementación
Autor: Ing Rolando Simon Titiosky
18
Universidad Técnica Federico Santa María - Departamento de Informática
tAB* BuscarNodo2 (tAB *A; tElemento x) tAB p = A;BOOLEAN enc;enc = false;while ( ( ! enc) && ( p!= NULL ) )
enc = p -> info == x;if ! enc
if (x < p -> info ) p = SubArbolIzq(p);
elsep = SubArbolDer(p);
return p;
tAB* BuscarNodo2 (tAB *A; tElemento x) tAB p = A;BOOLEAN enc;enc = false;while ( ( ! enc) && ( p!= NULL ) )
enc = p -> info == x;if ! enc
if (x < p -> info ) p = SubArbolIzq(p);
elsep = SubArbolDer(p);
return p;
Si el resultado devuelto es NULL, significa que no se ha encontrado el elemento buscado
ABB – BuscarNodo – Implementación 2
19
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo
• La inserción de un elemento está basado en el algoritmo de búsqueda.
• Se determina si el elemento está en el árbol,• Si está, no se inserta. • En caso contrario, se agrega como hoja.
20
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo
• Ciclo: mientras no sea un árbol vacío o hasta que se encuentre el elemento.
• Si el valor del nodo raíz es mayor que el elemento buscado, continuar la búsqueda en el árbol izquierdo: • Padre = nodo• nodo = nodo -> izq
• Si el valor del nodo raíz es menor que el elemento buscado, continuar la búsqueda en el árbol derecho: • Padre = nodo• nodo = nodo -> der
21
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
• Para cada secuencia, construir el ABB correspondiente y determinar recorrido en: InOrden – Postorden – PreOrden
• 10 – 5 – 7 – 14 – 12 – 18 – 15
• 15 – 18 – 4 – 5 – 10 – 12 – 7
22
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
23
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
10
24
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
10
Insertar 5:
10
5
25
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
10
Insertar 5:
10
5
Insertar 7:
10
5
7
26
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
10
5
7
14
27
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
10
5
7
14
Insertar 12:
10
5
7
14
12
28
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
10
5
7
14
Insertar 12:
10
5
7
14
12
Insertar 18:
18
10
5
7
14
12
29
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
InOrden: 5 – 7 – 10 – 12 – 14 – 15 - 18
Insertar 15:
18
10
5
7
14
12
15
30
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
31
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
15
32
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
15
Insertar 18:
15
18
33
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
15
Insertar 18:
15
18
Insertar 4:
15
184
34
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
15
4
5
18
35
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
15
4
5
18
Insertar 10:
15
4
5
18
10
36
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
15
4
5
18
Insertar 10:
15
4
5
18
10
Insertar 12:
12
15
4
5
18
10
37
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7Insertar 7:
12
15
4
5
18
10
7
InOrden: 4 – 5 – 7 – 10 – 12 – 15 – 18
38
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo – Implementación
Es una extensión de la operación de Búsqueda– Si el árbol está vacío se inserta directamente– SINO: Buscará en el árbol el lugar correcto de Inserción
void InsertarNodo (Nodo** raiz, TipoElemento dato) if (!(*raiz))
*raiz = CrearNodo(dato);else if (dato < (*raiz) >dato)
InsertarNodo(&((*raiz) >izdo), dato);else
InsertarNodo(&((*raiz) >dcho), dato);
Es una extensión de la operación de Búsqueda– Si el árbol está vacío se inserta directamente– SINO: Buscará en el árbol el lugar correcto de Inserción
void InsertarNodo (Nodo** raiz, TipoElemento dato) if (!(*raiz))
*raiz = CrearNodo(dato);else if (dato < (*raiz) >dato)
InsertarNodo(&((*raiz) >izdo), dato);else
InsertarNodo(&((*raiz) >dcho), dato); Autor: Ing Rolando Simon Titiosky
39
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo – Implementación 2
void InsertarNodo_2 (tAB **A; tElemento x) if (*A == NULL )
*A = (tAB *) malloc(sizeof(tAB));(*A )->info = x;(*A )->izq = NULL;(*A )->der = NULL;
else if( (*A) -> info > x)
InsertarNodo(&(*A) -> izq, x);else if( (*A) -> info < x)
InsertarNodo(&(*A) -> der, x);else
printf( “Dato repetido “);
void InsertarNodo_2 (tAB **A; tElemento x) if (*A == NULL )
*A = (tAB *) malloc(sizeof(tAB));(*A )->info = x;(*A )->izq = NULL;(*A )->der = NULL;
else if( (*A) -> info > x)
InsertarNodo(&(*A) -> izq, x);else if( (*A) -> info < x)
InsertarNodo(&(*A) -> der, x);else
printf( “Dato repetido “);
40
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo
1. Buscar el nodo que se desea borrar.2. Si se encuentra el nodo hay que contemplar tres casos
posibles:a) Si el nodo a borrar no tiene hijos se libera el espacio
que ocupa.b) Si el nodo a borrar tiene un hijo este hijo ocupa la
posición ocupada por el nodo borrar.c) Si el nodo a borrar tiene dos hijos
i. Se busca el máximo de la rama izquierda, o el mínimo de la rama derecha.
ii. Se sustituye el nodo a borrar por el nodo encontrado (máximo o mínimo).
iii. Se elimina el nodo copiado (máximo o mínimo).
41
Universidad Técnica Federico Santa María - Departamento de Informática
a) Que el nodo sea una hoja:
El TAD ABB – EliminarNodo
42
Universidad Técnica Federico Santa María - Departamento de Informática
b) Que el nodo tenga un hijo:
El TAD ABB – EliminarNodo
43
Universidad Técnica Federico Santa María - Departamento de Informática
c) Que el nodo sea interno:
El TAD ABB – EliminarNodo
44
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso a)
Si el nodo a borrar no tiene hijos se libera el espacio que ocupa.
Árbol Inicial: Árbol Final:
Suprimir 24
15
9
12
27
21
18
36
24
15
9
12
27
21
18
36
45
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso b)
Si el nodo a borrar tiene un hijo este hijo ocupa la posición ocupada por el nodo borrar.
Árbol Final:Árbol Inicial:
15
9
12
27
18 36
Suprimir 21
15
9
12
27
21
18
36
46
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso c)
Si el nodo a borrar tiene dos hijos i. Se busca el máximo de la rama izquierda o el mínimo de la
rama derecha.ii. Se sustituye el nodo a borrar por el nodo encontrado.
Árbol Inicial: Árbol Final:Suprimir 15
15
9
12
27
18 36
12
9 27
18 36
47
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para el árbol inicial, eliminar las claves 24 – 21 – 15 – 27 – 12.
Arbol inicial:
24
15
9
12
27
21
18
36
15
9
12
27
21
18
36
Suprimir 24 (caso a):
48
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Arbol inicial:
15
9
12
27
21
18
36
Suprimir 21 (caso b):
15
9
12
27
18 36
49
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Árbol inicial:Suprimir 15 (caso c):
Dos soluciones posibles :
12
9 27
18 36
15
9
12
27
18 3618
9
12
27
36
50
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Árbol inicial: Suprimir 27 (caso c):
12
9 18
36
12
9 27
18 36
51
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Arbol inicial: Suprimir 12 (caso c):
9
18
36
12
9 18
36
52
Universidad Técnica Federico Santa María - Departamento de Informática
void eliminar (Nodo** r, TipoElemento dato) if (!(*r))
puts("Nodo no encontrado");else if (dato < (*r) -> dato)
eliminar(&(*r) ->izdo, dato);else if (dato > (*r) ->dato)
eliminar(&(*r) ->dcho,dato);else /* Nodo encontrado */
Nodo* q; /* puntero al nodo a suprimir */q = (*r); /* r es el ptr del nodo Padre */if (q ->izdo == NULL)
(*r) = q >dcho;else if (q ->dcho == NULL)
(*r) = q ->izdo;else /* tiene rama izquierda y derecha */
reemplazar(&q);free(q);
void eliminar (Nodo** r, TipoElemento dato) if (!(*r))
puts("Nodo no encontrado");else if (dato < (*r) -> dato)
eliminar(&(*r) ->izdo, dato);else if (dato > (*r) ->dato)
eliminar(&(*r) ->dcho,dato);else /* Nodo encontrado */
Nodo* q; /* puntero al nodo a suprimir */q = (*r); /* r es el ptr del nodo Padre */if (q ->izdo == NULL)
(*r) = q >dcho;else if (q ->dcho == NULL)
(*r) = q ->izdo;else /* tiene rama izquierda y derecha */
reemplazar(&q);free(q);
Implementación de EliminarNodo
Autor: Ing Rolando Simon Titiosky
53
Universidad Técnica Federico Santa María - Departamento de Informática
void reemplazar(Nodo** act) Nodo* a, *p;p = *act;a = (*act) ->izdo; /* menores a IZQ*/while (a ->dcho)
p = a; /* buscar el Mayor a DER*/a = a ->dcho;
/* Cambio del campo Datos */(*act) ->dato = a ->dato;/* Al Abuelo p, se hace cargo de nieto IZQ */if (p == (*act))
p ->izdo = a ->izdo;else
p ->dcho = a ->izdo;(*act) = a;
void reemplazar(Nodo** act) Nodo* a, *p;p = *act;a = (*act) ->izdo; /* menores a IZQ*/while (a ->dcho)
p = a; /* buscar el Mayor a DER*/a = a ->dcho;
/* Cambio del campo Datos */(*act) ->dato = a ->dato;/* Al Abuelo p, se hace cargo de nieto IZQ */if (p == (*act))
p ->izdo = a ->izdo;else
p ->dcho = a ->izdo;(*act) = a;
Implementación de EliminarNodo
54
Universidad Técnica Federico Santa María - Departamento de Informática
• Altura: retorna la altura de un árbol• Construir: crea un árbol con un elemento raíz y dos ramas.• Copiar: crear una copia del árbol• CrearArbol: Inicia un árbol vacío• Derecho: retorna la rama derecha de un árbol dado.• Nodos: determina el número de nodos del árbol• EsVacio: comprueba si el árbol tiene nodos• Iguales: determinar si dos árboles son idénticos• Izquierdo: retorna la rama izquierda de un árbol dado.• Pertenece: determina si un elemento pertenece a un árbol.• Recorrer: el árbol de acuerdo a algunos de los criterios• Profundidad: determina la profundidad de un árbol dado• Raiz: devuelve el nodo raíz.
Otras Operaciones del TAD ABB
55
Universidad Técnica Federico Santa María - Departamento de Informática
Si el árbol está bien balanceado, ningún camino de la raíz a una hoja tiene más de ( 1 + log2(n) ) nodos.Ejemplo:
Análisis de la complejidad de un ABB
18
9
15
27
2112 36
h(A) = ( 1 + log2(7) ) ≈ 3
56
Universidad Técnica Federico Santa María - Departamento de Informática
Pueden ocurrir situaciones muy desfavorables:
18
27
41
36
92
Así, insertar un elemento i-ésimo toma O(i)
Análisis de la complejidad de un ABB
57
Universidad Técnica Federico Santa María - Departamento de Informática
Luego, el proceso de n inserciones toma :
Se puede demostrar que el caso promedio en la inserción es :
h(altura) = 1.4 log2(n); O(log2(n))
El caso promedio en hacer una operación Búsqueda, Eliminar, también lo son.
Análisis de la complejidad de un ABB
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛ +
=∑= 2
1
1
nnOiOn
i
58
Universidad Técnica Federico Santa María - Departamento de Informática
1. Implementar una función que devuelva una lista con las hojas de un árbol binario de búsqueda.
2. Implementar una función que devuelva el nº de nodos externos de un árbol binario de búsqueda.
3. Escribir la función MAX_NODO que, suponiendo que el tipo base Elemento posee una relación de orden total, devuelva el mayor valor de los almacenados en un ABB.
4. Dado un árbol binario de búsqueda, hacer un función que devuelva la diferencia entre el mayor y el menor de los valores almacenados en dicho árbol. Hacerlo de forma no recursiva.
Ejercicios
59
Universidad Técnica Federico Santa María - Departamento de Informática
5. Implementar un procedimiento al que se le pasan dos árboles binarios de búsqueda, y devuelve uno sólo, también binario de búsqueda, y que es el resultado de la mezcla de los dos anteriores.
6. Representar por medio de árboles las siguientes expresiones aritméticas:• (x + y) * (a- b)• [x + (y * z)] * c• x * (y / -z)• a + [(b * (c + d)]• [a * (x + y)] * c• x * y / [(a + b) * c]• (x * y / a) + (b * c)
Ejercicios
60
Universidad Técnica Federico Santa María - Departamento de Informática
Bibliografía - Webgrafía
• Introduction to Algorithms, 2nd edition. Cormen, T., Leiserson, Ch., Rivest, R. and Stein, C. MIT Press. 2001.
• Data Structures and Algorithms. A. Aho, J. Hopcroft, and J. Ullman. Addison-Wesley, 1983. Traducido al castellano, 1988.
• The Art of Computer Programming. Vol. 3: Searching andSorting. Donald E. Knuth. Addison-Wesley, Massachusetts, 1973. Traducido al castellano en Ed. Reverté, Barcelona.
• Programación Modular. ETSIT. Guión del profesor Juan Falgueras, Curso 2005.
• Estructuras de Datos y Algoritmos, M.A. Weiss, Addison-Wesley Iberoamericana, 1995.
• http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf
61
Universidad Técnica Federico Santa María - Departamento de Informática
Bibliografía - Webgrafía
• http://delta.cs.cinvestav.mx/~adiaz/anadis/BinTree.pdf• http://www.ucema.edu.ar/~rst/Algoritmos_y_Estructura_de_Datos
/Teoria/5._Arboles_binarios.pdf• http://www.madsgroup.org/docencia/alg/arboles_monticulos.pdf• http://www.fdi.ucm.es/profesor/csegura/edi0405/arboles.pdf• http://www.iuma.ulpgc.es/users/jmiranda/docencia/programacion/
Tema7_ne.pdf• http://quegrande.org/apuntes/EI/1/EDI/teoria/08-
09/arboles_binarios_de_busqueda.pdf• http://usuarios.multimania.es/sanjudas/download/ResumenArboles