estructura de datos
Post on 08-Jan-2016
231 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
ESTRUCTURES DE DADES I ALGORISMES
TEMA 1: Estructures de dades en Java
Departament de Sistemes Informtics i ComputaciUniversitat Politcnica de Valncia
J.A. Snchez, 5 de febrer de 2013
-
EDAEstructures de dades i algorismes
Tema 1: Estructures de dades en Java1. Estructures de dades: introducci
2. Disseny duna EDA en Java
2.1 Jerarquia Java duna EDA2.2 Exemple de disseny de larrel duna jerarquia Java2.3 Organitzaci de jerarquies dEDA en llibreries
3. s de la jerarquia Java duna EDA
4. Classes genriques restringides per Comparable
5. Interfcies estndard en la jerarquia de Java
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDABibliografia
Bibliografia Data structures & Algorithms in JAVA. M.T. Goodrich, R. Tamassia. John Wiley
& Sons. 2011. ISBN: 978-0-470-39880-7.
Algorithms in Java. Third edition. R. Sedgewick. Addison-Wesley, 2003. IS-BN: 0-201-36120-5.
Estructuras de datos en Java. M.A. Weiss. Addison-Wesley, 2000. ISBN:978-84-7829-035-2.
Introduction to Algorithm. Second edition. T.H. Cormen C.E. Leiserson, R.L.Rivest, C. Stein. MIT Press, 2001. ISBN: 0-262-03293-7.
The JavaTM Tutorials
http://docs.oracle.com/javase/tutorial/collections/
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Els sistemes de computaci estan estructurats en nivells dabstracci:
Model abstracte dun bit que pot prendre valors binaris 0-1 a partir de certespropietats fsiques dalguns materials
Model abstracte duna mquina a partir de les propietats dinmiques dels valorsdun cert conjunt de bits
Model abstracte dun llenguatge de programaci que ens permet controlar unamquina
Noci abstracta dalgorisme implementat en un llenguatge de programaci
Tipus abstracte de dades
Un tipus abstracte de dades s un tipus de dades (un conjunt de valors i unacollecci doperacions sobre eixos valors) que s accessible sols mitjanantuna interfcie. Ens referim a un programa que usa un tipus abstracte dedades com un client, y ens referim a un programa que especifica el tipus dedades com una implementaci. [Sedgewick 2003]
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Tipus (abstracte) de dades
Enter, Real, Bool, . . . Vectors (n-dimensionals) Registres Piles, cues, . . .
Tipus de dades
Una collecci delements Un conjunt doperacions que manipulen eixa collecciEstructura de dades (EDA)Forma particular dorganitzar dades per a implementar dun tipus de dades
Eficincia: requisit que ha dacomplir una EDA
Eficincia temporal: el cost temporal de les operacions ms comuns que su-porta lEDA ha de ser el menor possible
Eficincia espacial: el cost espacial de lEDA ha de ser el menor possible
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Exemples de conjunts de dades
Una collecci delements: fitxers duna cua dimpressi, tasques del SO, in-formaci sobre persones malaltes, tiquets dentrada, collecci dimatges, pa-raules dun text, collecci de documents, . . .
Un conjunt doperacions que manipulen eixa collecci: inserir, recuperar, eli-minar, cercar, . . .
ProblemaDefinir una EDA que permitisca gestionar milers (o milions) delements i que rea-litze les operacions ms habituals de manera eficient
Solucions possibles
Representaci en un vector Llista enllaada (ordenada o no ordenada) Cua Pila
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Tipus de dades: cua (FIFO)
Implementaci: vector (array) o llista enllaada Operacions
inserir encuar eliminar desencuar recuperar primer
Cost temporal de les operacions: (1) Cost espacial: (n)
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Tipus de dades: cua de prioritat [Cormen 2001]Una cua de prioritat s un tipus de dades en la que cada element t assignada unaprioritat i els elements es processen atenent a eixa prioritat. La cua de prioritat hade suportar (com a mnim) les segents operacions:
inserir: inserir un element mxim: torna lelement que t mxima prioritat extraure el mxim: elimina lelement que t mxima prioritat
Exercici. Estudiar cm es pot implementar una cua de prioritat en un vector.Definir les operacions de lEDA i estudiar la seua complexitat temporal.Exercici. Estudiar cm es pot implementar una cua de prioritat en una llista en-llaada. Definir les operacions de lEDA i estudiar la seua complexitat temporal.Exercici. Estudiar cm es pot implementar una cua de prioritat amb una cua.Definir les operacions de lEDA i estudiar la seua complexitat temporal.
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Tipus de dades: diccionari [Cormen 2001]Un diccionari s un tipus de dades que suporta les segents operacions:
inserir: inserta un nou element eliminar: elimina un element cercar: cercar un element
Aplicacions: una agenda, un sistema de traducci, un corrector ortogrfic (basaten freqncies), . . .Exercici. Estudiar cm es pot implementar un diccionari en una llista enllaada.Definir les operacions de lEDA i estudiar la seua complexitat temporal.
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
1. Estructures de dades: introducci
Aspectes a tindre en compte per a definir una EDA
Descriure un model: tipus delements, operacions sobre eixos elements, modelde gesti dels elements
Descriure una implementaci: representaci en memria dels elements i im-plementaci de les operacions
Implementaci 1: vectorVector de dadesOperacions amb vectors
Dades i operacions
Dades en una llistaOperacions amb llistes
Implementaci 2: llista Implementaci nDadesOperacions
...
Tipus de dades
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
2.1 Jerarquia Java duna EDA
Java integra adequadament lestructura jerrquica dels tipus de dades:
Una classe interface de tipus genric que defineix el model Una classe derivada implements de tipus genric per a limplementaci
Exemple
public interface Cola { ... }; //Model public class ArrayCola { ... }; //Implementaci amb vectors public class LEGCola { ... }; //Implementaci enllaada
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
2.2 Exemple de disseny duna jerarquia Java
Arrel de la jerarquia
Cua: collecci delements gestionats amb un model FIFO1 public interface Cola {2 // inserta el Elemento e en una Cola, o lo sita al final3 void encolar(E e);4 // si !esVacia(), obtiene y elimina de una Cola el Elemento5 // que ocupa el principio6 E desencolar();7 // si !esVacia(), obtiene el Elemento que ocupa el principio8 // de una Cola, el primero en orden de insercin9 E primero();
10 // comprueba si una Cola est vaca11 boolean esVacia();12 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
Algunes consideracions:
Una classe sols pot fer extends dun altra Una classe pot implementar (implements) vries interfcies Les interfcies no poden definir atributs, sols capaleres Una interfcie pots ser genrica
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
ExempleTenim un classe Figura i una interfcie Volum
1 public abstract class Figura {2 public abstract double area ();3 }4 public interface Volum {5 double volum ();6 }
No totes les Figura implementen Volum
1 public class Triangle extends Figura {2 ...3 public double area () {return base*altura/2.0;}4 }5 public class Esfera extends Figura implements Volum {6 ...7 public double area () { ... };8 public double volum () { ... };9 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
Si es defineix una Figura, aleshores podem fer:
1 Figure f = ...;2 if (f instanceof Volum) {3 double v = ((Volum)f).volum();4 ...
Podem averiguar si una Figura t o no volum usant instanceof s necessari el casting a Volum per a usar volum ja que aquest mtode no est
en la classe Figura
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
Derivada de la jerarquia
Implementaci en forma de vector (array) circular
1 public class ArrayCola implements Cola {2 protected E elArray[];3 protected static final int CAPACIDAD_POR_DEFECTO = 30000;4 protected int finalC, principioC, talla;5
6 public ArrayCola(){...}7 public String toString(){...}8 protected void duplicarArrayCircular(){...}9 protected int incrementar(int indice){...}
10 public void encolar(E e){...}11 public E desencolar(){...}12 }
Exercici. Implementa les funcions de la classe anterior.
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
1 public ArrayCola(){2 elArray = (E[]) new Object[CAPACIDAD_POR_DEFECTO];3 talla = 0; principioC = 0; finalC = 0;4 }
1 public String toString(){2 String res = ""; int aux = principioC;3 for ( int i=0; i
-
EDA2. Disseny duna EDA en Java
Exercici. Completa la classe LEGCola donades les segents definicions:1 class NodoLEG {2 E dato;3 NodoLEG siguiente;4 NodoLEG(E dato){ this(dato, null); }5 NodoLEG(E dato, NodoLEG siguiente){6 this.dato = dato;7 this.siguiente = siguiente;8 }9 }
1 public class LEGCola implements Cola {2 protected NodoLEG principioC, finalC;3 protected int talla;4 public LEGCola() { ... }5 public void encolar(E e) { ... }6 public E desencolar() { ... }7 public E primero() { ... }8 public boolean esVacia() { ... }9 public String toString() { ... }
10 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
Exercici. Donada la classe NodoLEG de lexercici anterior i la segent classeper a treballar amb una pila:
1 public interface Pila {2 void apilar(E e);3 E desapilar();4 E tope();5 boolean esVacia();6 }
escriu una implementaci enllaada i una implementaci en forma de vector de lainterfcie anterior.
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
2.3 Organitzaci de jerarquies dEDA en llibreries
En la implementaci dun projecte de software s recomanable dividir el codien paquets, ja que permet estalviar temps en compilaci i afavoreix el treballen equip
El paquets permeten estructurar el software en Java. El software sestruc-tura en directoris que contenen classe precomompilades (.class). Normalment,en el paquets, el software es distribueix seguint criteris de funcionalitat de lesclasses
Les classe es poden importar individualment o per paquets afegint el carcter *.Per exemple:
1 import librerias.estructurasDeDatos.modelos.*
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
Podem definir ms duna classe en un fitxer per sols una s pblica. El nomdel fitxer ha de coincidir amb el nom de la classe pblica (amb lextensi .java)
Per a definir un paquet en Java sha de crear una estructura de directoris iguala lestructura de la jerarquia
Quan es desitja que una classe perteneixca a una llibreria, el nom del paquetal que que perteneix la classe ha despecificar-se en la primera lnia del fitxer
1 package librerias.estructurasDeDatos.lineales2 import librerias.estructurasDeDatos.modelos.*
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA2. Disseny duna EDA en Java
2.3 Organitzaci de jerarquies dEDA en llibreries
aplicaciones
estructurasDeDatos
librerias
eda
util
modelos lineales
Cola.javaArrayPila.java
excepciones
jerarquicos
ABBMap.javaABB.javaArrayCola.java
LEGListaConPI.javaPila.JavaListaConPI.java ...
......
...
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
Modalitats dherncia:
Mitjanant composici
Declarar com un atribut de la classe la variable de la jerarquia a reutilitzar
Mitjanant herncia
Ampliar mitjanant herncia la jerarquia de la EDA
Mitjanant import
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
Exemple mitjanant composici
1 package ejemplos.tema1;2
3 public class Paciente{4 private int numero;5 public Paciente(int n) {this.numero = n; }6 public String toString() {return "Paciente nmero "+this.numero+" | ";7 }8 }
1 package ejemplos.tema1;2 import librerias.estructurasDeDatos.lineales.*;3
4 public class GestorDePacientes {5
6 private Cola q; private double horaCita;7 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
Exemple mitjanant herncia
1 package librerias.estructurasDeDatos.modelos;2
3 public interface ColaPlus extends Cola {4 int talla();5 }
1 package l i b r e r i a s . estructurasDeDatos . l i n e a l e s ;2 impor t l i b r e r i a s . estructurasDeDatos . modelos . ;34 p u b l i c c lass ArrayColaPlus extends ArrayCola implements ColaPlus , Cola {5 p u b l i c f i n a l i n t t a l l a ( ) {6 r e t u r n super . t a l l a ;7 }8 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
Exemple mitjanant import1 package ejemplos . tema1 ;23 impor t l i b r e r i a s . estructurasDeDatos . modelos . ;4 impor t l i b r e r i a s . estructurasDeDatos . l i n e a l e s . ;56 p u b l i c c lass TestEDACola {7 p u b l i c s t a t i c vo id main ( S t r i n g args [ ] ) {8 Cola< In teger > q = new ArrayCola < In teger > ( ) ;9 System . out . p r i n t l n ( " Creada una Cola con "+q . t a l l a ( )+ " In teger , q = [ "+q . t o S t r i n g ( )+ " ] " ) ;
10 q . enco lar (new In tege r ( 1 0 ) ) ; q . enco lar (new In tege r ( 2 0 ) ) ; q . enco lar (new In tege r ( 3 0 ) ) ;11 System . out . p r i n t l n ( " La Cola de In tege r ac tua l es q = [ "+q . t o S t r i n g ( )+ " ] " ) ;12 System . out . p r i n t l n ( " Usando o t ros mtodos para mostrar sus Datos e l resu l tado es . . . " ) ;13 S t r i n g datosQ = " " ;14 whi le ( ! q . esVacia ( ) ) {15 In tege r pr imero = q . pr imero ( ) ;16 i f ( pr imero . equals ( q . desencolar ( ) ) ) datosQ += pr imero+" " ; e lse datosQ += "ERROR " ;17 }18 System . out . p r i n t l n ( " e l mismo , "+datosQ+" , PERO q se vaca , q = [ "+q . t o S t r i n g ( )+ " ] " ) ;19 }20 }
Nota: mitjanant import sols es poden usar el mtodes duna interface, per capdels restants mtodes que implementen la interface
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
Exercici. Llista amb punt dintersCol lecci delements representada com una seqncia lineal on cada elementest caracteritzat per la seu posici. Hi ha una posici destacada en la seqncia(Punt dinters -PI-)
Laccs a lelement que ocupa el PI es fa en temps constant
A Linici de la gesti seqencial, el PI est situat sobre el primer dels elementsde la seqncia
Per a accedir al segent element duna llista es desplaa el PI una posici
A linserir, recuperar o eliminar un element duna llista el PI no es mou
Si una llista est buida o laccs seqncial ha arribat a la fi de la seqncia,aleshores no hi ha cap dada apuntada pel PI
Completa aquesta classe amb el fitxer LEGListaConPI.java
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
3. s de la jerarquia Java duna EDA
1 package l i b r e r i a s . estructurasDeDatos . modelos ;23 p u b l i c i n t e r f a c e ListaConPI {4 / / mtodos Modi f icadores de l estado de la L i s t a Con PI :5 / i n se r t a e en una L i s t a antes de l Elemento que ocupa su PI , que permanece6 i n a l t e r ado /7 void i n s e r t a r (E e ) ;8 / S I I ! esFin ( ) : e l im ina de una L i s t a e l Elemento que ocupa su PI , que permanece9 i n a l t e r ado /
10 void e l i m i n a r ( ) ;11 / / mtodos Modi f icadores de l estado de l PI de l a L i s t a :12 / s i t a e l PI de una L i s t a en su i n i c i o /13 void i n i c i o ( ) ;14 / S I I ! esFin ( ) : avanza e l PI de una L i s t a /15 void s i g u i e n t e ( ) ;16 / s i t a e l PI de una L i s t a en su f i n /17 void f i n ( ) ;18 / / mtodos Consul tores de l estado de la L i s t a Con PI :19 / S I I ! esFin ( ) : obt iene e l Elemento que ocupa e l PI de una L i s t a /20 E recuperar ( ) ;21 / comprueba s i e l PI de una L i s t a est en su f i n /22 boolean esFin ( ) ;23 / comprueba s i una L i s t a Con PI est vaca /24 boolean esVacia ( ) ;25 / devuelve l a t a l l a de una L is ta , o su nmero de elementos /26 i n t t a l l a ( ) ;27 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
4. Classes genriques restringides per Comparable
Mtode equals
1 public boolean equals (Object obj)
Definit en la classe Object Al redefinir-lo sobt un Object
1 public class Rectangle extends Figura {2 protected double base, alaria;3 public boolean equals (Object obj) {4 return obj instanceof Rectangle &&5 this.base == ((Rectangle) obj).base &&6 this.alaria == ((Rectangle) obj).alaria;7 }8 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
4. Classes genriques restringides per Comparable
Interfcie Comparable
1 public interface Comparable {2 int compareTo (T o);3 }
T un sol mtode compareTo. Torna un enter negatiu, zero o positiu segonlargument rebut siga menor, igual o major que el propi objecte.
Saconsella que siga consistent amb equals: e1.compareTo(e2)==0 done elmateix resultat que e1.equals(e2).
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
4. Classes genriques restringides per Comparable
ExempleLa classe Figura Comparable
1 public abstract class Figura implements Comparable {2 ...3 public abstract double area ();4 final public int compareTo (Figura f) {5 double areaDelAltre = f.area(),6 areaDAquest = this.area();7 if (areaDAquest < areaDelAltre) return -1;8 if (areaDAquest > areaDelAltre) return 1;9 return 0;
10 }11 }
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
-
EDA
5. Interfcies estndard en la jerarquia de Java
Java t en la llibreria java.util les jerarquies Collection i Map per a representar imanipular colleccions de dades: List: collecci ordenada/seqncia Deque: fusi de model pila i cua
Map: pares (clau, valor)
Set: manipulaci de conjunts
J.A. Snchez, 5 de febrer de 2013 Tema 1. EDA en Java
top related