1 / 57

Le Strutture Dati

Le Strutture Dati. (Abstract Data Types). M. Capurso con materiale di: G.Piccolo, A.Arcieri, Lamacchia F. Piccolo, B. Monterisi http://info.bazarinfo.info. Ogni professione ha oggetti e operazioni di base.

guri
Télécharger la présentation

Le Strutture Dati

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Ogni professione ha oggetti e operazioni di base • In qualsiasi professione, l’apprendista impara a riconoscere e manipolare gli oggetti fondamentali del mestiere. • L’apprendista idraulico impara a riconoscere e collegare rubinetti e tubi • L’apprendista architetto riconosce muri, archi e porte e ne impara caratteristiche fondamentali ed operazioni di base Questo accade anche per l’informatico

  3. 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 l’informatico alla conoscenza di tubi e rubinetti per l’idraulico: non se ne può fare a meno.

  4. 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

  5. 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

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

  7. Universo del Discorso e Tipi • Prendiamo un universo che contiene tutti gli oggetti del contesto(ciò di cui si parla). • L’universo 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. • L’insieme degli elementi dell’ universo per cui il predicato è vero si chiama classe.

  8. Tipo Si definisce tipo un predicato che può essere Vero o Falso quando è applicato ad un elemento x dell’Universo del discorso. Il tipo divide l’universo del discorso in due sottoinsiemi distinti : un sottoinsieme per cui il predicato (tipo) è vero, l’altro per cui il predicato è falso

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

  10. 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

  11. 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

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

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

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

  15. 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

  16. 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 Muh Muh Beh Beh

  17. 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 Giotto Raffaello Numero Pittori Età media alla morte Classe dei Pittori

  18. Stampo, tipo e classe sono collegati Se uso uno stampo come costruttore, posso produrre oggetti La domanda “L’oggetto 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

  19. Tre punti di vista 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.

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

  21. 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

  22. 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

  23. Tipi elementari: modello fisico • Si assume che l’oggetto creato abbia una proprietà nascosta b chiamata indirizzo base, che individui l’indirizzo del valore in memoria centrale • L’operatore di indirezione * accede al valore il cui indirizzo segue l’operatore • New() • b=alloca() • Destroy() • disalloca(b) • Get() • Riporta *b • Put(s) • *b=s

  24. 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

  25. 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 logico

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

  27. 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

  28. 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 logico

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

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

  31. 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 l’oggetto s Stack: modello logico

  32. 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) • New() Alloca V(da 1 a m) m massima coordinata T=0 • Destroy() disalloca(V) M=T=0 • IsEmpty() Se T=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese

  33. 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 - 2

  34. Stack: modello fisico – un esempio V 55 22 14 1 2 3 4 5 T 3 Top: Contiene il numero dell’ultima componente piena Massimo: contiene il numero dell’ultima componente M 5

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

  36. 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 l’oggetto s Coda: modello logico

  37. 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) • New() Alloca V(da 1 a m) m massima coordinata R=0 ; F=1 • Destroy() disalloca(V) M=R=0 • IsEmpty() Se R=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese

  38. 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 - 2

  39. Coda: modello fisico lineare – un esempio V 22 14 55 1 2 3 4 5 R 4 Retro: Contiene il numero dell’ultima componente entrata F 2 Fronte: Contiene il numero della componente che deve uscire M 5 Massimo: contiene il numero dell’ultima componente

  40. 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

  41. 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) • New() Alloca V(da 1 a m) m massima coordinata R=0 ; F=1 • Destroy() disalloca(V) M=R=0 • IsEmpty() Se R=0 Allora Ritorna Vero Altrimenti Ritorna Falso Finese

  42. 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 - 2

  43. 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 - 3

  44. Coda: modello fisico circolare – un esempio 3 14 55 22 4 2 V 1 5 R 4 Retro: Contiene il numero dell’ultima componente entrata F 2 Fronte: Contiene il numero della componente che deve uscire M 5 Massimo: contiene il numero dell’ultima componente

  45. Lista: modello concettuale • Rappresenta oggetti del mondo reale caratterizzati da un insieme di valori in cui l’inserimento e l’estrazione siano possibili dalla testa, dalla coda ed in qualsiasi posizione • Esempio: inventatevelo voi

  46. 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 l’oggetto s come primo Lista: modello logico - 1

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

  48. 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

  49. Allocazione consecutiva: pregi e difetti • L’allocazione 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

  50. 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

More Related