SlideShare uma empresa Scribd logo
1 de 25
Strutture Dati Elementari
Algoritmi e Calcolo Parallelo

Prof. Pier Luca Lanzi
Riferimenti

•

•

2

Bertossi Alan A., Montresor Alberto. “Algoritmi e
strutture di dati” (seconda edizione), CittàStudi 2010

Stanley B. Lippman, Barbara E. Moo, Josee Lajoie
“C++ Primer”, 5th Edition Addison-Wesley

Prof. Pier Luca Lanzi
Tipo di Dato Astratto

•
•

•

3

Dato
In un linguaggio di programmazione, un dato è un
valore che una variabile può assumere



Tipo di dato astratto
Un modello matematico, dato da una collezione di
valori e un insieme di operazioni ammesse su questi
valori



Tipi di dati primitivi
Forniti direttamente dal linguaggio
Esempi: int (+,-,*,/, %), boolean (!, &&, ||)




Prof. Pier Luca Lanzi
Liste

•

4

Liste (List, Linked List)
Una sequenza di nodi, contenenti dati arbitrari e 1-2
puntatori all'elemento successivo e/o precedente
La contiguità nella lista non implica la contiguità in
memoria





•
•

Costo operazioni
Tutte le operazioni hanno costo O(1)



Realizzazione possibili
Bidirezionale/Monodirezionale
Con sentinella/Senza sentinella
Circolare /Non circolare





Prof. Pier Luca Lanzi
Esempi di Linked Liste

Prof. Pier Luca Lanzi

5
Liste puntate (Linked List)

•

6

Sequenza di nodi, contenenti dati (qualsiasi) arbitrari e 1-2 reference
(puntatori, link) all'elemento successivo e/o precedente

•

Liste puntate semplici

•

Liste puntate doppie

•

Liste circolari

Prof. Pier Luca Lanzi
Liste Puntate Semplici (Linked List)

Prof. Pier Luca Lanzi

7
Liste Puntate Semplici (Linked List)

Inserimento

8

Cancellazione

Prof. Pier Luca Lanzi
Liste Puntate Semplici e Doppie
(Linked List)

Ricerca

9

Inserimento in testa

LIST-SEARCH(L, k)
1 x ← head[L]
2 while (x ≠ NIL
&& key[x] ≠ k)
3
do x ← next[x]
4 return x

Prof. Pier Luca Lanzi

LIST-INSERT(L, x)
1 next[x] ← head[L]
2 if head[L] ≠ NIL
3
prev[head[L]] ← x
4 head[L] ← x
5 prev[x] ← NIL
List - Circolare, Bidirezionale,
con Sentinella

Prof. Pier Luca Lanzi

10
Liste nella STL C++

•
•

Sono implementate come liste bidirezionali
Vantaggi
Inserimento e cancellazione di un elemento sono efficienti (Θ(1))
Spostamento di elementi nella stessa lista o fra liste è efficiente
(Θ(1))
L‟iterazione sugli elementi della lista nelle due direzioni è efficiente
(Θ(n))
Svantaggi
Non permettono l‟accesso diretto agli elementi della struttura (e.g.
A[i])
Ad esempio, per accedere all‟elemento i di una lista bisogna
scorrerla dall‟inizio fino all‟elemento cercato (Θ(n))
Richiedono la memorizzazione dei collegamenti fra elementi
(maggiore memoria rispetto ai vettori)
Riferimenti
http://www.cplusplus.com/reference/stl/list/





•






•

11



Prof. Pier Luca Lanzi
Liste nella STL C++

•

Iteratori: begin(), end(), rbegin(), rend()

•

Capacità: empty, size, max_size, resize

•

12

Accesso agli elementi: front, back

•
•

Modificatori: push_front, pop_front, push_back, pop_back, insert,
erase, swap, clear
Operazioni: splice, remove, remove_if, unique, merge, sort, reverse

Prof. Pier Luca Lanzi
Liste – Implementazione con Vettori

•

•
•

13

E‟ possibile realizzare una lista con vettori
La posizione equivale all‟indice nel vettore
Le operazioni insert e remove hanno costo O(n)
Tutte le altre operazioni hanno costo O(1)





Problema
Spesso non si conosce a priori quanta memoria serve per memorizzare la
lista
Se ne alloca una certa quantità, per poi accorgersi che non è sufficiente.
Soluzione
Si alloca un vettore di dimensione maggiore, si ricopia il contenuto del
vecchio vettore nel nuovo e si rilascia il vecchio vettore






Prof. Pier Luca Lanzi
Liste – Implementazione con Vettori
(Espansione/Contrazione)

•
•

14

Espansione (due approcci)
Raddoppiare la capienza del vettore
Incrementare il vettore di un fattore costante




Contrazione
E‟ opportuno contrarre il vettore quando il fattore di
carico α = size/capacity diventa troppo piccolo
size è il numero di elementi attualmente presenti
capacity è la dimensione del vettore
L‟operazione richiede l‟allocazione, la copia, e la deallocazione







Prof. Pier Luca Lanzi
Pile/Stack

•

•
•

20

Insieme dinamico in cui l‟elemento rimosso
dall‟operazione di cancellazione è predeterminato:
“quello che per meno tempo è rimasto nell‟insieme”
Politica “last in, first out” (LIFO)
Operazioni previste (tutte realizzabili in O(1))

Prof. Pier Luca Lanzi
Stack (o Pila)

•
•

21

Una pila o stack è un insieme dinamico in cui l‟elemento rimosso
dall‟operazione di cancellazione è predeterminato: “quello che per
meno tempo è rimasto nell‟insieme” politica “last in, first out” (LIFO)
Operazioni previste
void push(Item)
Item pop()




 Item top()
 boolean isEmpty()

// inserisce un elemento
// rimuove l„elemento
// in cima
// legge l‟item in cima
// non rimuove l'item
// true se la pila è vuota

Prof. Pier Luca Lanzi
Applicazione e Implementazione

•

Possibili utilizzi
Nei linguaggi con procedure:
gestione dei record di attivazione
Nei linguaggi stack-oriented: le
operazioni elementari prendono
uno-due operandi dallo stack e
inseriscono il risultato nello stack
Notazione RPN: 3 4 + 7 -






•

Possibili implementazioni
Tramite liste bidirezionali
(puntatore all'elemento top)
Tramite vettore
(dimensione limitata, overhead più basso)





Prof. Pier Luca Lanzi

22

top
Stack (Pseudocodice)

Prof. Pier Luca Lanzi

23
Stack nella STL C++

•

•

Funzioni
empty
size
top
push
Pop







Esempi
http://ideone.com/QUyf6
https://ideone.com/zh4ho




Prof. Pier Luca Lanzi

24
Code/Queue

•

25

Insieme dinamico in cui l‟elemento rimosso
dall‟operazione di cancellazione è predeterminato:
“quello che per più tempo è rimasto nell‟insieme”

•

Politica di gestione “first in, first out” (FIFO)

•

Operazione previste O(1)

Prof. Pier Luca Lanzi
Code/Queue

•

26

Applicazioni
Nei sistemi operativi, i processi in attesa di utilizzare
una risorsa vengono gestiti tramite una coda FIFO
Visita dei grafi





•

Implementazioni
Liste monodirezionali: puntatore head (inizio della
coda), per estrazione; puntatore tail (fine della coda),
per inserimento
Array circolari: dimensione limitata, overhead più basso




Prof. Pier Luca Lanzi
Coda/Queue – Implementazione con
Vettori Circolari

•

•

27

La “finestra” dell‟array occupata
dalla coda si sposta lungo l‟array!
3

6

Dettagli implementativi
head
L'array circolare può
essere implementato
con un'operazione di
head
modulo
Bisogna prestare attenzione
ai problemi di overflow
(buffer pieno)

head+n
54

43




Prof. Pier Luca Lanzi

6

3

54
43
head+
n
Coda/Queue – Implementazione con
Vettori Circolari
head+n
3

6

54

3

6

54

6

33

54

enqueue(12)

43 12

head+n

head

head+n

43

head+n

head

28

dequeue() → 3

43 12

head
enqueue (15, 17, 33)
6

54

43 12 15 17

head

Prof. Pier Luca Lanzi
Coda/Queue - Pseudocodice

Prof. Pier Luca Lanzi

29
Code/Queue nella STL C++

•

•

30

Funzioni
empty
size
front: accesso al prossimo elemento della coda
back: accesso all‟ultimo elemento
push: inserisce un elemento in coda
pop: cancella il prossimo elemento








Costuttore
template < class T, class Container = deque<T> > class
queue;

Prof. Pier Luca Lanzi

Mais conteúdo relacionado

Semelhante a Algoritmi e Calcolo Parallelo 2012/2013 - Strutture Dati Elementari

Linked data parliamo di semantica del web - v3
Linked data   parliamo di semantica del web - v3Linked data   parliamo di semantica del web - v3
Linked data parliamo di semantica del web - v3Riccardo Grosso
 
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo Parallelo
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo ParalleloAlgoritmi e Calcolo Parallelo 2012/2013 - Calcolo Parallelo
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo ParalleloPier Luca Lanzi
 
Algoritmi e Calcolo Parallelo 2012/2013 - Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - AlgoritmiAlgoritmi e Calcolo Parallelo 2012/2013 - Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - AlgoritmiPier Luca Lanzi
 
Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1Paolo Ferretti
 

Semelhante a Algoritmi e Calcolo Parallelo 2012/2013 - Strutture Dati Elementari (8)

Linked data parliamo di semantica del web - v3
Linked data   parliamo di semantica del web - v3Linked data   parliamo di semantica del web - v3
Linked data parliamo di semantica del web - v3
 
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo Parallelo
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo ParalleloAlgoritmi e Calcolo Parallelo 2012/2013 - Calcolo Parallelo
Algoritmi e Calcolo Parallelo 2012/2013 - Calcolo Parallelo
 
Algoritmi e Calcolo Parallelo 2012/2013 - Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - AlgoritmiAlgoritmi e Calcolo Parallelo 2012/2013 - Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - Algoritmi
 
Template
TemplateTemplate
Template
 
Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1
 
02 - Collezioni
02 - Collezioni02 - Collezioni
02 - Collezioni
 
Okoa2016long v2
Okoa2016long v2Okoa2016long v2
Okoa2016long v2
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 

Mais de Pier Luca Lanzi

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i VideogiochiPier Luca Lanzi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiPier Luca Lanzi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomePier Luca Lanzi
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaPier Luca Lanzi
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Pier Luca Lanzi
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationPier Luca Lanzi
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationPier Luca Lanzi
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningPier Luca Lanzi
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningPier Luca Lanzi
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesPier Luca Lanzi
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationPier Luca Lanzi
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringPier Luca Lanzi
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringPier Luca Lanzi
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringPier Luca Lanzi
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringPier Luca Lanzi
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesPier Luca Lanzi
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsPier Luca Lanzi
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesPier Luca Lanzi
 

Mais de Pier Luca Lanzi (20)

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei Videogiochi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning Welcome
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di apertura
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
 

Último

Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptcarlottagalassi
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 

Último (11)

Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.ppt
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 

Algoritmi e Calcolo Parallelo 2012/2013 - Strutture Dati Elementari

  • 1. Strutture Dati Elementari Algoritmi e Calcolo Parallelo Prof. Pier Luca Lanzi
  • 2. Riferimenti • • 2 Bertossi Alan A., Montresor Alberto. “Algoritmi e strutture di dati” (seconda edizione), CittàStudi 2010 Stanley B. Lippman, Barbara E. Moo, Josee Lajoie “C++ Primer”, 5th Edition Addison-Wesley Prof. Pier Luca Lanzi
  • 3. Tipo di Dato Astratto • • • 3 Dato In un linguaggio di programmazione, un dato è un valore che una variabile può assumere  Tipo di dato astratto Un modello matematico, dato da una collezione di valori e un insieme di operazioni ammesse su questi valori  Tipi di dati primitivi Forniti direttamente dal linguaggio Esempi: int (+,-,*,/, %), boolean (!, &&, ||)   Prof. Pier Luca Lanzi
  • 4. Liste • 4 Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente La contiguità nella lista non implica la contiguità in memoria   • • Costo operazioni Tutte le operazioni hanno costo O(1)  Realizzazione possibili Bidirezionale/Monodirezionale Con sentinella/Senza sentinella Circolare /Non circolare    Prof. Pier Luca Lanzi
  • 5. Esempi di Linked Liste Prof. Pier Luca Lanzi 5
  • 6. Liste puntate (Linked List) • 6 Sequenza di nodi, contenenti dati (qualsiasi) arbitrari e 1-2 reference (puntatori, link) all'elemento successivo e/o precedente • Liste puntate semplici • Liste puntate doppie • Liste circolari Prof. Pier Luca Lanzi
  • 7. Liste Puntate Semplici (Linked List) Prof. Pier Luca Lanzi 7
  • 8. Liste Puntate Semplici (Linked List) Inserimento 8 Cancellazione Prof. Pier Luca Lanzi
  • 9. Liste Puntate Semplici e Doppie (Linked List) Ricerca 9 Inserimento in testa LIST-SEARCH(L, k) 1 x ← head[L] 2 while (x ≠ NIL && key[x] ≠ k) 3 do x ← next[x] 4 return x Prof. Pier Luca Lanzi LIST-INSERT(L, x) 1 next[x] ← head[L] 2 if head[L] ≠ NIL 3 prev[head[L]] ← x 4 head[L] ← x 5 prev[x] ← NIL
  • 10. List - Circolare, Bidirezionale, con Sentinella Prof. Pier Luca Lanzi 10
  • 11. Liste nella STL C++ • • Sono implementate come liste bidirezionali Vantaggi Inserimento e cancellazione di un elemento sono efficienti (Θ(1)) Spostamento di elementi nella stessa lista o fra liste è efficiente (Θ(1)) L‟iterazione sugli elementi della lista nelle due direzioni è efficiente (Θ(n)) Svantaggi Non permettono l‟accesso diretto agli elementi della struttura (e.g. A[i]) Ad esempio, per accedere all‟elemento i di una lista bisogna scorrerla dall‟inizio fino all‟elemento cercato (Θ(n)) Richiedono la memorizzazione dei collegamenti fra elementi (maggiore memoria rispetto ai vettori) Riferimenti http://www.cplusplus.com/reference/stl/list/    •    • 11  Prof. Pier Luca Lanzi
  • 12. Liste nella STL C++ • Iteratori: begin(), end(), rbegin(), rend() • Capacità: empty, size, max_size, resize • 12 Accesso agli elementi: front, back • • Modificatori: push_front, pop_front, push_back, pop_back, insert, erase, swap, clear Operazioni: splice, remove, remove_if, unique, merge, sort, reverse Prof. Pier Luca Lanzi
  • 13. Liste – Implementazione con Vettori • • • 13 E‟ possibile realizzare una lista con vettori La posizione equivale all‟indice nel vettore Le operazioni insert e remove hanno costo O(n) Tutte le altre operazioni hanno costo O(1)    Problema Spesso non si conosce a priori quanta memoria serve per memorizzare la lista Se ne alloca una certa quantità, per poi accorgersi che non è sufficiente. Soluzione Si alloca un vettore di dimensione maggiore, si ricopia il contenuto del vecchio vettore nel nuovo e si rilascia il vecchio vettore    Prof. Pier Luca Lanzi
  • 14. Liste – Implementazione con Vettori (Espansione/Contrazione) • • 14 Espansione (due approcci) Raddoppiare la capienza del vettore Incrementare il vettore di un fattore costante   Contrazione E‟ opportuno contrarre il vettore quando il fattore di carico α = size/capacity diventa troppo piccolo size è il numero di elementi attualmente presenti capacity è la dimensione del vettore L‟operazione richiede l‟allocazione, la copia, e la deallocazione     Prof. Pier Luca Lanzi
  • 15. Pile/Stack • • • 20 Insieme dinamico in cui l‟elemento rimosso dall‟operazione di cancellazione è predeterminato: “quello che per meno tempo è rimasto nell‟insieme” Politica “last in, first out” (LIFO) Operazioni previste (tutte realizzabili in O(1)) Prof. Pier Luca Lanzi
  • 16. Stack (o Pila) • • 21 Una pila o stack è un insieme dinamico in cui l‟elemento rimosso dall‟operazione di cancellazione è predeterminato: “quello che per meno tempo è rimasto nell‟insieme” politica “last in, first out” (LIFO) Operazioni previste void push(Item) Item pop()    Item top()  boolean isEmpty() // inserisce un elemento // rimuove l„elemento // in cima // legge l‟item in cima // non rimuove l'item // true se la pila è vuota Prof. Pier Luca Lanzi
  • 17. Applicazione e Implementazione • Possibili utilizzi Nei linguaggi con procedure: gestione dei record di attivazione Nei linguaggi stack-oriented: le operazioni elementari prendono uno-due operandi dallo stack e inseriscono il risultato nello stack Notazione RPN: 3 4 + 7 -    • Possibili implementazioni Tramite liste bidirezionali (puntatore all'elemento top) Tramite vettore (dimensione limitata, overhead più basso)   Prof. Pier Luca Lanzi 22 top
  • 19. Stack nella STL C++ • • Funzioni empty size top push Pop      Esempi http://ideone.com/QUyf6 https://ideone.com/zh4ho   Prof. Pier Luca Lanzi 24
  • 20. Code/Queue • 25 Insieme dinamico in cui l‟elemento rimosso dall‟operazione di cancellazione è predeterminato: “quello che per più tempo è rimasto nell‟insieme” • Politica di gestione “first in, first out” (FIFO) • Operazione previste O(1) Prof. Pier Luca Lanzi
  • 21. Code/Queue • 26 Applicazioni Nei sistemi operativi, i processi in attesa di utilizzare una risorsa vengono gestiti tramite una coda FIFO Visita dei grafi   • Implementazioni Liste monodirezionali: puntatore head (inizio della coda), per estrazione; puntatore tail (fine della coda), per inserimento Array circolari: dimensione limitata, overhead più basso   Prof. Pier Luca Lanzi
  • 22. Coda/Queue – Implementazione con Vettori Circolari • • 27 La “finestra” dell‟array occupata dalla coda si sposta lungo l‟array! 3 6 Dettagli implementativi head L'array circolare può essere implementato con un'operazione di head modulo Bisogna prestare attenzione ai problemi di overflow (buffer pieno) head+n 54 43   Prof. Pier Luca Lanzi 6 3 54 43 head+ n
  • 23. Coda/Queue – Implementazione con Vettori Circolari head+n 3 6 54 3 6 54 6 33 54 enqueue(12) 43 12 head+n head head+n 43 head+n head 28 dequeue() → 3 43 12 head enqueue (15, 17, 33) 6 54 43 12 15 17 head Prof. Pier Luca Lanzi
  • 24. Coda/Queue - Pseudocodice Prof. Pier Luca Lanzi 29
  • 25. Code/Queue nella STL C++ • • 30 Funzioni empty size front: accesso al prossimo elemento della coda back: accesso all‟ultimo elemento push: inserisce un elemento in coda pop: cancella il prossimo elemento       Costuttore template < class T, class Container = deque<T> > class queue; Prof. Pier Luca Lanzi