Diario e materiale delle lezioni

Nota: Quando necessario sono forniti i riferimenti a testi integrativi/alternativi ad [A]/[B] o materiale didattico (slides, codice) fornito dalla docente. Il materiale integrativo non sostituisce i contenuti del libro di testo, bensì è fornito, quando possibile, con l'intenzione di aiutare lo studente a seguire le lezioni e a colmare lacune derivanti da eventuali assenze. E' importante precisare che esso non è esente da errori ed imperfezioni. La collaborazione degli studenti che vorranno segnalarmeli non solo è benvenuta, ma auspicata.
  • 1) 24.09.2019 (2h) Presentazione del corso (pdf). Introduzione: Ciclo di sviluppo di codice algoritmico (pdf).
  • 2) 27.09.2019 (3h) Richiami di Java - parte I (pdf). Focus su: struttura di controllo switch, espressioni condizionali, istruzioni break e continue, modificatori fondamentali.
  • 3) 03.10.2019 (2h) Richiami di Java - parte II (pdf, java). Focus su: inizializzatore statico, inizializzatore d'istanza, incapsulamento, ereditarietà, polimorfismo, overriding, binding dinamico.
    Esercitazione: le classi Tempo e Tempo2.
  • 4) 04.10.2019 (3h) Richiami di Java: la classe Object; le classi astratte (pdf).
    Esercitazione: la classe astratta VettoreOrdinato, le classi VettoreTempo e VettorePunto ( java).
  • 5) 10.10.2019 (2h) Oltre le classi: Le interfacce (pdf).
    Esercitazione: l'interfaccia Ordinabile - Ordinamento di array di oggetti Punto, Interi e Persona (Java).
  • 6) 11.10.2019 (3h) La libreria standard ed il Java Collections Framework (pdf).
    Esercitazione: classi astratte ed interfacce (Java), interfaccia Comparable (Java).
  • 7) 16.10.2019 (2h) La libreria standard: introduzione alla programmazione parametrica (generics) (pdf).
    Esercitazione: la classe parametrica VettoreOrdinato.
  • 8) 18.10.2019 (3h) Generics e sottotipi (pdf, Java).
    Il Java Collections Framework: le interfacce Collection e List; strutture dati elementari: tecniche per rappresentare collezioni di oggetti; le classi ArrayList e LinkedList (pdf, Java).
  • 9) 24.10.2019 (2h) Le interfacce Iterable e Iterator; il ciclo for-each (pdf).
    Esercitazione sull'uso degli iteratori (Java)
  • 10) 25.10.2019 (3h) Ordinamento di collezioni e array di oggetti: le interfacce Comparable e Comparator (pdf).
    Esercitazione: Ordinamento di array e collezioni di oggetti Student; Ordinamento e riduzione dei termini di un'epressione algebrica ad una variabile rappresentata come lista di termini (Java).
  • 11) 31.10.2019 (2h) Le liste concatenate. La classe SinglyLinkedList (introduzione): una classe giocattolo (pdf).
    Implementazione della classe SinglyLinkedList (Java).
  • 12) 04.11.2019 (2h) Esercitazione preparatoria per la I prova parziale (Java).
  • MEMO: Svolgimento I prova intermedia di Laboratorio: venerdì 08.11.2019, ore 9:00 aula A1.6, in concomitanza con l’appello straordinario di ASDL per i fuori corso.
  • 13) 13.11.2019 (2h) Le liste concatenate (continua). Implementazione della classe SinglyLinkedList2 e test d'uso su liste di oggetti Studente (Java).
    Introduzione alle liste doppiamente concatenate. Homework: implementare la classe DoublyLinkedList.
  • 14) 15.11.2019 (3h) Ordinamento di liste e array di oggetti generici basato sull'uso delle interfacce Comparable e Comparator.
    Implementazione della classe SortedDoublyLinkedList. Esercitazione: test d'uso su liste ordinate di oggetti interi casuali.
    Richiami sugli algoritmi di ordinamento bubbleSort, insertionSort, selectionSort, mergeSort, quickSort e relativa implementazione. Misura delle prestazioni degli algoritmi di ordinamento di array di interi. (Java).
  • 15) 20.11.2019 (2h) Correzione della I prova parziale (Java).
    Discussione aperta su errori ricorrenti, soluzioni alternative ed esiti. Visione dei compiti.
  • 16) 12.11.2019 (3h) ADT stack e queue (pdf, Java).
    Interfaccia Stack e relative in Java mediante array e liste. Esercitazione: verifica della palindromia, [homework] quicksort iterativo (Java ).
    Interfaccia Queue e relative in Java mediante array e liste (Java )
  • 17) 27.11.2019 (2h) Alberi binari: l'interfaccia BinaryTree, La classe BinaryNode, la classe LinkedBinaryTree (Java).
  • 18) 29.11.2019 (3h) Alberi binari (continua): Visite di alberi binari (richiami); Visite (iteratori) ricorsive ed iterative in profondità (preorder, inorder, postorder), visita in ampiezza. Esercitazione (Java, include e completa il codice della lezione precedente).
  • 19) 04.12.2019 (2h) Heap binari. L'interfaccia BinaryHeap, implementazioni basate su array e ArrayList: classi ArrayBinaryHeap e ListBinaryHeap, applicazione: HeapSort (Java).
    Esercitazione: ordinamento di array di interi; ordinamento di array di stringhe in ordine lessicografico crescente e decrescente e in ordine crescente di lunghezza (Java).
  • 20) 06.12.2019 (3h) Priority Queue: l'interfaccia Queue e la classe PriorityQueue (JCF); l'interfaccia MyQueue e la classe HeapPriorityQueue (pdf, Java).
    Alberi 2-3-4 bilanciati: definizione, scomposizione di 4-nodi (split), algoritmi di ricerca e di inserimento top-down. Alberi Red-Black: definizione, scomposizione di 4-nodi in un albero Red-Black, algoritmo di inserimento top-down con rotazioni. (pdf).
  • 21) 10.12.2019 (2h) Alberi Red-Black (continua): Richiami sull'algoritmo di inserimento top-down con rotazioni; esempio di costruzione di un albero RB per inserimenti successivi di chiavi.
    Esercitazione: la classe BinarySearchTree (Java). Le interfacce Set e SortedSet (pdf).
  • 22) 13.12.2019 (3h) Le interfacce Set e SortedSet (continua) e le classi HashSet e TreeSet. Esercitazione: esempio di uso delle classi HashSet e TreeSet (Java).
    Le interfacce Map e SortedMap e le classi HashMap e TreeMap (pdf).
  • 23) 16.12.2019 (2h) Esercitazione: svolgimento di esercizi su HashSet/TreeSet e HashMap/TreeMap (Java).
  • 24) 20.12.2019 (3h) Grafi: richiami di teoria, visite in ampiezza ed in profondità.
    L'interfaccia Graph e la classe Network (I parte), iteratori breadth-first e depth-first, verifica della connessione forte di un digrafo.
    La classe UndirectedNetwork, verifica della connessione in un grafo non orientato. Rif: pdf (pp. 1-39), Java.
  • 25) 08.01.2020 (2h) La classe Network (continua): implementazione di algoritmi fondamentali: costruzione di un minimo albero ricoprente - approccio Prim (getMinimumSpanningTree()), costruzione di un cammino minimo tra due vertici - approccio Dijkstra (getShortestPath()). Rif: pdf (pp. 40-61), Java.
  • 26) 09.01.2020 (2h) Esercitazione preparatoria per la II prova parziale (Java).
  • -- fine corso --



Modalità d'esame:
L'esame consiste in una prova scritta e in un eventuale colloquio orale (obbligatorio a discrezione della docente in presenza di errori significativi nell’elaborato scritto, oppure facoltativo, su richiesta dello studente, per migliorare il voto conseguito allo scritto). Le prove scritte di teoria e di laboratorio possono essere svolte disgiuntamente, ma la loro validità è mantenuta solo all’interno dello stesso anno solare.
La prova scritta consiste nello svolgimento di esercizi di programmazione in Java volti a valutare il livello di conoscenza e comprensione degli argomenti e l’abilità pratica. Durante lo svolgimento della prova scritta agli studenti è consentito consultare il libro di testo e gli appunti del corso.
Se obbligatorio, per non perdere il voto conseguito nella prova scritta, l'esame orale di Laboratorio deve essere svolto nel medesimo appello dello scritto. A partire dalla discussione della prova scritta, il colloquio verte su tutti gli argomenti in programma. Se facoltativo, purché sostenuto prima di quello di Teoria, l'orale deve essere svolto all’interno dello stesso anno solare. Se si viene respinti all’esame orale di laboratorio, bisogna ripetere la sola prova scritta di laboratorio.
Per aiutare gli studenti a dividere il carico di lavoro, è data la possibilità di svolgere una prova scritta parziale sugli argomenti svolti nella prima parte del corso.

Testi di riferimento:
[A] Algoritmi e strutture dati in Java. Autore: W. J. Collins (Ed. Maggioli)
Dettagli: CAP 1 (§§ 1.2, 1.3), CAP 2 (§§ 2.1--2.5), CAP 3 (§§ 3.1, 3.7, 3.8), CAP 5, §6.5, CAP 7 (§§ 7.1, 7.2), CAP 8 (§§ 8.1--8.3), CAP 9 (escluso §9.2.4), CAP 10, CAP 11 (escluso alberi AVL), CAP 12 (escluso Radix Sort), CAP 13 (§§ 13.1, 13.2, 13.5.0, 13.5.1), CAP 14 (§§ 14.1--14.4), CAP 16.
[B] Progetto di algoritmi e strutture dati in Java. Autori: C. Demetrescu, U. Ferraro Petrillo, I. Finocchi, G. F. Italiano (Ed. McGraw-Hill)
Dettagli: CAP 1 (§§ 1.1--1.3, 1.4.1, 1.4.2--1.4.4, 1.4.6), CAP 2 (§§ 2.1--2.5); §4.3.

Altri testi (in inglese):
Data Structures and the Java Collections Framework. Author: W. J. Collins
Data Structures and Algorithm Analysis in Java. Author: M. A. Weiss
Data Structures & Problem Solving Using Java. Author: M. A. Weiss
In evidenza
  • 05.03.2020 - Modalità ricevimento studenti Il ricevimento studenti in presenza è sospeso e si svolgerà alternativamente con l’attivazione di forme di colloquio a distanza (mail, Teams, Skype, Zoom, etc) da concordare con la docente. Gli studenti interessati possono contattare la docente per email (giovanna.melideo@univaq.it) oppure attraverso la chat del Team (usare @Giovanna Melideo per consentire l'invio della notifica alla docente)
Errata Corrige
  • Nessun avviso di correzione
Risorse
Avvisi archiviati
  • 24.02.2020 - Sospensione ricevimento studenti di martedì 25.02.2020 A causa di un concomitante impegno della docente, il ricevimento studenti di questa settimana è sospeso. Si prega di contattare la docente per email per fissare un appuntamento.
  • 18.02.2020 Risultati III appello Risultati della prova scritta di Laboratorio svolta martedì 18.02.2020.
    Le prove orali di Laboratorio e la discussione dei compiti si svolgeranno giovedì 20 febbraio, ore 9:30, II piano Blocco Zero.
    Per l'orale di Laboratorio si prega di prenotarsi via email (giovanna.melideo@univaq.it), per quello di Teoria di riempire il doodle.
  • 05.02.2020 Risultati II appello Risultati della prova scritta di Laboratorio svolta martedì 04.02.2020.
    Le prove orali di Laboratorio si svolgeranno giovedì 6 febbraio oppure alternativamente lunedì 17 febbraio, ore 10, II piano Blocco Zero.
    Le prove orali di Teoria si svolgeranno martedì 11 febbraio 2020, ore 10:00, II piano Blocco Zero. Per l'orale di Laboratorio si prega di prenotarsi via email (giovanna.melideo@univaq.it), per quello di Teoria riempire il doodle.
  • 27.01.2020 Risultati I appello Risultati della prova scritta di Laboratorio svolta martedì 21.01.2020. Le prove orali di Laboratorio e Teoria si svolgeranno mercoledì 29 Gennaio 2020, ore 10:00, Secondo piano Blocco Zero.
    Per l'orale di Laboratorio si prega di prenotarsi via email (giovanna.melideo@univaq.it), per quello di Teoria riempire il doodle.
  • 17.01.2020 Risultati II parziale Risultati della II prova parziale di Laboratorio svolta martedì 14.01.2020.
  • variazione aula II parziale del 14/01/2020 Si comunica che la II prova parziale di Algoritmi e Strutture Dati con Lab (Proietti-Melideo) si svolgerà in aula C1.16 (ed. Coppito 1) anziché A1.6 (ed. Blocco zero), ore 10:30.
    In via cautelativa, si avvisa che in caso di sovraffollamento la prova potrebbe essere posticipata alle ore 11:30 in aula C1.9.
  • II prova parziale Le II prove parziali di ASDL si svolgeranno martedì 14.01.2020 (ore 10:30, aula A1.6 Blocco zero).
    I primi 40 min. saranno dedicati allo svolgimento della prova teoria, a seguire sarà svolta la prova di laboratorio. Gli studenti interessati alla sola prova di laboratorio potranno presentarsi direttamente alle ore 11:10.
  • Calendario degli appelli d'esame - I sessione 2020 21.01 I appello, 04.02 II appello, 18.02 III appello (ore 10:30, aula A1.6 Blocco zero).
    I primi 40 min. saranno dedicati allo svolgimento della prova teoria, a seguire sarà svolta la prova di laboratorio. Gli studenti interessati alla sola prova di laboratorio potranno presentarsi direttamente alle ore 11:10.
  • Orario lezioni 7-10/01/2020 Le lezioni di Laboratorio dell'ultima settimana dal 7 al 10 gennaio si svolgeranno mercoledì 8 e giovedi 9, ore 11:30-13:30, aula A1.6.
  • Spostamento ricevimento studenti di martedì 17.12.2019 A causa di un concomitante seminario di ricerca, il ricevimento studenti di questa settimana è spostato a mercoledì 18.12, ore 9-11.
  • 06.12.2019 Variazione orario settimana 09-13.12.2019 Le lezioni di LASD della prossima settimana seguiranno il seguente orario: martedì 10.12 ore 11:30-13:30 e venerdì 13.12 ore 10:30-13:30, aula A1.6 (edificio Alan Turing). La lezione di Teoria (prof. Proietti) è di conseguenza spostata a mercoledì 11.12 ore 11:30-13:30.
  • 06.12.2019 Variazione orario settimana 16-20.12.2019 Le lezioni di LASD della settimana dal 16 al 20 dicembre seguiranno il seguente orario: lunedì 16.12 e venerdì 20.12 ore 10:30-13:30, aula A1.6 (edificio Alan Turing). La lezione di mercoledì 18.12 è di conseguenza annullata.
  • 19.11.2019 Risultati I parziale Risultati della I prova parziale di Laboratorio svolta venerdì 08.11.2019.
  • 12.11.2019 Variazione orario lezioni Si avvisa che a partire dal 12 novembre l'orario delle lezioni di ASDL subirà la seguente variazione: martedì/giovedì (11:30-13:30) Teoria; mercoledì (11:30-13:30)/venerdì (10:30-13:30) Laboratorio.
  • 25.10.2019 - Data I parziale La I prova parziale del corso di ASDL si svolgerà in modo disgiunto secondo il seguente calendario (aula A1.6):
    - Teoria: martedì 05.11.2019, ore 11:30
    - Laboratorio: venerdì 08.11.2019, ore 9:00, in concomitanza con l’appello straordinario per i fuori corso (scritto di Teoria e di Laboratorio) .
  • 25.10.2019 - Esercitazione integrativa I parziale Il giorno lunedì 04.11.2019 ore 11:30, aula A1.6 (al termine dell'esercitazione di Sistemi Operativi), si svolgerà un'esercitazione integrativa preparatoria per la I prova parziale di Laboratorio.