48
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
REGGIO DI CALABRIA
Dati Generali
Periodo di attività
Syllabus
Obiettivi Formativi
Gli obiettivi formativi del corso sono i seguenti:
- Comprendere computabilità e complessità degli algoritmi.
- Analizzare strutture dati fondamentali e loro proprietà.
- Progettare e valutare algoritmi di ricerca, ordinamento e su grafi.
- Applicare tecniche Divide et Impera e Greedy.
- Implementare strutture dati e algoritmi in Java con paradigma OOP.
- Valutare efficienza e correttezza delle soluzioni.
Prerequisiti
Conoscenza dei fondamenti della programmazione e conoscenza basilare del linguaggio Java e dell'ambiente di esecuzione Eclipse.
Metodi didattici
Lezioni frontali ed esercitazioni. Le esercitazioni, che riguardano principalmente l'implementazione delle strutture dati in Java, sono condotte attraverso metodi didattici interattivi che favoriscono il lavoro di gruppo, l'acquisizione di competenze pratiche e il ruolo proattivo dello studente.
Verifica Apprendimento
Prova scritta della durata due ore che verte sulla soluzione in Java di problemi che necessitano l'uso corretto di strutture dati e prova orale che mira ad accertare le conoscenze acquisite su tutto il programma del corso.
Il punteggio, che tiene conto sia della prova scritta sia della prova orale, verrà attribuito secondo il seguente schema:
30 - 30 e lode Eccellente Lo studente: - dimostra una conoscenza completa e dettagliata della materia: conosce i contenuti rilevanti, utilizza una terminologia corretta, individua e spiega i principali concetti, integra approfondimenti personali nella propria sintesi; - evidenzia una comprensione eccellente della materia: distingue chiaramente tra le idee principali e quelle di sopporto, sa inquadrare i punti chiave, rinforza gli argomenti con riferimenti al materiale integrativo o ad approfondimenti individuali, sviluppa collegamenti interdisciplinari; - manifesta capacità ben consolidate di applicare le conoscenze e di analizzare i risultati; - espone la materia in modo chiaro e strutturato: il suo discorso è organizzato, logico, maturo e conciso.
28 - 29 Ottimo Lo studente: - dimostra una conoscenza approfondita della materia: conosce i contenuti rilevanti, utilizza una terminologia corretta, individua e spiega la maggior parte dei principali concetti; - evidenzia una solida comprensione della materia: inquadra la maggior parte dei punti chiave benché non sempre distingua bene gli argomenti principali da quelli meno importanti, discute gli argomenti con riferimenti al materiale integrativo o ad approfondimenti individuali; - manifesta ottime capacità di applicare le conoscenze e di analizzare i risultati; - espone la materia in modo chiaro e articolato: il suo discorso è organizzato, logico, maturo ed essenziale, pur ammettendo qualche imprecisione.
25 - 27 Buono Lo studente: - dimostra un’ampia conoscenza della materia: conosce, anche se non spiega completamente, i contenuti rilevanti; utilizza la terminologia, ma non sempre in modo preciso; individua i concetti chiave, ma non riesce a spiegarli completamente o con precisione. - evidenzia una comprensione adeguata della materia: distingue i punti chiave importanti, ma non riesce a inquadrarli completamente; - manifesta buone capacità di applicare le conoscenze; - espone in modo chiaro, ma non sempre completo, con un’organizzazione schematica e pensieri talvolta frammentati e ripetitivi.
22 - 24 Discreto Lo studente: - dimostra un’accettabile conoscenza della materia: conosce la maggioranza dei contenuti ma manifesta lacune, mostra una certa confusione in alcuni concetti importanti anche se non essenziali; - evidenzia una comprensione essenziale della materia: non riesce sempre a inquadrare tutti i suoi argomenti o talvolta lo fa con imprecisione; - manifesta discrete capacità di applicare i concetti fondamentali della materia; - espone in modo corretto, ma senza una struttura del tutto chiara e coerente, inserendo in alcuni punti dello sviluppo materiale poco rilevante.
18 - 21 Sufficiente Lo studente: - dimostra una limitata conoscenza della materia: conosce i contenuti più rilevanti ma manifesta numerose lacune, individua una buona parte dei concetti chiave ma non riesce a illustrarli con completezza e precisione; - dimostra una comprensione basica della materia: ha qualche difficoltà a distinguere i punti chiave e non sempre riesce a inquadrarli compitamente per incompletezza o imprecisione; - manifesta incertezze nell’applicare i concetti fondamentali della materia; espone in modo poco chiaro e confuso, usa la lingua in modo poco organizzato, con pensieri frammentati e ripetitivi, non sempre utilizza la terminologia con precisione.
Insufficiente Lo studente: - dimostra una conoscenza scarsa e frammentaria della materia: non conosce i contenuti essenziali, manifestando estese lacune, e non individua i concetti chiave; - manifesta gravi errori di comprensione, non risponde a numerose domande o non risolve numerosi problemi; manifesta errori nell’applicare i concetti fondamentali della materia; - non raggiunge un livello accettabile di articolazione del pensiero relativo alla materia.
Testi
- Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano, Algoritmi e strutture dati, McGraw-Hill.
- Camil Demetrescu, Umberto Ferraro Petrillo, Irene Finocchi, Giuseppe F. Italiano, Progetto di algoritmi e strutture dati in Java, McGraw-Hill.
- Cormen-Leiserson-Rivest: Introduzione agli algoritmi e strutture dati 2a ediz., McGrawHill.
- Ausiello, et al., Teoria e Progetto di Algoritmi Fondamentali, Franco Angeli.
- A. Bertossi, Strutture, Algoritmi, Complessita', ECIG, Universita' di Pisa.
- Cay Horstmann, Concetti di informatica e fondamenti di Java, Apogeo.
Contenuti
Introduzione (1 CFU)
Problemi e algoritmi
Cenni sulla nozione di Calcolabilita’ e sulla tesi di Church-Turing.
Complessità computazionale di problemi ed algoritmi (notazione O, Omega, Theta).
Richiami di nozioni di relazione di equivalenza e d'ordine.
Insiemi parzialmente ordinati e reticoli.
Struttura della memoria durante l'esecuzione dei programmi e tipi di passaggio degli argomenti.
Tipi di Dato e Strutture Dati (1.5 CFU)
Vettori, Matrici, Matrici Simmetriche, Liste, Liste Ordinate, Pile, Code, Heap, Alberi Binari di Ricerca, Alberi Generali, Code di Priorita', Insiemi, Dizionari, Tabelle Hash, Grafi Orientati e Non Orientati, Grafi Pesati.
Algoritmi Fondamentali, Tecniche di Programmazione e Algoritmi su Grafi (1.5 CFU)
Algoritmi di Base su Grafi (Raggiungibilita' di nodi in un grafo, Componenti Connesse,
Albero Ricoprente)
Tecniche di Ricerca e di Ordinamento
Heap Sort
Divide et Impera (approf: Ricerca Binaria, Merge Sort, Tecniche Quadratiche di
Ordinamento, Calcolo del Fattoriale, Calcolo della Successione di Fibonacci) Equazione di Ricorrenza per la definizione della complessita’ delle tecniche Divide et Impera.
Tecniche Golose (Knapsack, Algoritmo di Dijkstra, Algoritmo di Prim, Implementazione con vettori e con heap indicizzato).
Esempi di Applicazione alle Reti di Computer degli Algoritmi su Grafi (routing, connettivita’, etc.).
Programmazione OO in Java (2 CFU)
Caratteristiche OO di Java (Incapsulamento, Ereditarietà, Polimorfismo, Generics, Interfacce) Implementazione delle strutture dati e degli algoritmi studiati in Java e studio di librerie standard di Java
RISULTATI ATTESI
I risultati attesi del corso, in accordo ai descrittori di Dublino, sono
i seguenti:
Conoscenze e capacità di comprensione:
Gli studenti acquisiranno una conoscenza approfondita dei concetti fondamentali della computabilità, della complessità computazionale e delle strutture dati, con una comprensione critica delle tecniche di progettazione algoritmica e delle applicazioni pratiche nei linguaggi di programmazione object-oriented.
Capacità di applicare conoscenze e comprensione:
Gli studenti saranno in grado di applicare le conoscenze acquisite per progettare, implementare e ottimizzare algoritmi in Java, utilizzando correttamente strutture dati e tecniche di programmazione. Saranno in grado di risolvere problemi complessi in modo autonomo e rigoroso, integrando concetti teorici con la pratica.
Autonomia di giudizio:
Gli studenti svilupperanno la capacità di analizzare criticamente problemi computazionali, scegliendo e giustificando le soluzioni più adeguate in termini di complessità e risorse. Saranno in grado di valutare vantaggi e svantaggi di diverse tecniche e approcci, considerando scenari reali o ipotetici.
Capacità di comunicazione:
Gli studenti saranno in grado di comunicare chiaramente concetti complessi, soluzioni algoritmiche e strutture dati a interlocutori specialisti e non specialisti, utilizzando un linguaggio tecnico preciso e strumenti appropriati come diagrammi, pseudocodice e codice Java documentato.
Capacità di apprendimento:
Gli studenti acquisiranno competenze di apprendimento autonomo per approfondire ulteriormente le tematiche del corso e affrontare nuove tecnologie e paradigmi di programmazione. Saranno in grado di accedere a fonti scientifiche, analizzarle criticamente e integrarle nel loro processo di apprendimento continuo.
Altre informazioni
Codice Teams: 9jvzmzo
Canale utilizzato per distribuire agli studenti esercitazioni e altro materiale didattico.