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
4. Come si cucina il tiramisù?
Quanto tempo si impiega per
prepararlo per due persone?
Quanto tempo per dieci persone?
Quanto tempo per preparalo per cento
persone?
Prof. Pier Luca Lanzi
5. Se un amico vi aiutasse,
come cambierebbe la procedura?
Sareste più rapidi se due amici vi aiutassero?
E se cento amici vi aiutassero?
Prof. Pier Luca Lanzi
6. Calcolo del Cammino Minimo
6
Come si calcola il cammino minimo fra due
punti?
Quanto tempo vi serve per calcolarlo?
Avere più persone aiuterebbe?
Prof. Pier Luca Lanzi
7. Cos’è un Algoritmo?
•
•
•
•
•
7
“Sequenza finita di passi, definiti con precisione, che portano alla
realizzazione di un compito”
La sequenza di passi deve essere finita
e deve portare ad un risultato
Le istruzioni devono essere eseguibili
materialmente e devono essere
espresse in modo non ambiguo
Un algoritmo deve essere comprensibile
al suo esecutore, corretto, ed efficiente
Forniscono descrizione astratta di un metodo (procedimento) per
giungere alla soluzione di un dato problema
Prof. Pier Luca Lanzi
8. Un po’ di storia
•
•
•
•
8
Al-Khwārizmī, astronomo e matematico
Persiano, nell’825 scrive il trattato
“On Calculation with Hindu Numerals”
Tradotto in latino nel XII secolo, come
“Algoritmi de numero Indorum”
“Algoritmi” era la traduzione del nome
dell’autore (Al-Khwārizmī) ma il termine
è stato frainteso come il plurare Latino
algorismus
Nel 1240, il termine è usato in nel manuale “Carmen de Algorismo” di
Alexandre de Villedieu.
Francobollo emesso il 6 Settembre 1983 dall’Unione Sovietica per commemorare il “compleanno di Al-Khwārizmī's (780850), fonte http://www.wikipedia.org
Prof. Pier Luca Lanzi
9. Un Po' di Storia
•
•
•
•
•
9
Papiro di Ahmes
(algoritmo per la moltiplicazione)
Algoritmi di tipo numerico
furono studiati da matematici
babilonesi ed indiani
Algoritmi in uso fino a tempi recenti furono studiati dai
matematici greci più di 2000 anni fa
Algoritmo di Euclide per il Massimo Comune Divisore
Algoritmi geometrici (calcolo di tangenti, sezioni di angoli,
...)
Prof. Pier Luca Lanzi
10. qual è l’obiettivo del corso?
imparare i principi generali
algoritmi, strutture dati, calcolo parallelo
impararli a utilizzare ora
C++, programmazione a oggetti,
MPI, OpenMP, CUDA
Prof. Pier Luca Lanzi
11. Quali sono gli obiettivi del corso?
•
•
•
11
Analisi di algoritmi noti per il design di algoritmi nuovi
Analisi degli algoritmi?
Performance (velocità)
Utilizzo delle risorse (memoria e comunicazione)
Ci sono molti altri aspetti (non trattati qui):
Correttezza, robustezza, mantenibilità
Modularità, sicurezza, facilità d’uso
Prof. Pier Luca Lanzi
12. Perché ci interessa la performance?
La performance spesso determina
il confine tra quello che è possibile e
quello che non è possibile fare
L’analisi degli algoritmi ci aiuta
a capire il concetto di scalabilità
Prof. Pier Luca Lanzi
13. Esempio: N-body simulation & FFT
•
•
•
•
Simulare le interazioni gravitazionali
fra N corpi con un algoritmo
“brute-force” richiede un tempo
dell’ordine di N2
L’algoritmo di Barnes-Hut richiede
un tempo dell’ordine di NlogN
L’algoritmo brufe-force per la
trasformata di Fourier discreta
richiede un tempo dell’ordine N2
La versione FFT, NlogN
Prof. Pier Luca Lanzi
13
14. Che Cosa si Intende per Scalabilità?
Prof. Lanzi corre i 100m in 12s
Prof. Pier Luca Lanzi
14
In quanto corre la maratona?
15. Esempio: Ricerca Sequenziale
•
•
Dato un elenco contenente n oggetti, cercare
se un oggetto x è presente
L’elenco non è ordinato
x?
•
•
•
15
x?
x?
x?
x?
x!
Caso migliore? Quello che cerco è il primo
Caso peggiore? Ho n elementi e quello che cerco è
l’ultimo
Caso medio? Circa n/2
Prof. Pier Luca Lanzi
16. Codifica in C++
16
bool linear_find(std::vector<int> v, int x)
{
int i;
for (i=0; i<v.size() && v[i]!=x; i++);
if (i==v.size())
return false;
else return true;
} // http://ideone.com/GnW1i
// http://ideone.com/RRiXG
Prof. Pier Luca Lanzi
17. Ricerca Binaria di un Elemento
•
•
17
Supponiamo ora che l’elenco sia ordinato
alfabeticamente
Esempio: l’elenco del telefono o un dizionario
Rossi?
A
•
•
•
B
C
...
N
...
...
Caso migliore? Quello che cerco è il primo
Caso peggiore?
Caso medio?
Prof. Pier Luca Lanzi
...
Z
18. Codifica in C++
18
bool binary_find(std::vector<int> v, int x)
{
int l = -1;
int r = v.size();
// l, r are the search
// bounds
while (l+1 != r) {
// Stop when l, r meet
int i = (l+r)/2;
// Check middle
if (x < v[i]) r = i;
// Left half
if (x == v[i]) return true; // Found it
if (x > v[i]) l = i;
// Right half
}
return false; // Search value not in array
} // http://ideone.com/fBTUs
// http://ideone.com/e3bXr
Prof. Pier Luca Lanzi
19. quale dei due algoritmi ha
prestazioni migliori?
quali sono le ipotesi di lavoro
alla base dei due algoritmi?
Prof. Pier Luca Lanzi
20. perchè studiare gli algoritmi
da un punto di vista teorico?
Prof. Pier Luca Lanzi
25. Gli algoritmi lavorano su dati che vengono
organizzati secondo una certa struttura
Se la struttura è efficiente
allora gli algoritmi sono più efficienti
Ogni struttura dati ha costi/benefici
Raramente c’è una soluzione
che va bene in tutte le situazioni
Prof. Pier Luca Lanzi
26. Limitazioni del Calcolo Sequenziale
•
•
26
Ci sono diverse ragioni che limitano la costruzione di calcolatori
sequenziali sempre più veloci
Velocità di trasmissione
La velocità di un calcolatore sequenziale dipende dalla
velocità di trasferimento dei dati
Il limite è la velocità della luce (30 cm/nanosecondo) e i limiti
del rame (9 cm/nanosecondo).
Velocità superiori richiedono maggiore vicinanza fra le unità
che processano l’informazione
•
Limiti della miniaturizzazione
•
Limitazioni economiche
Prof. Pier Luca Lanzi
28. Calcolo Parallelo
Abbiamo a disposizione più esecutori,
possiamo sfruttarli per risolvere problemi
molto complessi, velocemente?
Due possibili approcci…
Prof. Pier Luca Lanzi
29. (1)
diversi esecutori, lavorano su diverse
istanze dello stesso problema
(2)
il problema complesso viene suddiviso
in sottoproblemi più semplici
diversi esecutori lavorano simultaneamente
sui sottoproblemi (in parallelo)
identificare i sottoproblemi, coordinare gli esecutori
Prof. Pier Luca Lanzi
30. Calcolo Parallelo
30
•
Più processori (risolvono i sottoproblemi)
•
La rete (collega i processori/risolutori dei sottoproblemi)
•
•
Ambiente per creare e gestire processi paralleli
Sistema Operativo
Paradigma di programmazione parallela
(Message Passing, Data Parallel, ecc.)
Un algoritmo parallelizzabile e l’ implementazione
parallela
(la scomposizione del problema in sottoproblemi)
Prof. Pier Luca Lanzi
31. Programmazione Parallela
•
•
•
•
•
31
Decomposizione di un algoritmo in sottoproblemi
o dei suoi dati in parti
Distribuzione dei sottoproblemi ai processori che
li risolvono contemporaneamente (in parallelo)
Coordinamento del lavoro e comunicazione fra i processori
Considerazioni
Quale architettura usiamo?
Quale tipo di comunicazione usiamo?
Inizialmente, vedremo il parallelismo in maniera astratta
successivamente vedremo uno dei paradigmi di
programmazione parallela
Prof. Pier Luca Lanzi
32. Perchè ci Interessa il Calcolo Parallelo?
•
•
•
Simulazione e Modellistica
Maggiore potenza di calcolo,
maggiore l’accuratezza
Problemi con grandi quantità di dati
Elaborazione immagini/segnali
Rendering
Data Mining
WWW
Grand Challenge
Modelli climatici
Fluidodinamica
Genoma umano
…
Prof. Pier Luca Lanzi
32
33. Obiettivo del Corso
studio, analisi, sviluppo di algoritmi
sequenziali e paralleli e loro implementazione
Come risolvere un problema?
Quanto costa una soluzione?
Si può fare di meglio?
Prof. Pier Luca Lanzi
34. Sequenziale vs Parallelo
Se avessi più di un esecutore,
potrei risolvere problemi più grandi?
Avere più esecutori, richiede spesso
un ripensamento dell’algoritmo
Trade-off fra complessità di design
e guadagno di performance
Prof. Pier Luca Lanzi
Notes de l'éditeur
Se cercassimo di sapere se due puntisonoconnessicambierebbe di molto ilproblema?
"Algorism is the art by which at present we use those Indian figures, which number two times five."