Duracin: 2 semanas aprox. ndice general: 1. El problema de la Bsqueda sobre una Coleccin de Datos: soluciones y costes sobre diferentes Representaciones 2. rbol Binario de Bsqueda (ABB): definicin, Representacin, Equilibrio y coste de sus operaciones 3. Implementacin en Java del ABB: la clase ArbolBinarioBusqueda 4. Implementacin de las EDA Diccionario y Cola de Prioridad segn un ABB: las clases ABBDiccionario y ABBColaPrioridad 5. El problema de la Seleccin, otra vez
Bibliografa bsica:
Weiss, M.A. Estructuras de datos en Java. Adisson-Wesley, 2000. Captulo 18, apartados del 1 al 3, ambos inclusive. Wiener, R., Pinson, L.J. Fundamentals of OOP and Data Structures in Java. Cambridge University Press. 2000. Captulo 15, apartados 3, 4 y 9
Si los Datos NO estn ordenados, en el Peor de los Si los Datos estn ordenados, la Bsqueda Dicotmica
Bsqueda Esttica
permite en el Peor de los Casos una cota logartmica, pero la insercin se encarece (es lineal)
La Bsqueda en un Diccionario es Dinmica Una Implementacin adecuada del Diccionario consigue que sus operaciones se ejecuten en un tiempo independiente de su nmero de Entradas
6
La Bsqueda en una Cola de Prioridad es Dinmica Una Implementacin adecuada de la Cola de Prioridad consigue que excepto eliminarMin() las dems operaciones se ejecuten en un tiempo promedio constante
7
El Problema de la Bsqueda sobre una Coleccin de Datos: soluciones y costes sobre diferentes Representaciones
Coste medio Representacin
buscar(x)
insertar(x)
buscarMin()
eliminarMin()
Para ser ms eficiente . Qu caractersticas tendra que tener la Representacin de la EDA Orientada a la Bsqueda?
8
Para ser ms eficiente . Qu caractersticas tendra que tener la Representacin de una EDA Orientada a la Bsqueda?
1. La nica Estructura de Datos que puede proporcionar cotas de tiempo logartmicas es el rbol Binario Equilibrado PROPIEDAD ESTRUCTURAL 2. Si un rbol Binario Equilibrado cumple la propiedad de la Bsqueda Ordenada, buscar(x) es logartmica, al igual que el resto de operaciones PROPIEDAD DE ORDENACIN
insertar(new Integer(1)) ;
8 10
12 16 14
rbol Binario
10
El rbol Binario de Bsqueda (ABB) como Representacin de una EDA Orientada a la Bsqueda
Un rbol Binario es de Bsqueda (o cumple la propiedad de Bsqueda Ordenada) si: 1. 2. 3. todos que el todos que el
7 2 1 3 5 9 2
los Datos de su subrbol Izquierdo son menores que ocupa su Raz los Datos de su subrbol Derecho son mayores que ocupa su Raz
7 9 5 3 8
11
rbol Binario
123579
resulta una Secuencia Ordenada El Dato mnimo se encuentra en ..... el ltimo Nodo Izquierdo de su primera Rama El Dato mximo se encuentra en ..... el ltimo Nodo Derecho de su ltima Rama
12
Cuestiones propuestas:
A partir de las definiciones y propiedades anteriores, respndanse las siguientes cuestiones: 1. dnde se encuentra el sucesor de un Dato dado x de un ABB? 2. y el predecesor de x? Responder a las cuestiones planteadas sobre los siguientes ejemplos puede resultar til:
7 2 1 3 5
dnde se encuentra el sucesor del 2 en este ABB? 9 y su predecesor? dnde se encuentra el sucesor del 9 en este ABB? y su predecesor? SIGUE 13
15 6 3 2 4 9 7 13 17 18 20
dnde se encuentra el sucesor del 15 en este ABB? y su predecesor? dnde se encuentra el sucesor del 13 en este ABB? y su predecesor? dnde se encuentra el sucesor del 9 en este ABB? y su predecesor?
Operaciones sobre un ABB y su coste: buscar(x) Bsqueda del Nodo del ABB que contiene a x
Tbuscar (N) O(H) =4 buscar(x) = 3
7 2 1 3 5 9 1 3 2 5
buscar(x) = 9
7 9
4 Comparaciones
2 Comparaciones
15
esfuerzo Medio de Comparacin (eMC) ? eMC = Nivel=0..H (n Nodos de Nivel) (1+ Nivel) _________________________________ N
16
Operaciones sobre un ABB y su coste: insertar(x) 1. Bsqueda del lugar de insercin de x en el ABB
Tinsertar (N) O(H) insertar(x) = 10
7 2 1 3 5 9
10
insertar(x) = 6
7 2 1 3 5 9
Se puede calcular el esfuerzo Medio de Comparacin conforme se van insertando los Datos ?
buscarMin()
7 2 1 3 5 9 1
buscarMax()
7 2 5 3 9
Operaciones sobre un ABB y su coste: eliminar(x) 1. Bsqueda del Nodo que contiene a x
2. Resolucin de la Bsqueda: eliminarlo
eliminar(x) = 5
7 2 1 3 5 9 1
eliminar(x) = 2
7 3 2 9
9 5
buscarMin()
5
null 3
o Caso 3: eliminar un o Caso 1: eliminar un o Caso 2: eliminar Nodo n con 0 Hijos un Nodo n con 1 Hijo Nodo n con 2 Hijos n = null
cuanto ms Equilibrado el ABB menor ser su Altura, su eMC y el coste de sus operaciones !!!
10
SOLUCIN : ABBs Bien Equilibrados ABBs a los que se aade una Condicin de Equilibrio tal que H log N Ello obliga a realizar modificaciones en: la estructura de la clase correspondiente (atributos) las operaciones de insercin y eliminacin
22
El Problema de la Bsqueda sobre una Coleccin de Datos: soluciones y costes sobre diferentes Representaciones
Coste medio buscar(x) Representacin LEI LEI Ordenada Arbol Binario Monticulo Binario ABB insertar(x) buscarMin() eliminarMin()
23
11
El Problema de la Bsqueda sobre una Coleccin de Datos: soluciones y costes sobre diferentes Representaciones
Coste peor buscar(x) Representacin LEI LEI Ordenada Arbol Binario Monticulo Binario ABB insertar(x) buscarMin() eliminarMin()
24
Representacin de un ABB
rbol Binario, donde un Nodo define al rbol del que es Raz un rbol Binario TIENE UN Nodo Binario Raz un rbol Binario TIENE UN numTotalInserciones y numTotalComparaciones tal que: eMC = numTotalComparaciones / numTotalInserciones
25
12
Ejemplo propuesto
Si se busca el nmero 363 en un ABB que contiene nmeros del 1 al 1000 cul de las siguientes secuencias no puede ser la secuencia de Nodos examinada? 2,252,401,398,330,344,397,363 924,220,911,244,898,258,362,363 925,202,911,240,912,245,363 2,399,387,219,266,382,381,278,363 935,278,347,621,299,392,358,363
26
Ejemplo propuesto: a partir de ArbolBinarioBusqueda, disear las clases ABBDiccionario y ABBColaPrioridad para que implementen,
respectivamente, Diccionario y ColaPrioridad mediante un ABB
13
Ejemplo propuesto: a partir de ArbolBinarioBusqueda, disear las clases ABBDiccionario y ABBColaPrioridad para que implementen,
respectivamente, Diccionario y ColaPrioridad mediante un ABB
ArbolBinarioBusqueda NO implementa ninguna interfaz. Sus mtodos son: los public comunes a cualquier rbol Binario, que por tanto lanzan sus homnimos de NodoBinario los protected sobre un Nodo Binario de Bsqueda, que sern lanzados (re-utilizados) por los mtodos public de clases que implementan Modelos especficos, como 1. ABBDiccionario, extends ArbolBinarioBusqueda implements Diccionario 2. ABBColaPrioridad, extends ArbolBinarioBusqueda implements ColaPrioridad
Cuestiones: 1. Cul de los dos mtodos de insercin de ArbolBinarioBusqueda se lanza en ABBDiccionario ? y enABBColaPrioridad ? 2. Desde una aplicacin que utiliza un Diccionario, es correcto ejecutar Diccionario d = new ArbolBinarioBusqueda()? Por qu ?
14
La clase ArbolBinarioBusqueda: mtodos protected, para la Herencia, sobre la Raz de this ABB, i.e. sobre un Nodo Binario de Bsqueda
protected NodoBinario buscar(Object x, NodoBinario n) throws ElementoNoEncontrado {....} protected NodoBinario insertar(Object x, NodoBinario n) throws ElementoDuplicado {....} protected NodoBinario insertarTodos(Object x, NodoBinario n) {....} protected NodoBinario buscarMin(NodoBinario n) {....} protected NodoBinario buscarMax(NodoBinario n) {....} protected NodoBinario eliminarMin(NodoBinario n) {....} protected NodoBinario eliminarMax(NodoBinario n) {....} protected NodoBinario eliminar(Object x, NodoBinario n) throws ElementoNoEncontrado {....} ...
30
protected buscar
15
diseo Iterativo del mtodo protected insertar diseo Recursivo del mtodo insertarTodos
Ejercicios propuestos:
else { if ( n.izq != null && n.der != null ) { /** clave encontrada en Nodo n: eliminarlo */ n.dato = buscarMin(n.der).dato; n.der = eliminarMin(n.der); } else n = ( n.izq != null ) ? n.izq: n.der;
} return n; }
16
Ejercicios propuestos:
Aadir a la clase ArbolBinarioBusqueda dos mtodos que dado un Objeto x encuentren, respectivamente, el sucesor y predecesor de x en el ABB Cmo tiene que ser el Objeto x?
35
17
public static void seleccionDirectaK(Object v[], int k){ for ( int i = 0; i < k; i++ ) { int j = posMin(v,i,N-1); intercambiar(v,i, j); } }
/** Solucin 2 */
.... }
TquickSortmedio(N) O(N*logN)
18
public static void seleccionRapida(Object v[], int k, int izq, int der){ if ( izq < der ){ int indP = particion(v, izq, der); if ( k-1 < indP ) seleccionRapida(v, k, izq, indP-1); else if ( k-1 > indP ) seleccionRapida(v, k,indP+1, der); } }
Clculo del k-simo Dato ms pequeo de una Coleccin b) si la Coleccin se representa sobre un ABB de talla N, 1kN Ejemplo: 7,2,9,1,5,3, k = 3 y N = 6
n 7
2 9 5
tamaoNIzq = 4
k=1
3
Si se imprime en InOrden un ABB resulta una Coleccin Ordenada .... pero sigue siendo O(N) Mejor an, dnde se encuentra el mnimo del ABB n ? y su segundo mnimo, k = 2 ? ... hasta que k se encontrar en n.izq ? hasta el 4
19
k=5 n
2 5 7 9 1
k = 10 n
2 5 3 7 9
tamaoNIzq = 4
if (k <= tamaoNIzq)
tamaoNIzq = 4
tamaoNIzq = 4
TbuscarKesimo(N) (N)
if ( n == null ) throw new ElementoNoEncontrado(al buscar K-simo); int tamaoNIzq = NodoBinario.tamao(n.izq); if ( k == tamaoNIzq + 1 ) return n; else if ( k <= tamaoNIzq ) return buscarKesimo(k, n.izq); else } return buscarKesimo(k-tamaoNIzq-1,n.der);
// Lo lanza el homnimo de una extensin de ArbolBinarioBusqueda public Object buscarKesimo(int k) throws ElementoNoEncontrado { return buscarKesimo(k, raiz).dato; }
41
20
21
45
22