AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.

Slides:



Advertisements
Presentazioni simili
Argomenti della lezione
Advertisements

Tipi di dato astratti Lista, Pila, Coda, Albero.
Strutture dati lineari
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Semantica Operazionale di un frammento di Java: lo stato
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Strutture dati elementari
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Tail recursion: esempio
1 Corso di Informatica (Programmazione) Esercitazione 1 (26 novembre 2008)
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
tipo astratto, implementazione, algoritmi
Argomenti della lezione
Algoritmi e Strutture Dati
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro.
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
Algoritmi e strutture dati
Corso di informatica Athena – Periti Informatici
Heap Ordinamento e code di priorità Ugo de Liguoro.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Conversione da base 10 a base X (Utilizzo della pila)
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Esercizi.
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Polimorfismo Significato Significato Varie famiglie Varie famiglie Polimorfismo in java Polimorfismo in java Polimorfismo di Sottotipo: Apparato in Java.
1 Un esempio con iteratore: le liste ordinate di interi.
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Algoritmi e Strutture Dati Strutture Dati Elementari.
1. 2 Ricordiamo che: La pila o stack è una struttura astratta composta da più elementi omogenei. Una pila è uno stack di dati con accessi del tipo LIFO.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
LIP: 9 Maggio Esercizi Riprendiamo un esercizio proposto Definire un tipo di dato Persona che definisce oggetti che rappresentano le informazioni.
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Lezione X Laboratorio di Programmazione. Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
1. Esempio di compito d’Esame 1.Indicare un esempio di caso peggiore per l’algoritmo di Quicksort. 2.Scrivere un metodo per il calcolo del predecessore.
Grafi: rappresentazione e visita
ADT 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 24 Introduzione ai.
Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro

AlgoLab - Pile e Code Pile: definizione informale Una pila è una struttura dati lineare, cui gli elementi possono essere aggiunti o sottratti da un solo estremo (LIFO).

AlgoLab - Pile e Code Operazioni sulle pile Una pila (stack) si definisce astrattamente come una struttura dati su cui siano definite alemeno quattro operazioni: 1.Push(e,s) :aggiunge e alla pila s 2.Pop(s) :elimina l’elemento emergente da s 3.Top(s) :ritorna il valore dell’emergente di s 4.IsEmpty(s):ritorna true se s non ha elementi. Nota: se s è vuota, Pop(s) e Top(s) sono indefinite.

AlgoLab - Pile e Code L’interfaccia Stack interface Stack { void push(Object newitem); // aggiunge newitem come emergente void pop(); // rimuove l’emergente dalla pila Object top(); // ritorna l’emergente senza rimuoverlo boolean empty(); // true se la pila e’ vuota }

AlgoLab - Pile e Code L’interfaccia List interface List { void cons (Object newitem); // aggiunge newitem in testa alla lista boolean insert(Object newitem, int index); // inserisce newitem alla pos. index; false // se index > length() boolean delete(int index); // rimuove l’elemento di pos. index; false se // index not in 0..length()-1 Object retrieve(int index); // pre: index in 0..length()-1 // post: ritorna l’elemento di indice index public int length (); // ritorna la lunghezza }

AlgoLab - Pile e Code Le pile implementate come liste Supponendo di aver riscritto SList in modo tale che implementi l’interfaccia List, e quindi sia generica (elementi di tipo Object ): class StackByList extends SList implements Stack { public void push(Object newitem) {cons(newitem);} public void pop() {delete(0);} public Object top() {return retrieve(0);} public boolean empty() {return length() == 0;} }

AlgoLab - Pile e Code La gerarchia dei tipi e delle classi L’implementazione delle pile presentata si basa dunque sulla gerarchia (interfacce e relazioni di implementazione in rosso, classi e relazioni di ereditarietà in blu): ListStack SList StackByList

AlgoLab - Pile e Code Notazione polacca postfissa Nella notazione polacca postfissa per le espressioni aritmetiche un operatore segue i suoi operandi. E’ definita dalla grammatica: ::= | Esempi: (7 + 3) £ 5si traduce in £ £ 5si traduce in £ +

AlgoLab - Pile e Code Algoritmo di valutazione Valuta (Stringa espr) // espr è fatta di parole separate da spazi s := pila vuota while (scansione di espr non è finita) e := prossima parola di espr; if (e è un numerale) then Push(e,s) else // e è un operatore n := Top(s); Pop(s);// l’ordine di lettura ed eliminaz. m := Top(s); Pop(s);// dalla coda è importante … op :=  oppure  a seconda di e; Push(m op n, s)// … qui return Top(s). // se espr è un’espr. in not. polacca, s ha un solo el.

AlgoLab - Pile e Code Esecuzione dell’algoritmo     4 top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     4 8 top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     4 80 top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     4 40 top

AlgoLab - Pile e Code Esecuzione dell’algoritmo     44 top

AlgoLab - Pile e Code Code: definizione informale Le code sono strutture lineari i cui elementi si inseriscono da un estremo e si estraggono dall’altro (FIFO)

AlgoLab - Pile e Code Operazioni sulle code Una coda (queue) si definisce astrattamente come una struttura dati su cui siano definite alemeno le operazioni: Enqueue(e,q) :aggiunge e come ultimo in q Dequeue(q) :elimina il primo in q Head(q) :ritorna il valore del primo in q IsEmpty(q):ritorna true se q non ha elementi. Nota: se q è vuota, Dequeue(q) e Head(q) sono indefinite.

AlgoLab - Pile e Code Code realizzate con vettori (1) q fr coda vuota 715 q fr 15 q fr Dequeue(q)

AlgoLab - Pile e Code Code realizzate con vettori (2) 52 q fr Enqueue(9,q) 952 q fr L’indice della locazione successiva (sia per f che per r) si calcola: i + 1 mod n (n = lunghezza del vettore)

AlgoLab - Pile e Code Code realizzate con vettori (3) 9352 q fr Condizione necessaria perché una coda di lunghezza n sia piena è: r + 1 mod n = f Tale condizione tuttavia non è sufficiente, dato che si verifica anche in quello di coda vuota coda piena q fr coda vuota

AlgoLab - Pile e Code Code realizzate con liste front rear … Come si realizza tutto questo in Java, sfruttando il più possibile le interfacce e l’ereditarietà?