Code a priorità (comparatore) Set Mappe. TDA Priority Queue: def. informale

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Code a priorità (comparatore) Set Mappe. TDA Priority Queue: def. informale"

Transcript

1 Oggi rivedremo Code a priorità (comparatore) Set Mappe TDA Priority Queue: def. informale Una coda a priorità (PQ) è un contenitore di elementi, ciascuno dei quali possiede una chiave (tipicamente numerica), che rappresenta una priorità. La chiave viene assegnata nel momento in cui l elemento è inserito nella coda (può essere modificata successivamente) Le chiavi determinano la priorità degli elementi, ovvero l ordine in cui vengono rimossi dalla coda (inserimenti arbitrari): rimuovo l elemento che ha la priorità maggiore. In realtà non c è una nozione di position, ma memorizzo gli elementi in base alle priorità. 2 1

2 Il TDA PriorityQueue Contenitore di oggetti Ogni oggetto è una coppia (key, value) [o anche (chiave, valore)], dove key è la priorità abbinata a value. Metodi principali insert(k, x) inserisce un oggetto (k, x) [inserisce il valore x con priorità k] removemin() [o anche extractmin()] rimuove l oggetto con chiave (key) più piccola, restituendo in output il suo valore 3 Due domande e due risposte 1. Come si fa ad associare le chiavi ai rispettivi valori? Si usa il design pattern Composition: un singolo oggetto è definito come composizione di altri oggetti public interface Entry { public Object key(); public Object element(); Interfaccia Java per gli oggetti della PQ 4 2

3 Due domande ancora senza risposta Come si confrontano le chiavi in modo da individuare la chiave più piccola? (Devo stabilire un criterio di confronto, cioè un ordine all interno della collezione, che consenta di confrontare una qualsiasi coppia di chiavi). Si usa il design pattern Comparator: consente di ordinare oggetti di una qualsiasi classe (anche quando non posso realizzare l interfaccia di Comparable). Il Comparatore fornisce le regole in base alle quali effettuare il confronto delle chiavi (la relazione d ordine totale) Relazione binaria riflessiva, antisimmetrica, transitiva (esiste il minimo). Indicata con 5 Ci sono diversi modi per confrontare le chiavi Vedere BENE dal testo/slides la discussione in merito ai vari modi per confrontare due oggetti (a seconda dell uso, a seconda del tipo) Vedere BENE dal testo/slides l esempio della classe per l ordinamento lessicografico dei punti tridimensionali 6 3

4 2.Design Pattern Comparator Ci consente di non fare riferimento alle chiavi per stabilire la regola di confronto. Un oggetto di tipo comparatore è esterno alle chiavi Permette di confrontare due chiavi (i.e., una generica coda a priorità usa un comparatore ausiliario per confrontare due chiavi) Il comparatore viene fornito al momento della costruzione della PQ La PQ può rimpiazzare un comparatore con un nuovo comparatore se diventa obsoleto o si vuole cambiarlo Interfaccia del TDA Comparator public interface Comparator { public int compare(object a, Object b); Se C è un oggetto di tipo comparatore, l invocazione di C.compare(a,b) restituisce un intero i, tale che i<o, se a<b; (a precede b, nell ordinamento) i=0, se a=b; (a e b sono uguali) i>0, se a>b. (a segue b nell ordinamento) C è errore se a e b non sono confrontabili. 8 4

5 Interfaccia/eccezioni per il TDA PQ public interface PriorityQueue { public int size(); public boolean isempty(); //restituisce il numero di entry della PQ //verifica se la PQ è vuota public Entry min() throws EmptyPQException; //restituisce, senza //rimuovere un oggetto di key minimo public Entry insert(object key, Object value) throws InvalidKeyException; //inserisce una coppia key-value e // restituisce l entry che ha creato public Entry removemin() throws EmptyPQException; //rimuove e // restituisce l entry con key minima. (ad esempio, se k è null o k è di una classe non compatibile con la classe delle altre chiavi nella PQ). 9 COME IMPLEMENTIAMO??? Due implementazioni usando liste (facili anche se non molto efficienti. Implementazione basata su heap: vedi nota sulle slides) Memorizziamo gli oggetti in una lista. Vedremo due realizzazioni, a seconda se vogliamo tenere traccia o no degli oggetti della lista ordinati sulle chiavi. Supponiamo che il confronto tra due chiavi è fatto in tempo O(1). 10 5

6 Implementazione PQ con una lista NON ORDINATA Memorizza gli oggetti (entry) della PQ in una lista L, implementata con una lista doppiamente concatenata, sulla quale non manteniamo l ordinamento Vantaggi/svantaggi: inserimento veloce, cancellazione lenta. Implementazione PQ con una lista ORDINATA Memorizza gli elementi della PQ in una lista (implementata come lista a doppi puntatori) per valore di chiave in ordine non decrescente. In altre parole, il primo elemento della lista è l entry con la più piccola key. Vantaggi/Svantaggi: cancellazione veloce, inserimento lento. Precisamente: 11 Implementazione di PQ con lista ordinata (porzione del codice) public class SortedListPriorityQueue implements PriorityQueue protected List L; protected Comparator c; /** Inner class for entries */ protected static class MyEntry implements Entry { protected Object k; // key protected Object v; // value public MyEntry(Object key, Object value) { //costruttore k = key; v = value; // methods of the Entry interface public Object key() { return k; public Object value() { return v; 12 6

7 Implementazione di PQ con lista ordinata (porzione del codice) /** Inner class for a default comparator using the natural ordering */ protected static class DefaultComparator implements Comparator { public DefaultComparator() { /* default constructor */ public int compare(object a, Object b) throws ClassCastException { return ((Comparable)a).compareTo(b); 13 Implementazione di PQ con lista ordinata (porzione del codice) /**creazione di una PQ con il default comparator public SortedListPriorityQueue () { L= new NodeList(); c= new DefaultComparator(); /**creazione di una PQ con un dato comparator public SortedListPriorityQueue (Comparator comp){ L= new NodeList(); c= comp; public void setcomparator(comparator comp) throws IllegalStateException { if (!isempty()) throw new IllegalStateException( PQ is not empty"); c = comp; Osservazione: Questo metodo consente di cambiare il comparatore 14 abbinato ad una PQ. Perché è indispensabile che la PQ sia vuota? 7

8 Implementazione di PQ con lista ordinata (porzione del codice) public int size() {return L.size(); public boolean isempty() {return L.isEmpty(); public Entry min() throws EmptyPQException { if (L.isEmpty()) throws EmptyPQException( PQ vuota, non c è minimo ); else return (Entry) L.first().element(); public Entry removemin() throws EmptyPQException { if (L.isEmpty()) throws EmptyPQException( PQ vuota, non c è minimo ); else return (Entry) (L.remove(first())); /** Auxiliary method that returns the key stored at a given node. */ protected Object key(position pos) { return ((Entry) pos.element()).key(); 15 /** Inserts a key-value pair and return the entry created. */ public Entry insert(object k, Object v) throws InvalidKeyException { checkkey(k); // scrivetelo voi Entry entry = new MyEntry(k, v); insertentry(entry); return entry; /** Auxiliary method used for insertion. */ protected void insertentry(entry e) { Object k = e.key(); if (L.isEmpty()) { L.insertFirst(e); // insert into empty list else if (c.compare(k, key(l.last())) > 0) { L.insertLast(e); // insert at the end of the list else { Position curr = L.first(); while (c.compare(k, key(curr)) > 0) { curr = L.after(curr); // advance toward insertion position L.insertBefore(curr, e); 16 8

9 Rivedete voi la discussione su setcomparator(c): si può settare il comparatore anche se ho un solo oggetto nella PQ, piuttosto che nessuno. Posso avere due entry (k,v) e (k,v) con lo stesso value, contemporaneamente nella PQ (il metodo insert(k,v) non controlla se c è un entry che ha già v come value). Perché? Se voglio usare la PQ per implementare Prim o Dijkstra, non va bene avere duplicati su un certo v: aggiungo un metodo Decrease-Key(k1,v) [se c è (k,v), DOPO ho (k1,v)] Il testo presenta le Code a Priorità adattabili (paragrafo 7.4) in cui devo gestire situazioni più vincolate (rivedetela voi dalle slides ) Implementare PQ-Sort con: UnsortedListPriorityQueue (Selection Sort) SortedListPriorityQueue (Insertion Sort) 17 Appello riservato Scrivere un metodo removein(object x, Object y) che, invocato su una coda a priorità, restituisce un iteratore degli elementi (values) che hanno chiave compresa tra x e y, estremi inclusi, secondo l'ordine definito. Per effettuare i confronti, occorre usare il comparatore della coda a priorità (si supponga che si chiami Comp). Il metodo proposto deve usare i metodi dell'interfaccia del TDA Priority Queue e del TDA Entry per risolvere l'esercizio. Il metodo deve lasciare inalterato il contenuto della coda a priorità su cui il metodo è invocato (può modificarlo durante). Soluzione mostrata in aula 18 9

10 VI Appello (ultimo fatto) Scrivere un metodo int PrimiNumeri(int k) che, invocato su una sequenza contenente interi, restituisce la somma dei k interi più piccoli che sono presenti nella sequenza. Ad esempio, se il metodo viene invocato sulla sequenza S = (45, 3, 3, 3, 4, 44, 5, 6, 6, 14, 14, 16, 42) con k = 1, allora il metodo restituirà 3. Se invece viene invocato con k = 10, il metodo restituirà = 74. Il metodo proposto deve usare i metodi dell interfaccia del TDA Sequence per risolvere il quesito. Si possono usare altri TDA di appoggio, ma non array. Prestare particolare attenzione alle condizioni di errore (da gestire come eccezioni). Il metodo non deve modificare il contenuto della sequenza su cui il metodo è invocato (può modificarlo durante). Soluzione mostrata in aula Interfaccia TDA Set E un contenitore di oggetti distinti (non ci sono duplicati) non ordinati supporta le seguenti operazioni: Sia A un oggetto di tipo Set public interface Set { // Restituisce il numero degli elementi nell insieme public int size(); // Restituisce true se l insieme è vuoto public boolean isempty(); // Restituisce l unione di this e B public Set union(set B) // Restituisce l intersezione di this e B public Set intersect(set B) // Restituisce differenza di this e B public Set subtract(set B) 10

11 Implementazione del TDA Set con sequenza ordinata Occorre definire una relazione di ordine sugli elementi dell insieme (una qualsiasi va bene ) Usare una variabile istanza per la sequenza La classe che implementa il TDA Set avrà anche una variabile di istanza di tipo Comparator per confrontare gli elementi in base alla relazione di ordine desiderata Quindi: non implementiamo una classe Set per ciascun tipo di oggetti che si vuole usare e per ciascun modo di confrontare ciascun tipo di oggetti il metodo di confronto non dipenderà dal contesto e potrebbe anche non essere stato previsto al momento della creazione della classe Implementazione del TDA Set con sequenza ordinata Qual è la strategia usata per l implementazione dei metodi? In realtà ogni operazione che dobbiamo implementare (unione, intersezione e differenza tra due insieme), richiede che si sostituisca uno dei due (quello su cui si invoca il metodo) o se ne crei un altro - con il risultato dell operazione. Quindi da due insiemi distinti se ne crea uno, con la modalità dettata dalla operazione insiemistica invocata. Si tratta perciò di FONDERE due insiemi, dove fondere assume significati diversi a seconda dell operazione. 11

12 Implementazione del TDA Set con sequenza ordinata Specializzo un algoritmo generale ridefinendo alcuni passi Procediamo in questo modo (template method pattern): 1. Scriviamo una classe astratta contenente un metodo genericmerge. Si tratta di una versione generica dell algoritmo merge usato nel MergeSort. 2. Si specializza questa classe scrivendo TRE sottoclassi distinte, una per ogni metodo. Infatti ogni operazione fonde gli elementi di due insiemi, seguendo criteri diversi. Dunque le sottoclassi specializzano genericmerge rispettivamente in o Union o Intersect o subtract genericmerge: O(nA + nb) Dove na e nb sono il numero di elementi di A e di B rispettivamente Dunque le operazioni di union, intersect e subtract possono essere implementate in O(n) Implementazione del TDA Set con sequenza ordinata /** Generic merge per sequenze ordinate. */ public abstract class Merge { private Object a, b; // elementi correnti in A e B private Iterator itera, iterb; // iteratori per A e B... (continua nelle prossime slides) 12

13 Implementazione: template method public void merge(sequence A, Sequence B, Comparator comp, Sequence C) { itera = A.elements(); iterb = B.elements(); boolean aexists = advancea(); // Boolean test if there is a current a boolean bexists = advanceb(); // Boolean test if there is a current b while (aexists && bexists) { // Main loop for merging a and b int x = comp.compare(a, b); if (x < 0) { aisless(a, C); aexists = advancea(); else if (x == 0) { bothareequal(a, b, C); aexists = advancea(); bexists = advanceb(); else { bisless(b, C); bexists = advanceb(); while (aexists) { aisless(a, C); aexists = advancea(); while (bexists) { bisless(b, C); bexists = advanceb(); Implementazione: metodi ausiliari protected void aisless(object a, Sequence C) { protected void bothareequal(object a, Object b, Sequence C) { protected void bisless(object b, Sequence C) { Saranno specializzati nelle sottoclassi private boolean advancea() { if (itera.hasnext()) { a = itera.next(); return true; return false; Metodi ausiliari private boolean advanceb() { if (iterb.hasnext()) { b = iterb.next(); return true; return false; 13

14 Implementazione: specializzazioni /** Classe che specializza il genericmerge per l UNIONE di 2 insiemi */ public class UnionMerge extends Merge { protected void aisless(object a, Sequence C) { C.insertLast(a); // add a protected void bothareequal(object a, Object b, Sequence C) { C.insertLast(a); // add a (but not its duplicate b) protected void bisless(object b, Sequence C) { C.insertLast(b); // add b public class IntersectMerge extends Merge public class SubtractMerge extends Merge Implementazione interfaccia Set public class SortedListSet implements Set{ protected Sequence L; protected Comparator comp; protected int size; /** Inner class for a default comparator using the natural ordering */ protected static class DefaultComparator implements Comparator { public DefaultComparator() { /* default constructor */ public int compare(object a, Object b) throws ClassCastException { return ((Comparable)a).compareTo(b); \\ inserire i costruttori Fate voi! public int size() { return L.size(); public boolean isempty() { return L.isEmpty(); public Sequence getstructure() { return L; 14

15 Implementazione interfaccia Set public Set union(set B) { UnionMerge U = new UnionMerge(); Set C = new // invoco uno dei costruttori U.merge(this.getStructure(), B.getStructure(), comp, C.getStructure()); SortedListSet newset=new //invoco uno dei costruttori return newset; public Set intersect(set B) { public Set subtract(set B) { TDA MAP: definizione Il TDA Map è un contenitore di oggetti (Entry) che sono coppie chiave-valore (k,v) Sia la chiave k sia il valore v possono essere oggetti qualsiasi. Differenza con PQ: non sono consentite più entry con la stessa chiave k. Esempio di applicazione: Mappa che conserva le informazioni sugli studenti (ad esempio, nome, cognome, indirizzo, esami, numero di matricola ): la chiave potrebbe essere il numero di matricola. (Infatti non consentiamo a due persone (valori) di avere la stessa matricola (key)). 15

16 Operazioni sul TDA Map Le operazioni principali da fare su un TDA Map sono di ricerca, inserimento e cancellazione di elementi. size(), isempty() keys(): restituisce un iteratore delle chiavi di M values(): restituisce un iteratore dei valori di M get(k): Se la mappa M ha l entry con chiave k, restituisce il valore associato, altrimenti null. put(k, v): Inserisce l entry (k, v) nella mappa M. Se la chiave k non è già presente in M, restituisce null; altrimenti restituisce il vecchio valore associato a k. remove(k): Se nella mappa M c è un entry con chiave k, si rimuove l entry con chiave k e si restituisce il valore associato. Altrimenti si restituisce null. Osservazione su null Abbiamo visto che le operazioni get(k), put(k,v) e remove(k) se eseguite su una mappa M che non contiene un entry con chiave k, restituisce null Si tratta di un value speciale, detto sentinella. Questo significa che potrebbe esserci ambiguità con l entry (k,null), ossia con value null [poco appropriato] Se si vuole mantenere questa possibilità, si può pensare ad un eccezione. 16

17 Interfaccia per il TDA Map public interface Map { public int size(); //restituisce il numero di entry della Map public boolean isempty(); //verifica se la Map è vuota //inserisce una coppia key-value e rimpiazza il value precedente, se k //c è già, altrimenti null. public Object put(object key, Object value) throws InvalidKeyException; //Restituisce il value associato a k public Object get(object key) throws InvalidKeyException; //Cancella la coppia (chiave-valore) specificata da key public Object remove(object key) throws InvalidKeyException; public Iterator keys(); public Iterator values(); //Restituisce un iteratore delle chiavi della mappa //Restituisce un iteratore dei valori della mappa COME IMPLEMENTIAMO??? Cose abbastanza naturali 1. Una entry della mappa viene rappresentata dalla classe MyEntry, come fatto per le code a priorità. public interface Entry { public Object key(); public Object element(); L implementazione sarà una classe interna, come per le code a priorità. 17

18 COME IMPLEMENTIAMO??? Cose abbastanza naturali 2. I metodi presenti nell interfaccia Map devono lanciare l eccezione InvalidKeyException se la chiave specificata non è valida per il contenitore in esame. Ma qual è qui il criterio di validità???? 3. Il metodo checkkey dovrà solo controllare che k non è null, non c è bisogno di una relazione d ordine totale tra le chiavi Abbiamo bisogno di confrontare le chiavi. Dobbiamo decidere se due chiavi sono uguali. Se le chiavi hanno una relazione d ordine totale determinata da qualche comparatore C, possiamo usare C.compare(k1,k2) e vedere quando ritorna 0 ma non conviene. Per una mappa generica, possiamo usare un oggetto EQUALITY TESTER che supporta l operazione isequalto(k1,k2) sulle chiavi. Potremmo anche usare il metodo equals di Java, ma non è generale. 18

19 Abbiamo bisogno di confrontare le chiavi. Quando creiamo una mappa M, abbiniamo un EQUALITY TESTER basato su un comparatore. Nelle slides successive, usiamo = per testare l uguaglianza. Nell implementazione Java possiamo fare come per la coda a Priorità, ossia protected static class DefaultEqualityTester implements EqualityTester{ public DefaultEqualityTester() { /* default constructor */ Interfaccia da scrivere public boolean isequalto(object a, Object b) throws ClassCastException { return (a.equals(b)); Confronto con il package java.util.map Metodi del TDA Map size() isempty() get(k) put(k,v) remove(k) keys() values() Metodi java.util.map size() isempty() get(k) put(k,v) remove(k) keyset().iterator() values().iterator() Inoltre, non si usa un Equality Tester esterno, ma solo il metodo equals (se non è appropriato per il nostri oggetti vedi esempio dei punti nel piano occorre sovrascriverlo ) 19

20 Un implementazione basata su liste Possiamo implementare efficientemente il TDA Map usando una lista non ordinata (implementata come lista doppiamente-linkata) Memorizziamo gli elementi della mappa in una lista senza un ordinamento header nodes/positions trailer 9 a 6 c 5 f 8 d entries Esistono implementazioni migliori (basate su tabelle hash) Algoritmo get(k) [compl. O(size)] Algorithm get(k): B = M.positions() //B è un iteratore delle posizioni in M while B.hasNext() do p = B.next() //la prossima posizione in B if (p.element().key() == k) then return (p.element()).value() return null //non ci sono entry con chiave uguale a k 20

21 Algoritmo remove(k) [compl. O(size)] Algorithm remove(k): B =M.positions() while B.hasNext() do p = B.next() if (p.element().key() == k) then t = p.element().value() M.remove(p) size = size 1 return t return null //non c erano entry con chiave k Algoritmo put(k,v) [compl. O(size)] Algorithm put(k,v): B = M.positions() while M.hasNext() do p = B.next() if (p.element().key() == k) then t = p.element().value() M.replace(p,(k,v)) //come implemento??? Esercizio. return t M.insertLast((k,v)) size = size + 1 return null //non c erano già value con chiave k 21

22 III appello Scrivere un metodo Iterator ShowValue(List KEY) che, invocato su una mappa M restituisce un iteratore dei value le cui chiavi sono conservate nella lista KEY (se una chiave in KEY non è presente in M, si dovrà avere null come valore associato). Il metodo proposto deve usare i metodi dell'interfaccia del TDA Map e del TDA List per accedere alla mappa e alla lista e risolvere l'esercizio. Il metodo non deve modificare il contenuto della mappa su cui viene invocato (può modificarlo durante). Soluzione mostrata in aula III appello Scrivere un metodo void removemaxocc() che, invocato su una lista contenente interi, in cui ogni elemento può occorrere più volte, cancella dalla lista tutte le occorrenze dell'elemento che ha occorrenza massima. Per semplicità, si può supporre che l'elemento di occorrenza massima sia unico (ad esempio, non posso avere nella lista (1; 1; 3; 1; 3; 3; 2), essendo sia 1 sia 3 due elementi di occorrenza massima). Ad esempio, se si invoca il metodo sulla lista L = (3; 1; 4; 3; 5; 6; 3; 3; 1; 7; 4), al termine dell'esecuzione del metodo si avrà L = (1; 4; 5; 6; 1; 7; 4) (l'elemento di occorrenza massima è 3). Il metodo proposto deve usare i metodi dell'interfaccia del TDA List per accedere alla lista. Deve produrre una modifica della lista su cui si invoca il metodo. Si richiede di usare il TDA Map come struttura di appoggio. Metodi che non usano il il TDA Map non saranno valutati. Giusticare la richiesta di tale struttura di appoggio. Soluzione mostrata in aula 44 22

TDA Priority Queue. Situazioni concrete. Definizione. Alta priorità come trovarla? Relazione di ordine totale ( ) Le implementazioni che vedremo

TDA Priority Queue. Situazioni concrete. Definizione. Alta priorità come trovarla? Relazione di ordine totale ( ) Le implementazioni che vedremo TDA Priority Queue TDA Coda a priorità [GT3, cap.7,7.1-7.2] Situazioni concrete La vita è piena di decisioni ognuno ha le sue priorità Ad es., decidere se questo fine settimana studiare, dormire, uscire

Dettagli

Esercizio. Strutture Dati

Esercizio. Strutture Dati Esercizio Si scriva un metodo public Position sibling(position v) che preso in input un nodo v restituisca il fratello di v. Il metodo dovrà lanciare una BoundaryViolationException nel caso in cui

Dettagli

Il TDA Map. Tabelle hash

Il TDA Map. Tabelle hash Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica

Definizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash

Il TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale

Dettagli

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Definizione informale

Definizione informale Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati ADT Mappa Una mappa è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore ogni elemento (k,v) viene detto entrata (entry) della mappa entrate multiple con la

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa: Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi

Dettagli

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis Code a priorità Progettazione di Algoritmi 2018-19 Matricole congrue a 1 Docente: Annalisa De Bonis 26 Coda a priorità Una coda a priorità è un collezione di elementi a ciascuno dei quali è assegnata una

Dettagli

Il TDA List è la versione orientata agli oggetti della struttura dati lista. Una sequenza di nodi

Il TDA List è la versione orientata agli oggetti della struttura dati lista. Una sequenza di nodi List Il TDA List Il TDA List è la versione orientata agli oggetti della struttura dati lista Una sequenza di nodi La versione astratta del nodo sarà il TDA Position Possiamo scrivere dei metodi che prendono

Dettagli

List. Il TDA List. Interfaccia Position. Il TDA Position. Il TDA List 1. Ancora su Position

List. Il TDA List. Interfaccia Position. Il TDA Position. Il TDA List 1. Ancora su Position Il TDA List List Il TDA List è la versione orientata agli oggetti della struttura dati lista Una sequenza di nodi La versione astratta del nodo sarà il TDA Position Possiamo scrivere dei metodi che prendono

Dettagli

Parte di laboratorio

Parte di laboratorio Ultima lezione Parte di laboratorio Alcuni hints per l implementazione di DecoratedGraph 1 Uso delle Mappe per decorare Sia p la posizione di un nodo. Posso considerare una mappa con chiavi (Object) COLORE,

Dettagli

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Fondamenti di Informatica T-1 Interfaccia Comparable e Collezioni Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 22 Interfaccia

Dettagli

Esercizi proposti per il corso di Strutture Dati

Esercizi proposti per il corso di Strutture Dati Esercizi proposti per il corso di Strutture Dati 2010-2011 Da ricordare: 1. Non modificare il contenitore su cui si invoca il metodo: significa che posso eventualmente modificarlo durante l esecuzione

Dettagli

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni Fondamenti di Informatica T1 Interfaccia Comparable Collezioni Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 19 Interfaccia Comparable Fa

Dettagli

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati Esercizio Scrivere una classe ListMap che implementa la mappa con una lista Esercizio Si scriva un metodo public static PositionList preorder(linkedbinarytree T) che preso in

Dettagli

Implementazione con alberi binari di ricerca

Implementazione con alberi binari di ricerca public class LinkedBinaryTree implements BinaryTree { /** Espande una foglia in un nodo interno con due foglie come figli */ public void expandexternal(position v, E l, E r) throws InvalidPositionException

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Tecniche di Programmazione: Collezioni Parte b versione 2.3 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi

Dettagli

Metodi di una Collection

Metodi di una Collection Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare

Dettagli

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti: Liste concatenate Collezione ordinata di nodi head tail next next next next element element element element Ø Anna Carlo Paolo Simona ciascun nodo contiene due riferimenti: - un riferimento "element" a

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

Dettagli

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE DATI: OLTRE GLI ARRAY LISTE STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi

Dettagli

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione 1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere

Dettagli

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista Liste concatenate Implementazione della coda con liste concatenate head (front della coda) tail (rear della coda) Ø e y a x v il front della coda è memorizzato nel primo nodo (head) della lista il rear

Dettagli

Il tipo astratto di dati Node List

Il tipo astratto di dati Node List Il tipo astratto di dati Node List Tipo di dati e operazioni Tipi di dati: oggetti arbitrari (come al solito) Operazioni: Metodi generici: - integer size() - boolean isempty() Metodi di accesso: - Position

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli

Dettagli

L ADT Priority Queues Implementazione di PQ mediante Sequenza Alberi Heap Heap Sort Adaptable Priority Queues

L ADT Priority Queues Implementazione di PQ mediante Sequenza Alberi Heap Heap Sort Adaptable Priority Queues Priority Queues L ADT Priority Queues Implementazione di PQ mediante Sequenza Alberi Heap Heap Sort Adaptable Priority Queues Chiavi, Priorità, Ordinamento Totale ( 8..) Chiave (key) oggetto assegnato

Dettagli

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR

LINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR LINKEDLIST: iteratore Il metodo iterator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public Iterator iterator() { return new

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

Dettagli

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

Dettagli

ADT albero binario completo

ADT albero binario completo ADT albero binario completo Un albero binario completo è un albero binario in cui ogni livello, fino al penultimo, è completamente riempito. L'ultimo livello è riempito da sinistra a destra a 1 nodo b

Dettagli

E` un tipo astratto di dati che supporta tutti i metodi dell'adt Array list e dell'adt Lista di nodi più i seguenti:

E` un tipo astratto di dati che supporta tutti i metodi dell'adt Array list e dell'adt Lista di nodi più i seguenti: E` un tipo astratto di dati che supporta tutti i metodi dell'adt Array list e dell'adt Lista di nodi più i seguenti: Position atindex(int r): restituisce la posizione dell'elemento di indice r; si verifica

Dettagli

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione Liste doppie GT: 6.2 (e 3.3) Doubly Linked Lists 1 Argomenti della lezione ADT Position NodeList interface Position PositionList class DNode NodePositionList inserzione rimozione Iteratore ADT Iterator

Dettagli

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente

semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente 1 of 23 22/11/2004 10.23 Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica Lista semplice:

Dettagli

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Dettagli

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella) , mappe e iteratori (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere

Dettagli

La Standard Template Library Heap, algoritmi e funtori

La Standard Template Library Heap, algoritmi e funtori La Standard Template Library Heap, algoritmi e funtori Pericle Perazzo 27 maggio 2011 Riassunto contenitori e iteratori Un contenitore è un oggetto che contiene un insieme di altri oggetti di tipo omogeneo

Dettagli

Coda a doppio ingresso (Deque)

Coda a doppio ingresso (Deque) Coda a doppio ingresso (Deque) Definizione informale Una coda a doppio ingresso o Deque è un TDA simile alla Coda che supporta inserimenti e cancellazioni ad entrambe le estremità Deque si pronuncia deck

Dettagli

Standard Template Library

Standard Template Library Standard Template Library Standard Template Library Progettata per gestire insiemi di dati in modo comodo ed efficiente senza conoscere dettagli implementativi Fa parte dello standard C++ È basata a sulla

Dettagli

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I { Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi

Dettagli

Coda a doppio ingresso (Deque)

Coda a doppio ingresso (Deque) Coda a doppio ingresso (Deque) Definizione informale Una coda a doppio ingresso o Deque è un TDA simile alla Coda che supporta inserimenti e cancellazioni ad entrambe le estremità Deque si pronuncia deck

Dettagli

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.

SET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme. INTRODUZIONE Il tipo di dati astratto insieme (set) definisce operazioni, quali inserimento e rimozione, su collezioni di oggetti che presentano molteplicità uno, cioè non sono ammessi duplicati. Una possibile

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

Dati e Algoritmi 1: A. Pietracaprina. Mappa (I parte)

Dati e Algoritmi 1: A. Pietracaprina. Mappa (I parte) Dati e Algoritmi 1: A. Pietracaprina Mappa (I parte) 1 Mappa In generale, una Mappa è una collezione di entry che supporta, come metodi principali: ricerca, inserimento, rimozione. Gradi di libertà: Universo

Dettagli

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 15 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO Il modificatore abstract Le classi

Dettagli

Corso: Strutture Dati Docente: Annalisa De Bonis

Corso: Strutture Dati Docente: Annalisa De Bonis Heap Corso: Strutture Dati Docente: Annalisa De Bonis Definizione l Un heap è un albero binario che contiene entrate della forma (key, value) nei suoi nodi e soddisfa le seguenti proprietà: l Heap-Order:

Dettagli

Gerarchie e polimorfismo: liste

Gerarchie e polimorfismo: liste Gerarchie e polimorfismo: liste 1 Generalizzare le liste di interi List lista di oggetti non modificabile vorremo poi definire un sottotipo versione ordinata 2 List classe astratta usate i sottotipi per

Dettagli

TDA Position (TDA List Sequence)

TDA Position (TDA List Sequence) TDA Position (TDA List Sequence) [GT3, 5.3] TDA Position: motivazione Vediamo se e come è possibile definire qualcosa che ci permetta di accedere ai nodi in tempo costante (quasi come in un array ) conservando

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i

Dettagli

Generics & Collections

Generics & Collections Generics & Collections Ingegneria del software Jody Marca jody.marca@polimi.it I Generics 2 I Generics rendono possibile definire tipi parametrici tramite classi ed interfacce che gestiscono tipi generici

Dettagli

Fondamenti di Informatica T1 Mappe

Fondamenti di Informatica T1 Mappe Fondamenti di Informatica T1 Mappe Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 16 Mappe Matrice N x 2 : Gli elementi della prima colonna,

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica

Dettagli

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Array. Walter Didimo

Array. Walter Didimo Array Walter Didimo Un problema ricorrente Gli strumenti di programmazione che abbiamo visto sin qui non sono ancora sufficienti per risolvere tutti i problemi di base Consideriamo ad esempio il seguente

Dettagli

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli

Dettagli

lezione 5 Tipo di dato Lista Liste

lezione 5 Tipo di dato Lista Liste lezione 5 Liste Tipo di dato Lista Una lista permette di memorizzare dati in maniera sequenziale e permette di inserire, accedere e cancellare dati in posizioni arbitrarie (non come nel caso di pile e

Dettagli

Implementazione Java di un ADT

Implementazione Java di un ADT Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice

Dettagli

Map<K,V> ESERCITAZIONE. Dalla documentazione Java 02/04/15

Map<K,V> ESERCITAZIONE. Dalla documentazione Java 02/04/15 ESERCITAZIONE Map Dalla documentazione Java o public interface Map o An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. o h-ps://docs.oracle.com/javase/8/docs/api/java/

Dettagli

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011 13 aprile 2011 Cos è una collezione? Gerarchia delle collezioni Introduzione Una collezione è semplicemente un oggetto che raggruppa più oggetti (detti elementi della collezione) in una singola unità.

Dettagli

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map Corso di Algoritmi e Strutture Dati con Laboratorio The JCF(continua): L interfaccia Map Unamappaè unaraccolta (oggetto che contiene elementi: es: array, oggetto di tipo Collection) in cui ogni elemento

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Binary Search Trees ( 10.1)

Binary Search Trees ( 10.1) Binary Search Trees ( 10.1) Binary Search Trees AVL Trees Multy-ay Search Trees < > 1 4 = (,4) Trees External Searching Red-Black Trees 1 Dictionary ADT (.3) L ADT dizionario (Dictionary ADT) modella una

Dettagli

INFORMATICA III Parte B -Progettazione e Algoritmi

INFORMATICA III Parte B -Progettazione e Algoritmi INFORMATICA III Parte B -Progettazione e Algoritmi Implementazione di codice algoritmico in Java Patrizia Scandurra patrizia.scandurra@unibg.it Università degli Studi di Bergamo a.a. 2010-11 Stessa interfaccia,

Dettagli

TIPO DI DATO ASTRATTO

TIPO DI DATO ASTRATTO TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,

Dettagli

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Fondamenti di Informatica T-1 Collezioni, Mappe e Iteratori Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2016/2017 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 14 Interfaccia

Dettagli

Le liste. Le liste linkate

Le liste. Le liste linkate Le liste Le liste linkate Molto spesso bisogna gestire insiemi di oggetti dello stesso tipo. Un modo molto semplice per tenere in memoria tali insiemi consiste nel creare un array per contenerli. Nome

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

Dettagli

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè STRUTTURE DINAMICHE (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè DIFFERENZE RISPETTO AD ARRAY Finora le collezioni di dati sono state dichiarate come array (di stringhe,

Dettagli

Esercitazione 5 Alberi Binari di Ricerca

Esercitazione 5 Alberi Binari di Ricerca Esercitazione 5 Alberi Binari di Ricerca Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 11 Maggio 2016 Sommario Scopo di questa esercitazione è realizzare una struttura

Dettagli

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato

Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Le tavole hash È il modo con cui sono realizzati gli HashSet Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Principio base Gli array hanno le caratteristiche

Dettagli

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5 Le liste ADT e strutture dati per la rappresentazione di sequenze L ADT delle liste Una lista di valori di tipo A è una sequenza finita: a1, a2, L, an dove ai A, per ogni i valore lunghezza posizione L

Dettagli

Implementazione ADT: Alberi

Implementazione ADT: Alberi Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice

Dettagli

SOMMARIO STACK. STACK: specifica STACK

SOMMARIO STACK. STACK: specifica STACK SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Strutture dati: array & co.

Strutture dati: array & co. Strutture dati: array & co. Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino baldoni@di.unito.it http://www.di.unito.it/~baldoni/didattica

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 17 A. Miola Gennaio 2012 1 Contenuti q Array paralleli q Array e oggetti q Ricerca sequenziale q Ricerca binaria q Fusione di sequenze

Dettagli

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Programmazione in Java (I modulo) Lezione 20: Ereditarietà Programmazione in Java (I modulo) Lezione 20: Ereditarietà Ereditarietà (Inheritance) Il programmatore definisce una classe generale In seguito definisce una classe più specifica Aggiungo soltanto nuovi

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe/array Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Programmazione a Oggetti Metodologie di Programmazione 14 Maggio 2012

Programmazione a Oggetti Metodologie di Programmazione 14 Maggio 2012 Programmazione a Oggetti Metodologie di Programmazione 14 Maggio 2012 Nome: Matricola: Metodologia di Programmazione [ ] Programmazione a Oggetti [ ] Istruzioni Scrivete il vostro nome sul primo foglio.

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi)

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Tabelle Hash Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,

Dettagli

Handle di Funzioni Università degli Studi di Milano

Handle di Funzioni Università degli Studi di Milano Handle di Funzioni Versioni recenti di Matlab definiscono in modo pieno il tipo funzione, permetto di assegnare a variabili valori di tipo funzione definire funzioni che ricevono parametri di tipo funzione

Dettagli

Programmazione I - Preparazione A.A. 2010/2011

Programmazione I - Preparazione A.A. 2010/2011 Programmazione I - Preparazione A.A. 2010/2011 3 febbraio 2011 Matricola:........................................................................ Cognome:........................................................................

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 04 Introduzione ai Tipi astratti di dato A. Miola Febbraio 2007 http://www.dia.uniroma3.it/~java/fondinf2/ Introduzione ADT 1

Dettagli

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica Il TDA Tree Alberi In informatica, un albero è un modello astratto di una struttura dati gerarchica Struttura dati non lineare Si pensi al file system di un sistema operativo Le relazioni in un albero

Dettagli

Esercizio: Lista Circolare

Esercizio: Lista Circolare Esercizio: Lista Circolare Si realizzi in Java un gestore di una lista circolare. La dimensione minima della lista è 2 elementi (ed è anche la dimensione iniziale). La dimensione massima è 20 elementi.

Dettagli

Implementare un'interfaccia

Implementare un'interfaccia Le interfacce Un metodo astratto è un metodo senza corpo, con un ";" dopo l'intestazione. Una interfaccia (interface) in Java ha una struttura simile a una classe, ma può contenere SOLO costanti e metodi

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il

Dettagli

Ricerca in una sequenza ordinata

Ricerca in una sequenza ordinata Ricerca su array ordinata Ricerca in una sequenza ordinata Se la sequenza è ordinata posso sfruttare l ordinamento per rendere più efficiente la ricerca, terminando se l elemento corrente risulta maggiore

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Programmazione a Oggetti. Astrazione sui Dati e Iteratori

Programmazione a Oggetti. Astrazione sui Dati e Iteratori Programmazione a Oggetti Astrazione sui Dati e Iteratori Sommario Astrazione sui dati Specifica di classi Invariante di rappresentazione Funzione di astrazione Iteratori inner classes astrazione sul controllo

Dettagli