====== Anno 2011-2012====== Docente: **Roberto Grossi** === Avviso === ** Maltempo ** La prova di esame di "Algoritmica e Laboratorio" e di "Algoritmica 2" dell'1.2.2012 si svolgerà regolarmente. Tuttavia, per gli studenti iscritti a tale prova (nel calendario degli appelli della sezione didattica del sito www.di.unipi.it) ma impossibilitati a partecipare a causa del maltempo, sarà fissata una prova di recupero in data da concordare direttamente con il prof. Grossi via email. Com'è consuetudine, il voto finale dipende dal voto dell'esame scritto e da quello dell'esame orale. Per iscriversi all'esame orale, presentarsi nello studio del docente all'ora indicata, per redigere un calendario insieme agli altri studenti interessati all'esame orale. In caso di impegni, scrivere il proprio nome nel foglio/calendario che verrà successivamente appeso sulla porta del docente. === Date d'esame === ^ Data ^ Ora ^ Luogo ^ Tipo Prova ^ Note ^ | 21/12/2011 | 15:00 | Aula C1 | Compitino | Iscriversi all'esame | | 11/01/2012 | 09:00 | Aula A | Primo appello | Iscriversi all'esame | | 16/01/2012 | 09:00 | studio | Orali | Partecipare per fissare il calendario | | 01/02/2012 | 09:00 | Aula A | Secondo appello | Iscriversi all'esame | | 06/02/2012 | 09:00 | studio | Orali | Partecipare per fissare il calendario | === Obiettivi di apprendimento === In questo corso vengono studiate, progettate e analizzate soluzioni algoritmiche e strutture di dati evolute per la risoluzione efficiente di problemi combinatori che coinvolgono vari tipi di dati, per esempio, interi, stringhe, punti (geometrici), alberi e grafi. Questo corso costituisce un naturale approfondimento e ampliamento delle conoscenze di base apprese nel percorso della laurea triennale. Tuttavia, essendo rivolto a studenti più maturi scientificamente, è orientato al brainstorming e al problem solving su tematiche più complesse. Lo scopo non è semplicemente quello di presentare ulteriori N algoritmi e tecniche risolutive, ma di affinare le capacità risolutive degli studenti. Più precisamente, le lezioni del martedì e del mercoledì tratteranno gli argomenti canonici del corso, proponendo problemi ad essi collegati da risolvere durante il resto della settimana: il lunedì successivo, tali problemi verranno approfonditi e osservati da più punti di vista, anche sbagliati, in quanto l'errore è funzionale all'apprendimento di situazioni complesse. Viene data enfasi al percorso mentale che porta alla soluzione (piuttosto che la soluzione stessa), sotto la guida del docente in base alla reazione dei partecipanti. E a proposito di errori e intelligenza, Alan Turing nel 1947 scrive: "... if a machine is expected to be infallible, it cannot also be intelligent", che può essere preso come motto del corso e come un invito a partecipare attivamente alle discussioni in aula senza timore di proporre idee sbagliate. Dal punto di vista del programma da svolgere e degli esami, il lunedì non verranno aggiunti nuovi argomenti ma si studieranno problemi correlati: l'esame scritto conterrà alcuni di questi problemi discussi il lunedì; l'esame orale si baserà sugli argomenti presentati il martedì e il mercoledì. Il syllabus è organizzato per ambiti applicativi, al fine di contestualizzare le tecniche studiate nella realizzazione di software efficiente per essi, e così da consentire adattamenti e specializzazioni di anno in anno che si renderanno necessari e/o opportuni. Per gli studenti degli anni precedenti: i contenuti del corso non cambieranno significativamente rispetto a quelli degli anni precedenti, ma l'esame scritto sarà basato su problemi più complessi, che però saranno stati discussi e rielaborati durante il semestre (ogni lunedì). === Programma di massima === == Accesso ai dati e loro compressione == * Compressione di testi e di interi * Strutture di dati randomizzate * Motori di ricerca: liste invertite == Memorie gerarchiche == * Modelli di computazione * Permutazioni e ordinamenti * Dizionari == Stringologia == * Algoritmi di pattern matching * Trie * Array dei suffissi * Albero dei suffissi == Strutture di dati evolute == * Strutture di dati distribuite * Analisi competitiva * Algoritmi on-line == Problemi "difficili" e loro soluzione == * I problemi NP-hard * Algoritmi di approssimazione * Algoritmi randomizzati == Registro delle lezioni == * [[http://unimap.unipi.it/registri/printregistriNEW.php?re=60790:::&ri=5777|Collegamento a UNIMAP]] === Materiale didattico === * ESERCITAZIONI - PROBLEM SOLVING * Problemi discussi (non è detto che abbiano un'unica soluzione) {{:magistraleinformatica:alg2:algo2_11:esercitazioni2011.pdf|[Elenco]}} * STRINGOLOGIA e COMPRESSIONE DI DATI * Stringologia {{:magistraleinformatica:alg2:algo2_11:dispensestringmatching.pdf|[dispensa: tutta, escluse sez.2.4,2.5,4.4,5.3]}} * Compressione di dati {{:magistraleinformatica:alg2:algo2_11:07_mg-partchap2.pdf|[cap.2:inizio-pag.36,sez.2.4,sez.2.5(solo BWT), sez.2.6]}} {{:magistraleinformatica:alg2:algo2_11:07_mg-partchap3.pdf|[cap 3: fino pag.119]}} * Suffix tree {{:magistraleinformatica:alg2:tre.pdf|[Cap.5; fino pag.93]}} * Suffix array {{:magistraleinformatica:alg2:quattro.pdf|[Cap.7: fino pag.154]}} [[http://www.cs.helsinki.fi/u/tpkarkka/publications/jacm05-revised.pdf|[DC3: solo Sezione 3]]] * MEMORIE GERARCHICHE * Modelli di computazione EMM e CO: [[http://www.ittc.ku.edu/~jsv/Papers/Vit.IO_book.pdf|[Libro: introduzione, cap.2 e 3 (porre D=1 dischi)]]] * EMM Mergesort e limiti inferiori: [[http://people.cs.aau.dk/~simas/aalg04/esort.pdf|[Dispensa MS]]] [[http://www.daimi.au.dk/%7Elarge/ioS06/Alower.pdf|[Dispensa LB]]] * MapReduce: [[http://code.google.com/edu/parallel/mapreduce-tutorial.html|[Mini tutorial]]] * van Emde Boas (vEB) layout [[http://erikdemaine.org/papers/BRICS2002/paper.pdf|[sez.4.1]]] * paginazione alberi {{:magistraleinformatica:alg2:algo2_11:paginazione.pdf|[sez.3.1]}} [[http://www.cs.sunysb.edu/~bender/pub/treelayout-full.ps|[sez.5.1]]] {{:magistraleinformatica:alg2:algo2_11:cotrees_grossi.pdf|[esempio]}} * ALGORITMI ON LINE E RANDOMIZZATI * Algoritmi per il problema del paging {{:magistraleinformatica:alg2:paging.pdf|[sez.3]}} [[http://www.cs.cmu.edu/~sleator/papers/competitive-paging.pdf|[sez.2 e 3]]] * QUICKSORT randomizzato {{:magistraleinformatica:alg2:algo2_10:randqs.pdf|[sez.2.5.4]}} * CUCU Hashing {{:magistraleinformatica:alg2:algo2_10:cuckoo-undergrad.pdf|[dispensa]}} * Skip list {{:magistraleinformatica:alg2:algo2_11:skip.pdf|[sez.3.3]}} * PROBLEMI DIFFICILI E APPROSSIMAZIONE * NP-completezza e approssimazione I {{:magistraleinformatica:alg2:algo2_10:dispensa_0.pdf|[cap.9]}} {{:magistraleinformatica:alg2:algo2_10:alg2_21-12.pdf|[appunti Dinelli]}} * Approssimazione II [[http://www.dis.uniroma1.it/~ausiello/InfoTeoIIRM/libro.html|[cap.2:pp.39-47, paragrafo 2.2.2]]] === Risultati e Soluzioni === * Non più disponibili * TESTI DI ALCUNI ESAMI: {{:magistraleinformatica:alg2:algo2_10:algo2_110621.pdf|}},{{:magistraleinformatica:alg2:algo2_10:algo2_110606.pdf|}}, {{:magistraleinformatica:alg2:algo2_10:algo2-01-02-11.pdf|}}, {{:magistraleinformatica:alg2:algo2_10:algo2-16-02-11.pdf|}}, {{:magistraleinformatica:alg2:algo2_10:algo2-26-01-11.pdf|}}, {{:magistraleinformatica:alg2:algo2_10:algo2-30-11-10.pdf|}}