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) 21.09.2017 (2h) Presentazione del corso (slides: pdf). Introduzione: Ciclo di sviluppo di codice algoritmico (slides: pdf).
  • 2) 22.09.2017 (3h) Richiami di Java - parte I (slides: pdf). Focus su: struttura di controllo switch, istruzioni break e continue, modificatori fondamentali, inizializzatore statico, inizializzatore d'istanza.
  • 3) 28.09.2017 (2h) Richiami di Java - parte II (slides: pdf). Focus su classi astratte.
    Esercitazione su modificatori fondamentali, inizializzatori d'istanza e statico: le classi e Tempo e Tempo2.
  • 4) 5.10.2017 (2h) Classi astratte. Oltre le classi: Le interfacce (slides: pdf).
    Esercitazione: L'interfaccia Ordinabile - ordinamento di array di punti e di array di interi.
  • 5) 6.10.2017 (3h) La libreria standard ed il Java Collections Framework: generics (slides: pdf).
    Focus su classe Object, metodi equals() e toString() (esercitazione), interfaccia Comparable, classi wrapper.
  • 6) 12.10.2017 (2h) Il Java Collections Framework: Le interfacce Iterable, Iterator e Collection. Gli iteratori e il ciclo for-each (slides: pdf).
  • 7) 13.10.2017 (3h) Il Java Collections Framework (continua): L'interfaccia List; Strutture dati elementari: tecniche per rappresentare collezioni di oggetti; Le classi ArrayList e LinkedList (slides e esercitazione: pdf/java).
    Esercitazione: classi astratte ed interfacce, iteratori. Focus su interaccia Comparable e ordinamento (epressione algebrica ad una variabile rappresentata come lista di termini).
  • 8) 19.10.2017 (2h) 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.
    Le liste concatenate. La classe SinglyLinkedList (introduzione): una classe giocattolo.
  • 9) 20.10.2017 (3h) Le liste concatenate (continua). Implementazione della classe SinglyLinkedList ed esercitazione (slides e esercitazione: pdf/ java).
    Homework - write the following methods for SinglyLinkedList 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 SinglyLinkedList instances are said to be equal if both the instances contain the same elements in exactly the same order.
  • 10) 26.10.2017 (2h) Esercitazione sulle liste concatenate (focus sull'uso dei cast).
    Restrizioni sui Generics (slides: pdf).
    Implementazione della classe SortedSinglyLinkedList (introduzione).
  • 11) 27.10.2017 (3h) Esercitazione: correzione Homework on SinglyLinkedList object - rif. 9).
    Implementazione della classe SortedSinglyLinkedList (continua); esercitazione: test d'uso su liste ordinate di oggetti interi casuali.
    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 (introduzione).
  • 12) 02.11.2017 (2h) Richiami sugli algoritmi di ordinamento bubbleSort, insertionSort, selectionSort, mergeSort, quickSort e relativa implementazione (continua) (java).
  • 13) 03.11.2017 (3h) Esercitazione preparatoria per la prima prova parziale.
  • pause for provisional exams
  • 14) 15.11.2017 (2h) Correzione della I prova parziale ed esercitazione.
    ADT stack e queue. Interfaccia Stack e relative implementazioni in Java mediante array e liste (slides pdf, java).
  • 15) 17.11.2017 (3h) Esercitazione (Stack): verifica della palindromia, quicksort iterativo (java).
    Interfaccia Queue e relative implementazioni in Java mediante array e liste (java).
  • 16) 22.11.2017 (2h) Alberi binari: definizione e proprietà (Slides: pdf).
    La classe BinaryNode; esercitazione (java).
  • 17) 24.11.2017 (3h) Alberi binari (continua): l'interfaccia BinaryTree, la classe LinkedBinaryTree.
    Visite di alberi binari: visite ricorsive in profondità (preorder, inorder, postorder), visita in ampiezza (Rif. java).
  • 18) 29.11.2017 (2h) Alberi binari (continua): visite iterative in profondità (preorder, inorder, postorder). Esercitazione.
    Heap binari. La classe BinaryHeap (basata su array). Costruzione top-down e bottom-up di uno heap. (Rif. java).
  • 19) 1.12.2017 (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 (Rif. java).
    L'interfaccia Queue e la classe PriorityQueue (slides pdf, java).
  • 20) 06.12.2017 (2h) Alberi di ricerca - BST (richiami). BST bilanciati: Alberi 2-3-4 bilanciati: definizione, scomposizione di 4-nodi (split), algoritmi di ricerca e di inserimento top-down; alberi Red-Black (Introduzione) (Rif. slides).
  • 21) 07.12.2017 (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.
    Le interfacce Set e SortedSet e la classe TreeSet (slides lez.19, java). Esercitazione: la classe BinarySearchTree (java).
  • 22) 12.12.2017 (2h) L'interfaccia Map e la classe treeMap (Rif. slides e codice java).
  • 23) 13.12.2017 (2h) La classe treeMap (continua).
    Esercitazione: esempio di uso di treeSet e treeMap.
  • 24) 15.12.2017 (3h) Grafi. Richiami di teoria: definizioni e terminologia. La classe Network (I parte) (Rif. slides e codice java).
  • 25) 21.12.2017 (2h) Richiami di teoria dei grafi (II parte): visite in ampiezza ed in profondità; algoritmi per grafi: verifica della connessione forte di un digrafo; (approfondimento) uso delle strutture dati union-find per la verifica della connessione di un grafo non orientato; costruzione di un minimo albero ricoprente (Prim); costruzione di un albero dei cammini minimi a sorgente singola (Dijkstra). La classe Network (II parte): iteratori breadth-first e depth-first; metodo isConnected().
  • 26) 22.12.2017 (3h) - ultima lezione La classe Network (continua): metodo getShortestPath(); metodo getMinimumSpanningTree() (Rif. codice java).
    Esercitazione preparatoria per la II prova parziale.



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). 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. A partire dalla discussione della prova scritta, il colloquio verte su tutti gli argomenti in programma. Se obbligatorio, per non perdere il voto conseguito nella prova scritta, l'orale di Laboratorio deve essere svolto nel medesimo appello dello scritto. Se facoltativo, purché sostenuto prima di quello di Teoria, l'orale deve essere svolto nell’ambito della stessa sessione d’esame della prova scritta.
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
  • 08.09.2018 Risultati del VI appello di mercoledì 05.09.2018.
    Gli studenti potranno prendere visione del compito e/o svolgere la prova orale di Laboratorio il giorno mercoledì 12 settembre 2018 alle ore 9:30 (studio docente).
    Gli studenti intenzionati a visionare il compito oppure a svolgere la prova orale di Laboratorio (obbligatoria o facoltativa) sono pregati di prenotarsi per email contattando la docente (giovanna.melideo@univaq.it). Si ricorda che l'orale di Laboratorio deve essere sostenuto prima di quello di Teoria, che si svolgerà nella stessa giornata, dalle ore 10.
Errata Corrige
Risorse
Avvisi archiviati
  • 15.06.2018 Risultati del IV appello di martedì 12.06.2018.
    Gli studenti potranno prendere visione del compito e/o svolgere la prova orale di Laboratorio il giorno mecoledì 20 giugno 2018 alle ore 10:00 (studio docente).
    Gli studenti intenzionati a visionare il compito oppure a svolgere la prova orale di Laboratorio (obbligatoria o facoltativa) sono pregati di prenotarsi per email contattando la docente (giovanna.melideo@univaq.it). Si ricorda che l'orale di Laboratorio deve essere sostenuto prima di quello di Teoria, anche nella stessa giornata. Se obbligatorio, per non perdere il voto conseguito nella prova scritta, l'orale di Laboratorio deve essere svolto entro la sessione corrente.
  • 14.02.2018 Risultati del III appello di martedì 13.02.2018.
    Gli studenti potranno prendere visione del compito e/o svolgere la prova orale di Laboratorio il giorno giovedì 15 febbraio 2018 alle ore 10:00 (studio docente).
    Gli studenti intenzionati a visionare il compito oppure a svolgere la prova orale di Laboratorio (obbligatoria o facoltativa) sono pregati di prenotarsi per email contattando la docente (giovanna.melideo@univaq.it). Si ricorda che l'orale di Laboratorio deve essere sostenuto prima di quello di Teoria. Se obbligatorio, per non perdere il voto conseguito nella prova scritta, l'orale di Laboratorio deve essere svolto entro la sessione corrente.
  • 01.02.2018 Risultati del II appello di martedì 30.01.2018.
    Gli studenti potranno prendere visione del compito e/o svolgere la prova orale di Laboratorio il giorno martedì 6 febbraio 2018 alle ore 10:00 (Sala seminari Blocco zero).
  • 18.01.2018 Risultati del I appello (e del recupero del II parziale) di martedì 16/01/2018.
    Gli studenti potranno prendere visione del compito e/o svolgere la prova orale di Laboratorio il giorno martedì 23 gennaio 2018 alle ore 9:00 (studio docente).
  • 11.01.2018 Risultati del II parziale del 10/01/2018.
  • 22.12.2017 Si avvisa che la seconda prova parziale si svolgerà il 10/01/2018 alle ore 10 (aula A1.6 Edificio Alan Turing)
  • 15.12.2017 Si avvisa che per esigenze organizzative le lezioni di laboratorio e di teoria del 20 e 21 dicembre saranno invertite tra di loro.
    For organisational needs, the theory and laboratory lectures scheduled for December 20 and 21 will be swapped.
  • 01.12.2017 Si avvisa che giovedì 7 dicembre (9:00-11:30) al posto della lezione di Laboratorio di Sistemi Operativi (Prof. Autili) si svolgerà una lezione di recupero di laboratorio.
    The Operating Systems Laboratory lecture (Prof. Autili) scheduled for December 7th (9:00-11:30) will be replaced by an additional laboratory lecture. <\em>
  • 24.11.2017 Si avvisa che martedì 12 dicembre (11:30-13:30) al posto della usuale lezione di teoria si svolgerà una lezione di recupero di laboratorio.
    The theory lecture (Prof. Proietti) scheduled for December 12th (11:30-13:30) will be replaced by an additional laboratory lecture. <\em>
  • 24.11.2017 Come comunicato a lezione, lunedì 27 novembre dalle ore 9 alle 10:15 (studio docente) gli studenti interessati potranno prendere visione del compito della I prova parziale.
  • 10.11.2017 Risultati prove scritte del 07/11/2017.
  • 04.11.2017 Variazione orario lezioni Si avvisa che a partire dal 13 novembre l'orario delle lezioni di ASD subirà la seguente variazione: martedì/giovedì (11:30-13:30) Teoria; mercoledì (11:30-13:30)/venerdì (10:30-13:30) Laboratorio.
    New schedule for the Theory and Laboratory classes: Tuesday/Thursday (11:30-13:30) Theory - Prof. Proietti; Wednesday (11:30-13:30)/Friday (10:30-13:30) Laboratory - Dr. Melideo
  • 03.11.2017 Midterm exam - Reminder: The provisional written exam will be held on Tuesday, 7th November, at 11.30 (A1.6). The theory part takes around 40 minutes. The laboratory part takes around 1 hour and consists of a set of two or three exercises covering the first part of the course we have discussed so far. Students are allowed to use class notes (slides and Java code) and textbook resources during the laboratory exam.
    The exam is highly recommended as a way to reinforce and self-evaluate understanding of the course content and main ideas.
  • 21.09.2017 Si avvisa che la lezione del 29 settembre 2017 è annullata per impegni istituzionali della docente e sarà recuperata in data da definirsi.
    We regret to inform you that the lecture scheduled for September 29th is cancelled.