Algoritmi e Strutture Dati Introduzione al corso

!
!
Docente e assistenti
Algoritmi e Strutture Dati
✦
!
Introduzione al corso
!
!
Alberto Montresor
✦
Università di Trento
Prof. Alberto Montresor
✦
Titolare: lezioni teoriche, esercitazioni
✦
http://disi.unitn.it/~montreso/
Dott.ssa Alessandra Giordani, Dott. Alessio Guerrieri
✦
Esercitazioni in laboratorio, correzioni progetti
✦
[email protected], [email protected]
!
!
!
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a
copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative
Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
1
© Alberto Montresor
Cos’è un informatico?
2
© Alberto Montresor
L’azienda vi assegna un compito...
1
• Input: un vettore di interi A[1 . . . n].
• Output: il sottovettore A[i . . . j] di somma massimale, ovvero il sottovettore la cui somma
Pj
degli elementi k=i A[k] e` pi`u grande o uguale alla somma degli elementi di qualunque
altro sottovettore.
–
–
–
–
–
–
–
a
b
a $ b ⌘ temp
a; a
b; b
temp
if condizione then istruzione
if condizione then istruzione1 else istruzione2
while condizione do istruzione
for indice estremoInferiore to estremoSuperiore do istruzione
for indice estremoSuperiore downto estremoInferiore do istruzione
indice
estremoInferiore
while indice  estremoSuperiore do
istruzione
indice
indice + 1
© Alberto Montresor
http://jaysbrickblog.com
3
© Alberto Montresor
indice
estremoSuperiore
while indice estremoInferiore do
istruzione
indice
indice 1
4
La vostra risposta...
1
L’azienda vi assegna un compito...
Input: un
2 • SOLUZIONI
vettore di interi A[1 . . . n].
7
• Output: il sottovettore A[i . . . j] di somma massimale, ovvero il sottovettore la cui somma
P
3
ha costo
O(n
). Si noti chej il massimo
inizializzato
a zero;alla
infatti,
se tutti degli
i valorielementi
sono negativi
un
` viene
degli
elementi
pi`u grande
o uguale
somma
di qualunque
k=i A[k] e
sottovettore vuoto ha somma zero ed e` preferibile.
Eh? Mi dica che programma devo scrivere!
2 SOLUZIONI
altro sottovettore.
7
integer maxsum(integer[ ] A, integer n)
Domande
– integer
a
bmax 0
✦
– if condizione then istruzione
integer sum
sum(A, i, j)
% Somma sottovettore
✦ Riuscite
a risolverlo?
– if condizione
then
istruzione1
else istruzione2
sum
max
(sum,
max)
integer maxsum(integer[
] A, integer n)
– return
while
condizione
do istruzione
✦ Riuscite
max
integer
max
0a risolverlo in maniera efficiente?
% Massimo valore trovato
– for
fori indice
estremoInferiore to estremoSuperiore do istruzione
1 to n do
– forfor
indice
downto estremoInferiore do istruzione
j
i toestremoSuperiore
n do
All'università ho imparato questo magnifico algoritmo!
integer sum(integer[ ] A, integer i, integer j)
integer sum
0
integer sum
for k 0 estremoInferiore
i to j do
indice
for k
i to j do
sum+ A[k]
sum + A[k]
sum
whilesum
indice 
estremoSuperiore
if istruzione
sum > max then
return sum
Posso sviluppare un nuovo algoritmo per lei!
max
2 SOLUZIONI
indice
7
5
© Alberto Montresor
ha costo O(n3 ). Si noti che il3massimo viene inizializzato a zero; infatti, se tutti i valori sono negativi un
Versione
O(nzero
) ed e` preferibile.
sottovettore
vuoto 1
ha -somma
integer maxsum(integer[ ] A, integer n)
integer max
0
for i
1 to n do
for j
i to n do
integer sum
sum(A, i, j)
sum
max(sum, max)
% Massimo valore trovato
3
ha–costo
che il a;
massimo
inizializzato a zero; infatti, se tutti i valori sono negativi un
a✦i$O(n
b1problema
temp
a bene?
b;viene
b
temp
for
to).⌘
n Si
do noti
Il
è descritto
`
sottovettore
vuoto
ha
somma
zero
ed
e
preferibile.
for j
i to n do
% Massimo valore trovato
% Somma sottovettore
do
sum
indice + 1
indice
estremoSuperiore
while indice estremoInferiore do
istruzione
indice
indice 1
Un algoritmo
migliore si pu`o ottenere notando che la somma di A[i . . . j] e` uguale alla somma di A[i . . . j 1]
return max
u A[j].
L’algoritmo corrispondente ha costo O(n2 ).
© pi`
Alberto
Montresor
6
– iif(condizione, v1 , v2 )
Uninteger
algoritmo
migliore si pu`
o ottenere
notando che la somma di A[i . . . j] e` uguale alla somma di A[i . . . j 1]
maxsum(integer[
integerdo
n) istruzione 2
– foreach
elemento 2] A,
insieme
pi`uVersione
A[j]. L’algoritmo
ha costo O(n ).
2 -corrispondente
O(n2)
max
0
% Massimo valore trovato
– integer
% commento
for i
1 to n do
– integer,
real, boolean] A, integer n)
integer
maxsum(integer[
integer
sum
0
% Somma sottovettore
– integer
and,
not
for jor,
maxi to n0do
% Massimo valore trovato
2
sum + A[j]
– for
+,i sum
, ·,1 /,
to bxc,
n do dxe, log, x , . . .
if sum > max then
integermax
sum sum0
% Somma sottovettore
for
j
i
to
n
do
return max
RETTANGOLO
sum
sum + A[j]
integer
lunghezza
if
sum
>
max then
Un approccio basato
divide il vettore A[i . . . j] in due parti A[i . . . m], A[m + 1 . . . j],
maxsu divide-et-impera
sum
% Somma sottovettore
return max
integer
con m
= b(i +altezza
j)/2c. Ricorsivamente, viene calcolato:
return max
• maxs , il valore massimo fra tutti i sottovettori contenuti nella parte sinistra A[i . . . m]
T[] A
new T [1 . . . n]
• maxd , il valore
massimo
fra tutti i sottovettori contenuti nella parte destra A[m + 1 . . . j]
Un
basato
su .divide-et-impera
T [ approccio
][ ] B
new
T [1
. . n][1 . . . m] divide il vettore A[i . . . j] in due parti A[i . . . m], A[m + 1 . . . j],
con
m=
b(icalcolato
+ j)/2c.iterativamente
Ricorsivamente,
viene
calcolato:che sta a cavallo fra la parte sinistra e la parte
Inoltre,
viene
il massimo
sottovettore
RETTANGOLO
r
new RETTANGOLO
destra, ottenuto calcolando:
r.altezza
• maxs , il 10
valore massimo fra tutti i sottovettori contenuti nella parte sinistra A[i . . . m]
0
• max
delete
r s , il valore massimo fra tutti i sottovettori contenuti nella parte sinistra e confinanti con la parte
• destra
maxd ,(ovvero
il valore
tutti i sottovettori contenuti nella parte destra A[m + 1 . . . j]
chemassimo
terminanofra
in A[m]);
r
nil
integer sum(integer[ ] A, integer i, integer j)
integer sum
0
for k
i to j do
sum
sum + A[k]
return sum
Un algoritmo migliore si pu`o ottenere notando che la somma di A[i . . . j] e` uguale alla somma di A[i . . . j 1]
pi`u A[j]. L’algoritmo corrispondente ha costo O(n2 ).
integer maxsum(integer[ ] A, integer n)
integer max
0
to n do
for
i
1
© Alberto
Montresor
% Massimo valore trovato
7
0
• max
massimo
fra tutti i sottovettori
nella parte
destra
e confinanti
la parte
Inoltre,
viene
calcolato
iterativamente
il massimocontenuti
sottovettore
che sta
a cavallo
fra la con
parte
sinistra e la parte
d , il valore
(ovvero
che iniziano in A[m + 1]);
destra,sinistra
ottenuto
calcolando:
min(V, 1024)
A questo punto,
il valore finale e` dato dal massimo fra maxd , maxs e max0d + max0s . Come caso base, si
min•(E,
h)0 , il valore
max
massimo fra tutti i sottovettori contenuti nella parte sinistra e confinanti con la parte
consideranos vettori costituiti da 0 elementi (il cui valore e` 0) o da un elemento (il cui valore e` il massimo fra
destra
(ovvero
che
terminano
in A[m]);
l’elemento stesso e 0, in modo
da escludere
valori negativi).
© Alberto Montresor
0
8
Poich´e il sottovettore di valore massimo deve terminare in qualche posizione, calcolando nella variabile m il
valore massimo fra tutti i valori here, si ottiene il valore massimo per l’intero vettore. Questo algoritmo ha
Versione
4 - O(n)
costo
O(n).
LaVersione
chiamata iniziale
e` maxsumRic(A,
1, n); il costo computazionale e` O(n log n).
3 - O(n
log n)
integer maxsumRic(integer[ ] A, integer i, integer j)
integer maxs , maxd , max0s , max0d , s, m, k
if i > j then return 0
if i = j then return max(0, A[i])
m
b(i + j)/2c
maxs
maxsumRic(A, i, m)
maxd
maxsumRic(A, m + 1, j)
sum
0
max0s
max0d
0
for k
m downto i do
sum
sum + A[k]
if sum > max0s then max0s
sum
sum
0
for k
m + 1 to j do
sum
sum + A[k]
if sum > max0d then max0d
sum
0
return max(maxs , maxd , maxs + max0d )
integer maxsum(integer[ ] A, integer n)
integer max
0
integer here
0
for i
1 to n do
here
max(here + A[i], 0)
max
max(here, max)
return max
9
© Alberto Montresor
% Massimo valore trovato
% Massimo valore che termina nella posizione attuale
10
© Alberto Montresor
Si pu`o fare ancora meglio. Sia ti il valore del massimo sottovettore che termina in i. Se conosco ti 1 ,
posso
ti osservando due casi: se A[i] + ti 1 ha un valore positivo, questo e` il valore del
massimo
Un calcolare
po’ di storia
Programma
del corso
sottovettore che termina in i; se invece ha valore negativo, il massimo sottovettore che termina in i ha valore
0.✦ Questo
vieneun’idea
calcolato
passo
passoassociata
dalla variabile
here,problema
che assumee ilalle
valore
A[i],
0).Montresor. Algoritmi e Strutture di Dati. c 2010
✦ Introduzione
✦ Tecniche
De Agostinidi
Scuola
Per avere
della
storia
a questo
sue max(here + Bertossi,
programmazione
Poich´
e
il
sottovettore
di
valore
massimo
deve
terminare
in
qualche
posizione,
calcolando
nella
variabile
m
il
soluzioni, leggete:
✦ Scelta della struttura dati
✦ Analisi degli algoritmi
valore
massimo fra tutti i valori here, si ottiene il valore massimo per l’intero vettore. Questo algoritmo
ha
✦ Jon Bentley. Programming Pearls. Addison-Wesley Publishing Company,
✦ Divide et impera
costo O(n).
✦ Notazione asintotica
Reading (MA). April, 1986. [Capitolo 7]
✦
integer maxsum(integer[ ] A, integer n)
integer max
0
integer here
0
for i
1 to n do
here
max(here + A[i], 0)
max
max(here, max)
return max
© Alberto Montresor
Ricorrenze
✦ Analisi ammortizzata
% Massimo valore trovato
% Massimo valore che termina nella posizione attuale
✦
11
Strutture dati:
✦
Programmazione dinamica
✦
Algoritmi greedy
✦
Ricerca locale
Pile, code, liste
✦
✦
Backtrack
Alberi
✦
✦
Algoritmi probabilistici
✦
Alberi bilanciati
✦
Tabelle hash
✦
Teoria dell’NP-completezza
✦
Grafi
✦
Tecniche risolutive
✦
Strutture speciali
© Alberto Montresor
✦
Problemi intrattabili (cenni)
12
Scopo del corso
✦
Fornire due elementi fondamentali:
✦
✦
!
Un consiglio
Ascolto e dimentico. Vedo e ricordo. Faccio e comprendo
!
Contenuto: una panoramica aggiornata sui problemi fondamentali e le loro soluzioni
(Proverbio cinese)
Metodo: i principi e le tecniche per risolvere i problemi insoliti che
capitano nella vita di tutti i giorni
Contenuto: lista di algoritmi
!
Analizzate il loro codice
!
Convincetevi che funzionano
!
Provate a implementarli
!
Metodo: pensiero astratto
!
✦
Lo studio degli algoritmi non è uno sport in cui si guarda e basta…
✦
Bisogna allenarsi!
✦
E' necessario
Come sviluppare nuovi
algoritmi per ogni problema che
si presenta
13
© Alberto Montresor
Sul comportamento da tenere in aula…
✦
Scrivere molti algoritmi
✦
Analizzare la loro correttezza
✦
Analizzare la loro efficienza
© Alberto Montresor
14
Portatili
!
© Alberto Montresor
Laurentius da Voltolina!
Bologna, seconda metà del XIV secolo
15
!
Portatili in aula durante le lezioni?
!
Solo nelle file in fondo!
© Alberto Montresor
16
Sull’interazione a lezione...
!
Sull’interazione a lezione...
Domanda e sembrerai sciocco per un minuto, non domandare e resterai sciocco per sempre
!
(Proverbio cinese)
!
✦
Domande, domande, domande
✦
✦
Se ci sono punti poco chiari nella lezione, non esitate a pretendere
ulteriori spiegazioni
✦
Se volete ulteriori approfondimenti, chiedete e vi sarà dato
✦
Non è detto che conosca tutte le risposte - ma so dove cercare...
Rispondete alle mie domande.
✦
Parlare in 150 è difficile, ma cercate di partecipare tutti
© Alberto Montresor
17
Sito web del corso
✦
✦
✦
http://disi.unitn.it/~montreso/asd/
Libro adottato
✦
Trovate:
✦
Lucidi e appunti
✦
Video lezioni
✦
Software didattico
✦
Esercizi e compiti passati
✦
Progetti
✦
Approfondimenti
© Alberto Montresor
18
Testi
Il corso è dotato di un sito web:
✦
© Alberto Montresor
✦
Per approfondimenti:
✦
✦
19
Bertossi, Montresor
Algoritmi e Strutture di Dati - 3a ed.
Tecniche nuove, 2014
Cormen, Leiserson, Rivest, Stein Introduction to Algorithms
The MIT Press; 3rd edition (2009)
Jon Kleinberg, Eva Tardos
Algorithm Design
Addison Wesley, 1st edition (2006)
© Alberto Montresor
20
Lezioni e ricevimento
✦
Esame
Organizzazione di una settimana di corso
Diviso in due parti obbligatorie:
!
✦
Martedì
14.00-16.00
Lezione
A103
✦
Mercoledì 11.00-13.00
Lezione
A103
✦
Venerdì
11.00-13.00
Esercitazione
A105
✦
Venerdì
14.00-16.00
Laboratorio
PC B106
!
!
Ricevimento
!
Niente orale se non avete passato lo scritto (voto minimo: 18)
Niente orale se non avete consegnato almeno una esercitazione
✦
Via mail, quando volete
!
✦
Dopo ogni lezione, in aula
!
✦
Su appuntamento
!
!
© Alberto Montresor
21
Laboratorio
✦
✦
Dopo aver passato lo scritto, potete venire all'orale quando volete e
quante volte volete
Se vi ripresentate ad uno scritto, i voti precedenti vengono persi
Dovete completare l’orale entro settembre 2015, poi tutti i voti vengono cancellati
© Alberto Montresor
Scritti parziali e laboratorio (date da confermare)
!
✦
Corrette tramite software via interfaccia web
!
Lab. 1 - Deadline 14 Novembre
Scritto parziale 1 - 31 Ottobre
✦
Cheating detection
!
Lab. 2 - Deadline 12 Dicembre
Scritto parziale 2 - 19 Dicembre
Due esercitazioni durante il corso
✦
!
Deadline: novembre, dicembre
Se consegnate entro le deadline previste, danno origine a punteggio
aggiuntivo da sommare al vostro voto scritto (max +2,+3)
!
Esercitazioni dopo il corso
✦
Per accedere all’orale dovete consegnare almeno una esercitazione
funzionante
✦
Esercitazioni diverse in sessioni diverse, con deadline specifiche
✦
NON danno origine a punteggio aggiuntivo
© Alberto Montresor
22
Date
Esercitazioni di laboratorio
✦
✦
Orale
50%
! Dovete dimostrare di aver capito - non di sapere a memoria
Alcune regole
!
✦
Scritto risoluzione problemi (+lab)
50%
! E’ possibile usare libri e appunti, non strumenti elettronici
!
23
Per accedere all’orale in Gennaio, Febbraio 2015
!
Scritto: (OTT and DIC) or GEN or FEB
!
Lab: (OTT or DIC)
Per accedere all’orale in Giugno, Luglio 2015
!
Scritto: (OTT and DIC) or GEN or FEB or GIU or LUG
!
Lab: (OTT or DIC) or GIU
Per accedere all’orale in Settembre 2015
!
Scritto: (OTT and DIC) or GEN or FEB or GIU or LUG or SET
!
Lab: (OTT or DIC) or GIU or SET
© Alberto Montresor
24
Argomenti vari
✦
"Cheating policies"
Varie ed eventuali
✦
Mailing list
✦
Pagina del corso vs Esse3 - la mia pagina è più aggiornata
✦
Questionario continuo
!
Durante gli scritti
!
!
!
!
25
"Cheating policies"
!
Dopo gli scritti
!
!
Il compito potrà essere annullato anche in caso di manifesta copiatura
scoperta nel corso della correzione degli scritti
Anche in questo caso, l'annullamento riguarda sia il "copiatore" che il
"copiato"
© Alberto Montresor
27
Chi viene sorpreso a parlare, viene invitato a lasciare l'aula e a
ripresentarsi al prossimo appello
Questo vale per entrambi gli "estremi" della comunicazione: sia chi parla
sia chi ascolta
Nota:
!
© Alberto Montresor
E' vietato comunicare in qualunque modo (oralmente, in forma scritta o
elettronicamente), per qualsivoglia motivo.
Se avete bisogno di qualunque cosa, chiedete al docente
© Alberto Montresor
26