Академический Документы
Профессиональный Документы
Культура Документы
1. Introduccin 2. Estructuras de datos lineales 3. Estructuras de datos jerrquicas 4. Grafos y caminos 5. Implementacin de listas, colas, y pilas 6. Implementacin de mapas, rboles, y grafos
UNIVERSIDAD DE CANTABRIA
UNIVERSIDAD DE CANTABRIA
1. Introduccin
1.1 Estructuras de datos abstractas 1.2 Eficiencia de las estructuras de datos 1.3 Interfaces y herencia mltiple 1.4 Estructuras de datos genricas 1.5 Colecciones 1.6 Iteradores 1.7 Relaciones de igualdad y orden
UNIVERSIDAD DE CANTABRIA
Una estructura o tipo de datos abstracto (ADT) es una clase o mdulo de programa que contiene: datos privados, con una determinada estructura un conjunto de mtodos pblicos para manejar esos datos El conjunto de operaciones permite el uso de la estructura de datos sin conocer los detalles de su implementacin los programas que usan la clase son independientes de la forma en la que ste se implementa no es necesario conocer los detalles internos del tipo de datos ni de su implementacin
Encapsulamiento
Se dice que la clase encapsula el tipo de datos junto a sus operaciones, ocultando los detalles internos consiguen la reutilizacin de cdigo para muy diversas aplicaciones
Parte Pblica Objeto Operacin 1 Operacin 2 Operacin n Estado Parte Privada
UNIVERSIDAD DE CANTABRIA
Por ejemplo, las listas o colas que estudiamos el ao pasado aunque necesitamos saber la eficiencia de los mtodos
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
UNIVERSIDAD DE CANTABRIA
Entre los criterios a tener en cuenta al disear o elegir un algoritmo estn su complejidad, y su tiempo de ejecucin El tiempo de ejecucin depende de factores variados y, muy en particular, del tamao del problema El tiempo de ejecucin puede ser: exacto: es muy difcil de predecir; normalmente slo se puede saber midindolo prediccin del ritmo de crecimiento del tiempo de ejecucin con respecto al tamao del problema
UNIVERSIDAD DE CANTABRIA
3000
100n
T(n)
2000
1000
0
1 6 11 16 21
26
UNIVERSIDAD DE CANTABRIA
n=25
2.5 seg 3.12 seg 7.81 seg 33554.43 seg
n=50
5.0 seg 12.5 seg 62.5 seg 35677 aos
La notacin O(n)
UNIVERSIDAD DE CANTABRIA
El tiempo de ejecucin depende no slo de la cantidad de datos (n) sino tambin de cules son los datos; por ello distinguimos: tiempo de peor caso: T(n) tiempo promedio: Tavg(n) Para expresar los ritmos de crecimiento se suele usar la notacin O(n): decimos que T(n) es O(f(n)) si existen constantes c y n0 tales que T(n)cf(n) para todo nn0 La notacin O(n) muestra una cota superior al ritmo de crecimiento de un algoritmo
UNIVERSIDAD DE CANTABRIA
En definitiva, cuando decimos que T(n) es O(f(n)), esto significa que f(n) es el lmite de la velocidad de crecimiento de T(n)
La notacin (n)
UNIVERSIDAD DE CANTABRIA
Tambin se puede expresar un lmite inferior al ritmo de crecimiento de T(n) mediante la notacin (n): decimos que T(n) es (g(n)) si existe una constante c tal que T(n)c.g(n) para un nmero infinito de valores de n Por ejemplo, T(n) = n3 + 2n2 es (n3) Basta probar para c=1 y n>0. Recordar siempre que tanto O(n) como (n) son medidas relativas, no absolutas Por ejemplo, supongamos dos algoritmos cuyos tiempos de ejecucin son O(n2) y O(n3) Qu ocurre si las constantes son 100n2 y 5n3?
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
10
UNIVERSIDAD DE CANTABRIA
Es decir, que la suma de los tiempos de ejecucin de dos algoritmos tiene un ritmo de crecimiento igual al del mximo de los dos Por ejemplo, para tiempos polinmicos T(n)=anp+bnp-1+... entonces T(n) es O(np)
11
UNIVERSIDAD DE CANTABRIA
Es decir, que el producto de los tiempos de ejecucin de dos algoritmos (p.e. cuando uno est anidado en el otro), tiene un ritmo de crecimiento igual al producto de los dos Por ejemplo si T(n) es O(cf(n)) entonces tambin es O(f(n)), ya que c es O(1)
12
UNIVERSIDAD DE CANTABRIA
13
UNIVERSIDAD DE CANTABRIA
1
1 1 1 1 1 1 1 1 1
log(n)
7 8 9 10 11 12 13 14 15
nlog(n)
896 2048 4608 10240 22528 49152 106496 229376 491520
n2
16384 65536 262144 1048576 4194304 16777216 67108864 268435456 1073741824
14
UNIVERSIDAD DE CANTABRIA
Instruccin condicional: si es un if simple y no se conoce el valor de la condicin, se supone que la parte condicional se ejecuta siempre si es un if con parte else y no se conoce el valor de la condicin, se elige la que ms tarde de las dos partes Bucle: nmero de veces, por lo que tarden sus instrucciones Procedimientos recursivos: nmero de veces que se llama a s mismo, por lo que tarda cada vez
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
15
Ejemplo de anlisis
Analizar el tiempo de ejecucin del siguiente algoritmo:
mtodo Burbuja (entero[1..n] A) es var entero temporal; fvar (1) para i desde 1 hasta n-1 hacer (2) para j desde n hasta i+1 hacer (3) si A(j-1) > A(j) entonces // intercambia A(j-1) y A(j) (4) temporal := A(j-1); (5) A(j-1) := A(j); (6) A(j) := temporal; fsi; fpara; fpara; fmtodo;
UNIVERSIDAD DE CANTABRIA
16
Ejemplo (cont.)
UNIVERSIDAD DE CANTABRIA
N es el n de elementos a ordenar. Vamos a analizar el programa desde el interior hacia el exterior Cada instruccin de asignacin es O(1), independiente de la dimensin de entrada
- (4), (5) y (6) son O(1) y por la regla de las sumas, la secuencia es O(max(1,1,1))=O(1)
Si suponemos el peor caso en el if, por la regla de las sumas el grupo de instrucciones (3)-(6) toma un tiempo O(1) El lazo que comienza en la lnea (2) y abarca hasta la lnea (6) tiene un cuerpo que toma un tiempo de la forma O(1) en cada iteracin, y como toma n-i iteraciones, el tiempo gastado en ese lazo es O((n-i)1) que es O(n-i).
17
Ejemplo (cont.)
UNIVERSIDAD DE CANTABRIA
El ltimo lazo se ejecuta n-1 veces, de forma que el tiempo total de ejecucin esta limitado superiormente por:
n1
i=1
1 n n -n ( n 1 ) = = ---- -( n i ) 2 2 2
que es O(n2)
18
UNIVERSIDAD DE CANTABRIA
La funcin se llama a s misma n veces, y cada ejecucin es O(1), luego en definitiva factorial es O(n)
19
UNIVERSIDAD DE CANTABRIA
Vehiculo
Coche
Barco
Persona
20
Herencia mltiple
Podemos imaginar que podemos querer heredar de varias jerarquas, con herencia mltiple
Ente mvil Vehiculo
posicion()
UNIVERSIDAD DE CANTABRIA
Ser Vivo
Coche
Barco
Persona
21
Herencia Mltiple
La herencia mltiple sin restricciones presenta anomalas atributos del mismo nombre mtodos iguales con distinta implementacin Es fcil equivocarse se permite en C++
UNIVERSIDAD DE CANTABRIA
22
Interfaz Java
UNIVERSIDAD DE CANTABRIA
Representa una clase abstracta de la que no se pueden crear objetos se usa slo para herencia (incluida la herencia mltiple) no tiene estado
- los atributos slo son pblicos y finales (constantes)
La mejor forma de escribir en Java un ADT es con una interfaz luego la extenderemos con implementaciones concretas escritas como clases Java
23
Extensin de interfaces
Una clase puede extender a una sola clase implementar varias interfaces Una interfaz puede extender a otra interfaz
UNIVERSIDAD DE CANTABRIA
24
UNIVERSIDAD DE CANTABRIA
Es como una clase, pero usa la palabra interface los mtodos son pblicos, pero no se pone la palabra public Ejemplo
25
Implementacin de la interfaz
public class Persona extends SerVivo implements EnteMovil { public Persona(String nombre) { super(nombre); } /** Implementacin del mtodo posicion * definido en la interfaz EnteMovil */ public double posicion() { return pos; } }
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
UNIVERSIDAD DE CANTABRIA
26
Uso de la interfaz
UNIVERSIDAD DE CANTABRIA
Uso polimrfico del mtodo posicion, para cualquier objeto de una clase que implemente la interfaz EnteMovil public static void prueba(EnteMovil e) { System.out.println ("Posicion="+e.posicion()); }
27
UNIVERSIDAD DE CANTABRIA
La abstraccin por genericidad se implementa en Java mediante mdulos genricos permiten hacer que un mdulo sea independiente de una determinada clase de objetos esta clase queda indeterminada ejemplo de mdulo genrico: una lista de objetos de una clase indeterminada Al crear un objeto a partir de una clase genrica es preciso indicar la clase que qued indeterminada mediante un parmetro genrico por ejemplo, podemos decir que los objetos de la lista son de la clase Alumno
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
28
UNIVERSIDAD DE CANTABRIA
Al usar el objeto puede usarse con objetos de la clase del parmetro genrico o de sus subclases por ejemplo, podemos almacenar en la lista, usando sus mtodos, objetos de la clase Alumno, o de sus subclases Declaracin de mdulos genricos public class Nombre <T> {...} T es el parmetro genrico
29
Ejemplo
/** * Almacn de un objeto cualquiera * (del tipo T indeterminado) */ public class Almacen <T> { private T contenido; private boolean hayAlgo; /**Constructor que deja el almacn vaco */ public Almacen() { hayAlgo=false; }
UNIVERSIDAD DE CANTABRIA
30
Ejemplo
/** Indica si el almacn tiene o no dato */ public boolean hayAlgo() { return hayAlgo; } /** Meter un dato en el almacn */ public void almacena(T dato) { contenido=dato; hayAlgo=true; }
UNIVERSIDAD DE CANTABRIA
31
Ejemplo
/** Sacar un dato del almacn */ public T saca() throws NoHay { if (hayAlgo) { hayAlgo=false; return contenido; } else { throw new NoHay(); } } }
UNIVERSIDAD DE CANTABRIA
32
UNIVERSIDAD DE CANTABRIA
Para crear objetos a partir de una clase genrica hay que indicar cul es el parmetro genrico Almacen<Persona> alPer= new Almacen<Persona>(); Almacen<Animal> alAni= new Almacen<Animal>(); Persona p= new Persona(...); Animal a= new Animal(...); alPer.almacena(p); alAni.almacena(a); Persona sacado= alPer.saca();
33
1.5 Colecciones
En Java hay diversas clases genricas predefinidas para almacenar datos con diversas estructuras: Java Collections
<<interfaz>> <<interfaz>>
UNIVERSIDAD DE CANTABRIA
Collection
<<interfaz>>
List Queue
ArrayList
LinkedList
PriorityQueue
34
Colecciones (cont.)
<<interfaz>>
UNIVERSIDAD DE CANTABRIA
<<interfaz>>
Set
<<interfaz>>
SortedSet
HashSet
TreeSet
35
Colecciones (cont.)
Los mapas forman una jerarqua aparte dentro de las Java Collections
<<interfaz>>
UNIVERSIDAD DE CANTABRIA
Map
<<interfaz>>
SortedMap
HashMap
TreeMap
36
Colecciones (cont.)
Interfaz
Collection List Queue Set SortedSet Map SortedMap
UNIVERSIDAD DE CANTABRIA
Descripcin
Coleccin de cero o ms elementos, que se pueden aadir o quitar Coleccin que admite elementos repetidos y en los que stos tienen un orden establecido Coleccin para el almacenamiento de datos intermedios, con operaciones adicionales de insercin y consulta Conjunto: no admite elementos repetidos Conjunto en el que los elementos estn en orden ascendente Contiene pares de valores {clave,valor}, para poder obtener un valor dada una clave Mapa en el que las parejas se ordenan por sus claves
37
Colecciones (cont.)
Clase
ArrayList LinkedList
UNIVERSIDAD DE CANTABRIA
Descripcin
Tabla de tamao que puede crecer. Antes se llamaba Vector Lista de tamao indefinido, con operaciones de insercin y eliminacin que son O(1). Tambin sirve para definir colas (FIFO) y pilas Cola de prioridad, donde los elementos se almacenan ordenados segn una relacin de orden establecida al crearla Conjunto implementado con tablas de troceado (hash) que habitualmente tiene tiempos de insercin, eliminacin y bsqueda que son O(1) Conjunto implementado con rbol binario con operaciones de insercin, eliminacin y bsqueda que son O(log n) Mapa con operaciones que habitualmente son O(1) Mapa con operaciones que habitualmente son O(log n)
PriorityQueue HashSet
38
1.6 Iteradores
UNIVERSIDAD DE CANTABRIA
Un iterador definido sobre una coleccin nos permite visitar todos sus elementos uno por uno permite implementar un algoritmo de recorrido o de bsqueda El iterador se puede ver como una forma de recorrer una secuencia de elementos, disponiendo de un cursor o ndice el cursor est entre el elemento previo (el ltimo visitado) y el siguiente (el que vamos a visitar), dentro del recorrido inicialmente no hay elemento previo cuando se ha visitado el ltimo elemento, no hay siguiente
39
UNIVERSIDAD DE CANTABRIA
public interface Iterator <T> { /** * Retorna true si el iterador tiene siguiente * elemento */ public boolean hasNext(); /** * Retorna el siguiente elemento, y avanza el * cursor hacia adelante. Si no hay elemento * siguiente lanza NoSuchElementException */ public T next();
40
UNIVERSIDAD DE CANTABRIA
41
UNIVERSIDAD DE CANTABRIA
42
UNIVERSIDAD DE CANTABRIA
43
UNIVERSIDAD DE CANTABRIA
44
Ejemplos
UNIVERSIDAD DE CANTABRIA
Codificar un mtodo para buscar un elemento en una coleccin y borrarlo Codificar un mtodo para borrar todos los elementos de una coleccin mostrndolos en pantalla segn se borran
45
El iterador de listas
UNIVERSIDAD DE CANTABRIA
La interfaz ListIterator permite iterar sobre los elementos de una lista pudiendo recorrerla hacia adelante (next()) o hacia atrs (previous()) Se obtiene con el mtodo listIterator() Ejemplo LinkedList <MiClase> lista= ...; ... ListIterator <MiClase> iter= lista.listIterator();
46
La instruccin for-each
El bucle for tiene un modo especial para recorrer todos los elementos de un array o de una coleccin // Coleccin de textos Collection <String> c= ...; // recorre todos los elementos de c for (String s : c) { System.out.println(s); } Este bucle, internamente, usa el iterador de la coleccin.
UNIVERSIDAD DE CANTABRIA
47
UNIVERSIDAD DE CANTABRIA
Por omisin, este mtodo compara las referencias de los objetos podemos redefinirlo para que haga lo que necesitemos Nota: Debe redefinirse de manera consistente el mtodo de troceado hashCode(), que estudiaremos ms adelante Los objetos iguales deben tener cdigos de troceado iguales
48
Propiedades de la igualdad
el mtodo equals() debe ser
-
UNIVERSIDAD DE CANTABRIA
reflexivo: a.equals(a) es true conmutativo: si a.equals(b), b.equals(a) asociativo: si a.equals(b) y b.equals(c), a.equals(c) consistente (debe dar siempre el mismo valor si los datos no cambian) - si a no es null, a.equals(null) es false
49
Ejemplo
public class Coordenada { // atributos privados private double lat,lon; // grados /** * Redefinimos la comparacin, para * que compare los contenidos */ public boolean equals(Object o) { if (o instanceof Coordenada) { Coordenada c= (Coordenada) o; return this.lat==c.lat && this.lon==c.lon; } else { return false; } }
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN
UNIVERSIDAD DE CANTABRIA
50
Ordenacin
UNIVERSIDAD DE CANTABRIA
Dados unos valores con dos operaciones de igualdad (==) y orden (<) una relacin de orden total es aquella que cumple para cualesquiera valores x, y, z:
o bien x==y, x<y, y<x x==x si x==y entonces y==x si x==y e y==z, entonces x==z si x<y e y<z, entonces x<z
Podemos ordenar unos valores si y solo si existe una relacin de orden total
51
Comparacin
UNIVERSIDAD DE CANTABRIA
La interfaz Comparable especifica una operacin de comparacin compareTo() asociada a los objetos de las clases que implementan esta interfaz x.compareTo(y) retorna un entero:
- 0 si x es igual a y - <0 si x es menor que y - >0 si y es menor x
debe imponer una relacin de orden total debe ser consistente con equals()
52
Ejemplo
import java.util.*; public class Alumno implements Comparable <Alumno> { private String nombre; private String dni;
UNIVERSIDAD DE CANTABRIA
public boolean equals(Object o) { if (o instanceof Alumno) { return this.dni.equals(((Alumno)o).dni); } else { return false; } }
53
Ejemplo (cont.)
/** * Comparacin */ public int compareTo(Alumno a) { return this.dni.compareTo(a.dni); } } Observar la asimetra: equals tiene como parmetro un Object compareTo tiene como parmetro un Alumno
UNIVERSIDAD DE CANTABRIA
54
Comparadores
UNIVERSIDAD DE CANTABRIA
En ocasiones es preciso definir varias relaciones de orden para valores de una clase Por ejemplo, ordenar una lista de personas por:
- DNI - apellido - fecha de nacimiento
Un objeto slo puede tener un mtodo compareTo() Pero puede tener varios Comparadores, que implementan la interfaz Comparator
55