Le Strutture Dati M. Capurso con materiale di: G.Piccolo, A.Arcieri, Lamacchia F. Piccolo, B. Monterisi (Abstract Data Types)

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Unità D2 Archivi e file.
Procedure In assembler.
Strutture dati lineari
Una Introduzione alle Basi di Dati
STRUTTURE DATI AVANZATE Abstract Data Types Presentazione realizzata da: Mario Capurso – Altamura Michele Doronzo Aldo Lamacchia.
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Strutture dati elementari
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Algoritmi e Dimostrazioni Stefano Berardi
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
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
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
7. Teoria delle Code Una coda è costituita da 3 componenti fondamentali: i serventi i clienti uno spazio in cui i clienti attendono di essere serviti.
Introduzione agli stream e alle classi
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
memoria gestita staticamente:
Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro.
Biologia Computazionale - Algoritmi
Dall’algoritmo al programma.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Radix-Sort(A,d) // A[i] = cd...c2c1
Corso di informatica Athena – Periti Informatici
Progettare un database
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Strutture dati elementari
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
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. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Schiavone & Scalas 2 In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d'accesso.
CORSO DI PROGRAMMAZIONE II Lezione 22
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Informatica 3 V anno.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
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.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
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 del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Le funzioni.
Corso di Algoritmi e Strutture Dati con Laboratorio Tipi di dato pila e coda.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Le basi di dati.
Corso di Algoritmi e Strutture Dati con Laboratorio Java Collections Framework (II parte)
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati.
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:

Le Strutture Dati M. Capurso con materiale di: G.Piccolo, A.Arcieri, Lamacchia F. Piccolo, B. Monterisi (Abstract Data Types)

Ogni professione ha oggetti e operazioni di base In qualsiasi professione, lapprendista impara a riconoscere e manipolare gli oggetti fondamentali del mestiere. Lapprendista idraulico impara a riconoscere e collegare rubinetti e tubi Lapprendista architetto riconosce muri, archi e porte e ne impara caratteristiche fondamentali ed operazioni di base Questo accade anche per linformatico

I tipi di dati astratti e la professione di informatico Le strutture dati (o tipi di dati astratti) costituiscono patrimonio fondamentale della professione di informatico Padroneggiarle equivale per linformatico alla conoscenza di tubi e rubinetti per lidraulico: non se ne può fare a meno.

Una struttura dati è … … un insieme di dati raggruppati e organizzati secondo uno schema ben definito. In tali strutture nel computer cè un barlume del mondo reale: sono informazioni e algoritmi che modellano ciò che avviene nella realtà. Sono fotografie di oggetti del mondo reale, nel nostro computer

Un esempio… Una pila di libri può essere rappresentata con una struttura dati stack Una fila di persone può essere rappresentata con una struttura dati coda

Definizione Una Struttura Dati (o Abstract Data Type) è u uu un insieme di Informazioni ed Algoritmi cha rappresentano nel computer ( quindi in un universo virtuale) s ss situazioni ed oggetti presenti nella realtà.

Universo del Discorso e Tipi Prendiamo un universo che contiene tutti gli oggetti del contesto(ciò di cui si parla). Luniverso può essere suddiviso in sottoinsiemi da un oracolo (detto tipo) che prende un elemento del discorso e porta un valore che può essere vero o falso. Linsieme degli elementi dell universo per cui il predicato è vero si chiama classe.

Tipo Si definisce tipo un predicato che può essere Vero o Falso quando è applicato ad un elemento x dellUniverso del discorso. Il tipo divide luniverso del discorso in due sottoinsiemi distinti : un sottoinsieme per cui il predicato (tipo) è vero, laltro per cui il predicato è falso

Esempio Raffaello Giotto Leopardi Dante Pittore(Dante)=Falso Pittore(Leopardi)=Falso Pittore(Raffaello)=Vero Pittore(Giotto)=Vero Pittore è un tipo Esso descrive la Classe dei Pittori Universo del discorso

Classi, Sottoclassi e Superclassi Se A e B sono classi di U e … A è contenuto in B allora A si dice Sottoclasse di B… …e B si dice Superclasse di A

Tipi, Oracoli e Stampi Un tipo è un oracolo: non spiega il suo funzionamento né caratterizza gli oggetti prescelti E se volessi invece caratterizzare gli oggetti con delle proprietà specifiche? Se volessi costruirli come dico io ? Posso usare uno stampo

Uno stampo è composto da Un nome Un elenco di Proprietà Un elenco di Ricette Stampo o Template Uno stampo è un meccanismo per costruire oggetti

Esempio di stampo 1. Stampo di: Pecorella (nome) Zampe Testa Coda Nome Proprietà Per_Belare: Ricetta per far sì che alla pressione del pancino la pecorella emetta un belato

Le proprietà nello stampo hanno un valore Definizionale ( sono dei segnaposto) mentre nelloggetto creato dallo stampo le proprietà hanno un valore Fattuale (assumono dei valori reali in un oggetto specifico) Proprietà nello stampo Nome = Bianchina

Costruttore e distruttore Devo assumere sempre presenti almeno due ricette: il costruttore ed il distruttore Il costruttore costruisce un oggetto, mentre il distruttore lo distrugge

Proprietà e ricette di oggetto Le proprietà e le ricette di cui abbiamo parlato finora sono caratteristiche di ciascun oggetto e assumono valori che possono cambiare da oggetto ad oggetto Nome = Bianchina Nome = Nerina Beh Muh

Proprietà e ricette di classe Posso però immaginare che esistano proprietà e ricette di classe, che cioè esistano una sola volta per tutta la classe Raffaello Giotto Classe dei Pittori Numero Pittori Età media alla morte

Se uso uno stampo come costruttore, posso produrre oggetti La domanda Loggetto x è generato dallo stampo ? può dare un valore vero o falso ed è quindi un predicato, cioè un tipo Il tipo delimita la classe di tutti gli oggetti prodotti dallo stampo Stampo, tipo e classe sono collegati

Le strutture dati possono essere viste da tre punti di vista: Modello concettuale: si parla delle situazioni reali modellate dalla struttura dati Modello logico: si descrive l elenco della proprietà e delle ricette (metodi) Modello fisico: ci si occupa dell allocazione delle proprietà nella memoria di un computer e della realizzazione delle ricette in un computer. Tre punti di vista

Le strutture dati più semplici Tipi elementari Strutture ripetitive (vettori e matrici) Stack Coda Lista

Tipi elementari Sono presenti in tutti i linguaggi di programmazione in maniera nativa Esempio: valori interi, reali, caratteri, logici, date Sono i mattoni di base con cui costruire tutto il resto

Tipi elementari: modello concettuale e logico Modello concettuale: rappresentano oggetti del mondo reale caratterizzati da un solo valore Esempio: una resistore, che sia caratterizzato solo con il valore intero della sua resistenza in Ohm Modello logico New() Costruttore Destroy() Distruttore Get() Riporta il valore s Put(s) Assegna il valore s

Tipi elementari: modello fisico Si assume che loggetto creato abbia una proprietà nascosta b chiamata indirizzo base, che individui lindirizzo del valore in memoria centrale Loperatore di indirezione * accede al valore il cui indirizzo segue loperatore Get() Riporta *b Put(s) *b=s New() b=alloca() Destroy() disalloca(b)

Vettore: modello concettuale Rappresenta oggetti del mondo reale caratterizzati da una successione lineare di valori tutti dello stesso tipo, in corrispondenza biunivoca con gli interi da un min ad un max Esempio: un elenco di studenti, dal numero uno al numero ventiquattro

Vettore: modello logico New(min,max) costruttore Destroy() distruttore Getat(i) riporta il valore s alla posizione i Putat(i,s) assegna il valore s alla posizione i

Vettore: modello fisico Si assume che loggetto creato abbia una proprietà nascosta b chiamata indirizzo base, che individui lindirizzo di inizio del vettore in memoria centrale Getat(i) Riporta *(b+i-min) Putat(i,s) *(b+i-min)=s New(min,max) b=alloca(max-min+1) Destroy() disalloca(b)

Matrice: modello concettuale Rappresenta oggetti del mondo reale caratterizzati da un insieme di valori tutti dello stesso tipo organizzati per righe e colonne, con righe da minr a maxr e colonne da minc a maxc. Esempio: i pezzi su una scacchiera

Matrice: modello logico New(minr, maxr, minc, maxc) costruttore Destroy() distruttore Getat(r,c) riporta il valore s alla posizione r,c Putat(r,c,s) assegna il valore s alla posizione r,c

Matrice: modello fisico Si assume che loggetto creato abbia una proprietà nascosta b chiamata indirizzo base, che individui lindirizzo di inizio della matrice in memoria centrale Chiamiamo dimensioni D1 e D2 D1=maxr – minr + 1 e D2=maxc – minc + 1 Getat(r,c) Riporta *(b+ (r-minr)*D2+(c- minc)) Putat(r,c,s) *(b+ (r-minr)*D2+(c-minc))=s New(minr, maxr, minc, maxc) b=alloca(D1 * D2) Destroy() disalloca(b)

Stack o Pila: modello concettuale Rappresenta oggetti del mondo reale caratterizzati da un insieme di valori in cui linserimento e lestrazione siano secondo la disciplina LIFO (Last In First Out) Esempio: una pila di libri, in cui linserimento e lestrazione avvengono solo alla sommità

Stack: modello logico New() costruttore IsEmpty() riporta vero se vuoto, falso altrimenti IsFull() riporta vero se pieno, falso altrimenti Destroy() distruttore Pop() estrae un oggetto s e lo riporta Push(s) inserisce loggetto s

Stack: modello fisico - 1 Modalità consecutiva: si usa un vettore V di componenti da 1 a m ed una variabile intera T (top dello stack) IsEmpty() Se T=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese New() Alloca V(da 1 a m) m massima coordinata T=0 Destroy() disalloca(V) M=T=0

Stack: modello fisico - 2 IsFull() Se T=m Allora Ritorna Vero Altrimenti Ritorna Falso Finese Push(s) Se non IsFull() Allora T=T + 1 V(T) = s Finese Pop() Se non IsEmpty() Allora s = V(T) T = T – 1 Ritorna s Finese

Stack: modello fisico – un esempio V T3Top: Contiene il numero dellultima componente piena M 5 Massimo: contiene il numero dellultima componente

Coda: modello concettuale Rappresenta oggetti del mondo reale caratterizzati da un insieme di valori in cui linserimento e lestrazione siano secondo la disciplina FIFO (First In First Out) Esempio: una fila in banca, in cui linserimento avviene sul retro e lestrazione avviene alla fronte

Coda: modello logico New() costruttore IsEmpty() riporta vero se vuoto, falso altrimenti IsFull() riporta vero se pieno, falso altrimenti Destroy() distruttore Deq() estrae un oggetto s e lo riporta Enq(s) inserisce loggetto s

Coda: modello fisico lineare - 1 Modalità consecutiva: si usa un vettore V di componenti da 1 a m e due variabili intere R (Retro) e F (Fronte) IsEmpty() Se R=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese New() Alloca V(da 1 a m) m massima coordinata R=0 ; F=1 Destroy() disalloca(V) M=R=0

Coda: modello fisico lineare - 2 IsFull() Se R=m Allora Ritorna Vero Altrimenti Ritorna Falso Finese Enq(s) Se non IsFull() Allora R=R + 1 V(R) = s Finese Deq() Se non IsEmpty() Allora s = V(F) Se F=R Allora F=1 ; R=0 Altrimenti F = F + 1 Finese Ritorna s Finese

Coda: modello fisico lineare – un esempio V R4Retro: Contiene il numero dellultima componente entrata M5Massimo: contiene il numero dellultima componente F2Fronte: Contiene il numero della componente che deve uscire

Coda: modello fisico circolare Il modello fisico consecutivo lineare della coda ha il difetto di creare una bolla vuota in testa al vettore Tale bolla vuota può fare apparire piena una coda che invece ha spazio vuoto ma inutilizzabile in testa La soluzione è usare un modello fisico circolare, con F e R che arrivati a M ripartono da 1

Coda: modello fisico circolare - 1 Modalità consecutiva: si usa un vettore V di componenti da 1 a m e due variabili intere R (Retro) e F (Fronte) IsEmpty() Se R=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese New() Alloca V(da 1 a m) m massima coordinata R=0 ; F=1 Destroy() disalloca(V) M=R=0

Coda: modello fisico circolare - 2 IsFull() Nextr=(R=m) ? 1 : R+1 Se Nextr=F e R!=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese Enq(s) Se non IsFull() Allora R=(R=m) ? 1 : R+1 V(R) = s Finese

Coda: modello fisico circolare - 3 Deq() Se non IsEmpty() Allora s = V(F) Se F=R Allora F=1 ; R=0 Altrimenti F = (F=m) ? 1 : F + 1 Finese Ritorna s Finese

Coda: modello fisico circolare – un esempio V R4Retro: Contiene il numero dellultima componente entrata M5Massimo: contiene il numero dellultima componente F2Fronte: Contiene il numero della componente che deve uscire

Lista: modello concettuale Rappresenta oggetti del mondo reale caratterizzati da un insieme di valori in cui linserimento e lestrazione siano possibili dalla testa, dalla coda ed in qualsiasi posizione Esempio: inventatevelo voi

Lista: modello logico - 1 New() costruttore IsEmpty() riporta vero se vuoto, falso altrimenti IsFull() riporta vero se pieno, falso altrimenti Destroy() distruttore RemoveFirst() estrae il primo oggetto s e lo riporta AddFirst(s) inserisce loggetto s come primo

Lista: modello logico - 2 Length() riporta il numero di elementi in lista RemoveAt(i) estrae oggetto i-mo s e lo riporta AddAt(i,s) inserisce loggetto s come i- mo RemoveLast() estrae lultimo oggetto s e lo riporta AddLast(s) inserisce loggetto s come ultimo

Allocazione consecutiva e non consecutiva Le strutture dati, pur mantenendo lo stesso modello concettuale e logico, possono avere un modello fisico in allocazione consecutiva o non consecutiva In allocazione consecutiva, vengono realizzate usando vettori, in cui le componenti sono consecutive in memoria centrale

Allocazione consecutiva: pregi e difetti Lallocazione consecutiva usa ricette relativamente semplici ed è possibile con tutti i linguaggi di programmazione Ma prealloca i vettori, e quindi spreca spazio quando la struttura è vuota mentre impedisce di continuare quando la struttura si riempie

Allocazione non consecutiva In allocazione non consecutiva, le strutture vengono realizzate collegando grumi di informazione (detti Nodi) come perle in una collana Le perle vengono allocate e disallocate al bisogno, collegandole tra di loro Questo richiede ricette più complesse, ma permette strutture che si contraggono ed espandono al bisogno

Stack: modello fisico non consecutivo Ogni nodo è costituito da due campi: Info contiene il valore dellelemento Next contiene lindirizzo del prossimo nodo T contiene lindirizzo del primo nodo T contiene il valore NULL se lo stack è vuoto T

Stack: modello fisico non consecutivo - 1 Destroy() Mentre NON Isempty() s=Pop() Fine Mentre IsEmpty() Se T=NULL Allora Ritorna Vero Altrimenti Ritorna Falso Finese New() T=NULL IsFull() Prova ad allocare spazio Se hai un errore Ritorna Vero Altrimenti Ritorna Falso Finese

Stack: modello fisico non consecutivo - 2 Push(s) Se non IsFull() Allora P=alloca() P.Info = s P.Next = T T = P Finese Pop() Se non IsEmpty() Allora P = T s = T.Info T = T.Next libera (P) Ritorna s Finese

Coda: modello fisico non consecutivo Ogni nodo è costituito da due campi: Info contiene il valore dellelemento Next contiene lindirizzo del prossimo nodo F contiene lindirizzo del nodo fronte R contiene lindirizzo del nodo retro F e R contengono il valore NULL se la coda è vuota F R

Coda: modello fisico non consecutivo - 1 Destroy() Mentre NON Isempty() s=Deq() Fine Mentre IsEmpty() Se F=NULL Allora Ritorna Vero Altrimenti Ritorna Falso Finese New() F=NULL R=NULL IsFull() Prova ad allocare spazio Se hai un errore Ritorna Vero Altrimenti Ritorna Falso Finese

Coda: modello fisico non consecutivo - 2 Enq(s) Se non IsFull() Allora P=alloca() ; P.Info = s P.Next = NULL Se R != NULL Allora R.Next = P R = P Altrimenti R = P ; F = P Finese Deq() Se non IsEmpty() Allora P = F s = F.Info F = F.Next libera (P) Se F = NULL Allora R = NULL Finese Ritorna s Finese

Continua…