Diario e materiale delle lezioni

Nota: Quando necessario sono forniti i riferimenti a testi integrativi/alternativi ad [A] 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) 20.09.2018 (2h) Presentazione del corso (pdf). Introduzione: Ciclo di sviluppo di codice algoritmico ( pdf).
  • 2) 21.09.2018 (3h) Richiami di Java - parte I (pdf). Focus su: struttura di controllo switch, istruzioni break e continue, modificatori fondamentali, inizializzatore statico, inizializzatore d'istanza.
  • 3) 27.09.2018 (2h) Richiami di Java - parte II (pdf). Focus su classi astratte.
    Esercitazione su modificatori fondamentali, inizializzatori d'istanza e statico (le classi Tempo e Tempo2), classi astratte (le classi VettoreOrdinato e Vettore Tempo).
  • 4) 04.10.2018 (2h) Classi astratte. Oltre le classi: Le interfacce (pdf).
    Esercitazione: L'interfaccia Ordinabile - Ordinamento di array di oggetti Punto e di array di interi.
  • 5) 05.10.2018 (3h) La libreria standard ed il Java Collections Framework (pdf).
    Focus su classe Object, metodi equals() e toString() (esercitazione), interfaccia Comparable, classi wrapper.
    Esercitazione: uso dell'interfaccia Ordinabile - Ordinamento di array di oggetti Persona.
  • 6) 11.10.2018 (2h) La libreria standard: introduzione alla programmazione parametrica (generics) (pdf).
    Esercitazione: classi astratte ed interfacce.
  • 7) 12.10.2018 (3h) Il Java Collections Framework: le interfacce Iterable, Iterator, Collection e List; strutture dati elementari: tecniche per rappresentare collezioni di oggetti; le classi ArrayList e LinkedList; gli iteratori e il ciclo for-each (pdf).
    Esercitazione: la classe RandomList.
  • 8) 18.10.2018 (2h) Esercitazione: uso degli iteratori.
    Ordinamento di collezioni e array di oggetti: le interfacce Comparable e Comparator (pdf).
    Esercitazione: la classe Student; ordinamento di array e collezioni di oggetti Student.
  • 9) 19.10.2018 (3h) Esercitazione: ordinamento e riduzione dei termini di un'epressione algebrica ad una variabile rappresentata come lista di termini.
    Le liste concatenate. La classe SinglyLinkedList (introduzione): una classe giocattolo (pdf).
  • 10) 25.10.2018 (2h) Le liste concatenate (continua). Implementazione delle classi SinglyLinkedList e SinglyLinkedList2.
    Homework - write the following methods for SinglyLinkedList2 object: (1) public Object[] toArray(); (2) public E remove (int index); (3) public E set(int index, E element); (4) public boolean equals(Object obj); where two SinglyLinkedList2 instances are said to be equal if both the instances contain the same elements in exactly the same order; (5) public SinglyLinkedList2 copy(); (6) public SinglyLinkedList2 reverse(); public void reverseThisList();
  • 11) 26.10.2018 (3h) Implementazione della classe SinglyLinkedList2 (continua) e correzione Homework. Esercitazione: test d'uso su liste di oggetti Studente.
    Implementazione della classe SortedSinglyLinkedList. Esercitazione: test d'uso su liste ordinate di oggetti interi casuali.
  • 12) 29.10.2018 ore 8:30-10:30 (2h) Ordinamento di array di oggetti generici basato sull'uso delle interfacce Comparable e Comparator e misura delle prestazioni degli algoritmi di ordinamento di array di interi. Richiami sugli algoritmi di ordinamento bubbleSort, insertionSort, selectionSort, mergeSort, quickSort e relativa implementazione.
  • 13) 30.10.2018 (2h) Esercitazione preparatoria per la I prova parziale.
  • Pausa per svolgimento prova intermedia 05-09/11/2018
  • 14) 16.11.2018 (3h) Correzione della I prova parziale.
    ADT stack e queue (slides: pdf).
    Interfaccia Stack e relative implementazioni in Java mediante array e liste.
    Interfaccia Queue e relative implementazioni in Java mediante array e liste.
  • 15) 21.11.2018 (2h) Esercitazione (Stack): verifica della palindromia, quicksort iterativo.
    Alberi binari: l'interfaccia BinaryTree, La classe BinaryNode.
  • 16) 23.11.2018 (3h) Alberi binari (continua): la classe LinkedBinaryTree; visite di alberi binari (iteratori): visite (ricorsive ed iterative) in profondità (preorder, inorder, postorder), visita in ampiezza.
  • 17) 28.11.2018 (2h) Esercitazione (Alberi binari).
    Heap binari: la classe BinaryHeap (basata su array).
  • 18) 30.11.2018 (3h) Heap binari (continua). La classe ALBinaryHeap (basata su ArrayList).
    Heapsort. Esercitazione: ordinamento di array di interi; ordinamento di array di stringhe in ordine lessicografico crescente e decrescente e in ordine crescente di lunghezza.
    Priority Queue: l'interfaccia Queue e la classe PriorityQueue (JCF); l'interfaccia Queue e la classe HeapPriorityQueue.
  • 19) 05.12.2018 (2h) Alberi di ricerca bilanciati: Alberi 2-3-4 bilanciati: definizione, scomposizione di 4-nodi (split), algoritmi di ricerca e di inserimento top-down; definizione di alberi Red-Black (slides pp. 1-19).
  • 20) 07.12.2018 (3h) Alberi 2-3-4 bilanciati e alberi Red-Black (continua): scomposizione di 4-nodi in un albero Red-Black; algoritmo di inserimento top-down con rotazioni.
    Esercitazione: la classe BinarySearchTree.
  • 21) 12.12.2018 (2h) Le interfacce Set e SortedSet e le classi HashSet e TreeSet (pdf).
    Esercitazione: esempio di uso delle classi HashSet e TreeSet.
  • 22) 14.12.2018 (3h) Le interfacce Map e SortedMap e le classi HashMap e TreeMap (pdf).
    Esercitazione: esempio di uso delle classi HashSet e HashMap.
  • 23) 18.12.2018 (2h) Esercitazione: svolgimento di esercizi su HashSet/TreeSet e HashMap/TreeMap.
    Grafi: richiami di teoria; la classe Network (introduzione).
  • 24) 19.12.2018 (2h) Richiami di teoria dei grafi (continua): visite in ampiezza ed in profondità.
    La classe Network. Iteratori breadth-first e depth-first.
  • 25) 21.12.2018 (3h) La classe Network (continua): implementazione di algoritmi fondamentali: verifica della connessione forte di un digrafo (isConnected()), costruzione di un minimo albero ricoprente - approccio Prim (getMinimumSpanningTree()), costruzione di un cammino minimo tra due vertici - approccio Dijkstra (getShortestPath()).
    Esercitazione preparatoria per la II prova parziale.
  • -- 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 intermedia sugli argomenti svolti nella prima parte del corso.

Testo 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.

Testo consigliato:
[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
  • 25.02.2019 - Ricevimento studenti Si avvisa che per impegni concomitanti il ricevimento studenti di domani martedì 26.2 è sospeso. Gli studenti interessati possono contattare la docente per email per un ricevimento su appuntamento.
Errata Corrige
  • Nessun avviso di correzione
Risorse
Avvisi archiviati
  • 13.02.2019 Risultati del III appello di ASDL - modulo di Laboratorio di martedì 12.02.2019.
    Si ricorda che se l'orale di Laboratorio è 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.

    Le prove orali di Laboratorio (obbligatorie e facoltative) saranno svolte martedì 19.02.2019, ore 9:00, Secondo piano Blocco Zero, previa prenotazione da effettuare contattando la docente per email. Le prove orali di Teoria si svolgeranno il medesimo giorno, ore 11:00.
  • 04.02.2019 Per impegni della docente il ricevimento studenti di martedì 04.02 è annullato. Pr ogni evenienza contattare la docente per email.
  • 30.01.2019 Risultati del II appello di ASDL - modulo di Laboratorio di martedì 29.01.2019.
    Si ricorda che se l'orale di Laboratorio è 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.

    Le prove orali di Laboratorio (obbligatorie e facoltative) saranno svolte venerdì 01.02.2019, ore 9:30, Secondo piano Blocco Zero, previa prenotazione da effettuare contattando la docente per email. Le prove orali di Teoria si svolgeranno invece martedì 05.02.2019, ore 11:00, Secondo piano Blocco Zero.
  • 18.01.2019 Risultati del I appello di ASDL - modulo di Laboratorio di martedì 15.01.2019.
    Si ricorda che se l'orale di Laboratorio è 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.
  • 11.01.2019 Risultati della II prova parziale di martedì 08.01.2019.
  • 12.12.2018 II prova parziale La seconda prova parziale di ASD con Laboratorio si svolgerà martedì 08.01.2019 in aula A1.6 Edificio Alan Turing, ore 11-13:30, e sarà così articolata: alle ore 11 si svolgerà la prova di Teoria (prof. Proietti) e a seguire, alle ore 11:45 circa, si svolgerà la prova di Laboratorio (prof.ssa Melideo).
  • 12.12.2018 Lezione di recupero Si avvisa che martedì 18.12 (ore 11:30-13:30, aula A1.6) si svolgerà una lezione di recupero di LASD. L'orario delle lezioni di mercoledì 19.12 e venerdì 21.12 resta invariato.
  • 15.11.2018 Variazione orario lezioni Si avvisa che a partire dal 19 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.
  • 15.11.2018 Risultati della I prova parziale e dell'appello straordinario di martedì 06.11.2018.
  • I prova parziale: martedì 06.11.2018 ore 11 aula A1.6 La prima prova parziale di ASD con Laboratorio si svolgerà martedì 06.11 in aula A1.6 (edificio Alan Turing) e sarà così articolata: alle ore 11 si svolgerà la prova di Teoria (prof. Proietti) e a seguire, alle ore 11:45 circa, si svolgerà la prova di Laboratorio (prof.ssa Melideo).
  • Variazione orario settimana Le lezioni di LASD della prossima settimana (29.10 - 02.11) seguiranno il seguente orario: lunedì 29.10 ore 9:00-10:30 aula A1.6 (edificio Alan Turing); martedì 30.10 ore 14:45-16:15 aula 1.7 (edificio Coppito 1). La lezione di venerdì 2.11 è di conseguenza annullata.