estructura de datos

Upload: beatriz-mata-chacon

Post on 08-Jan-2016

226 views

Category:

Documents


0 download

DESCRIPTION

Estructura de Datos

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