! ! 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
© Copyright 2024 Paperzz