Code a priorità (comparatore) Set Mappe. TDA Priority Queue: def. informale
|
|
- Baldassare Fantoni
- 4 anni fa
- Visualizzazioni
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 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
DettagliEsercizio. 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
DettagliIl 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
DettagliDefinizione 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
DettagliIl 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
DettagliIl 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
DettagliDefinizione 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
DettagliDefinizione 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
DettagliADT 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
DettagliADT 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
DettagliCode 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
DettagliIl 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
DettagliList. 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
DettagliParte 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,
DettagliFondamenti 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
DettagliEsercizi 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
DettagliFondamenti 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
DettagliEsercizio. 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
DettagliImplementazione 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
DettagliProgrammazione 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
DettagliMetodi 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
DettagliListe 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
DettagliStrutture 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
DettagliSTRUTTURE 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
DettagliConoscere 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
DettagliImplementazione 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
DettagliIl 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
Dettaglisemplici 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
DettagliL 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
DettagliLINKEDLIST: 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
DettagliFondamenti 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
DettagliHeap 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
DettagliADT 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
DettagliE` 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
DettagliListe 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
Dettaglisemplici 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:
DettagliEsempi 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
DettagliCollezioni, 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
DettagliLa 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
DettagliCoda 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
DettagliStandard 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
DettagliInterfacce. 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
DettagliCoda 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
DettagliSET: 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
Dettagli18 - 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
DettagliDati 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
DettagliLezione 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
DettagliCorso: 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:
DettagliGerarchie 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
DettagliTDA 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
DettagliAlgoritmi 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
DettagliGenerics & 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
DettagliFondamenti 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,
DettagliEsercizi 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
Dettaglitipi 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
DettagliProgrammazione 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
DettagliEsercitazione 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
DettagliArray. 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
DettagliConcetti 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
Dettaglilezione 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
DettagliImplementazione 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
DettagliMap<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/
DettagliIntroduzione 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à.
DettagliCorso 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
Dettagli19 - 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
DettagliBinary 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
DettagliINFORMATICA 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,
DettagliTIPO 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,
DettagliFondamenti 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
DettagliLe 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
DettagliAlgoritmi 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
DettagliSTRUTTURE 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,
DettagliEsercitazione 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
DettagliSi 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
DettagliLe 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
DettagliImplementazione 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
DettagliSOMMARIO 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).
DettagliEsercitazione 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
DettagliStrutture 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
DettagliArray 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
DettagliProgrammazione 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
DettagliEsercitazione 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
DettagliProgrammazione 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.
DettagliLa 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
DettagliFondamenti 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
DettagliRicerca 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
DettagliEsercizi 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,
DettagliHandle 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
DettagliProgrammazione I - Preparazione A.A. 2010/2011
Programmazione I - Preparazione A.A. 2010/2011 3 febbraio 2011 Matricola:........................................................................ Cognome:........................................................................
DettagliCorso 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
DettagliAlberi. 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
DettagliEsercizio: 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.
DettagliImplementare 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
DettagliAlgoritmi 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
DettagliRicerca 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
DettagliEsempio 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
DettagliProgrammazione 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