Vinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.x

Web and real time communication systems

WEB AND REAL TIME COMMUNICATION SYSTEMS"

SSD ING-INF/05


DEGREE PROGRAMME: ADVANCED DEGREE (LAUREA MAGISTRALE) IN COMPUTER ENGINEERING (INGEGNERIA INFORMATICA)

ACADEMIC YEAR 2022-2023

 

GENERAL INFORMATION – TEACHER REFERENCES

TEACHER: PROF. SIMON PIETRO ROMANO
PHONE: +39 081 7683823
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.


GENERAL INFORMATION ABOUT THE COURSE

INTEGRATED COURSE (IF APPLICABLE):
MODULE (IF APPLICABLE):
CHANNEL (IF APPLICABLE):
YEAR OF THE DEGREE PROGRAMME (I, II, III): II – ADVANCED DEGREE
SEMESTER (I, II): II
CFU: 6

 


REQUIRED PRELIMINARY COURSES (IF MENTIONED IN THE COURSE STRUCTURE “ORDINAMENTO”)


PREREQUISITES (IF APPLICABLE)


LEARNING GOALS

The aim of the class is to provide students with advanced notions in the field of both web-based and real-time communication. Students will become familiar with the design and development of complex communication systems, by focusing both on the client-side and on the server-side. They will become acquainted with the networking protocols that form the basis of web-based and real-time communication, as well as learn how to use the standard Application Programming Interfaces (APIs) laying on top of them. This is both a programming class and a networking class. All of the networking protocols and solutions will be first studied in detail and then put into practice through the design and implementation of proof-of-concept prototypes representing real-world application scenarios.

EXPECTED LEARNING OUTCOMES (DUBLIN DESCRIPTORS)

At the end of the class, students will be able to demonstrate advanced knowledge in the field of web-based and real-time communication. They will have a clear understanding of the protocols and APIs representing the state of the art in both fields. Step by step, the class will bring them towards an integrated approach, whereby web-based and real-time communication eventually co-exist in a single, unified scenario adhering to the latest standards issued by both the Internet Engineering Task Force (IETF) and the World Wide Web Consortium (W3C).
They will be ready to enter the professional arena and become part of cutting-edge development teams, by actively contributing to the design and the implementation of advanced communication systems. Successful completion of the class will allow them to effectively apply the acquired knowledge to a number of real-world scenarios requiring advanced engineering capabilities, by putting together their networking competences and their advanced programming skills.

Knowledge and understanding

Students need to show ability to know and understand problems related to both the communication and the programming issues associated with the design and development of complex interoperating distributed systems.
They need to elaborate arguments related to the relationship between communication protocols, synchronous and asynchronous interaction, client-side, server-side and peer-to-peer programming, by embracing an engineering approach and looking at them in an integrated fashion. The class provides students with advanced knowledge in the field of web-based real-time communication, by also illustrating how to leverage both methodological and practical tools in order to design and implement effective, interoperable, scalable and secure real-time multimedia communication systems that are compliant with state-of-the-art standard protocols and APIs. Such tools will allow students to grasp the causal connections among network-based communication and event-based programming, as well as understand the implications of the adoption of an agile design and development paradigm for the realization of advanced communication systems.

Applying knowledge and understanding

Students need to show ability to design complex systems involving distributed components that exchange multiple media in a real-time fashion. They will have to demonstrate a clear understanding of the main networking protocols offering support to such systems for all what concerns their communication requirements. They will have to demonstrate advanced programming skills, with special reference to the use of the standard APIs that are offered to programmers both on the client-side and on the server-side. The course delivers skills and tools needed to apply knowledge in practice, favoring the ability to use a methodological approach that properly integrates different technologies (as well as different programming languages) in a unified framework allowing to effectively look after the many facets of a complex communication system.

COURSE CONTENT/SYLLABUS


The class will proceed step-wise towards the final goal of designing and implementing integrated systems putting together the most up-to-date solutions in the fields of web-based and real-time communication. Web-based communication protocols and technologies will be first introduced, by focusing both on the communication and on the programming aspects. Server-side web application development will be analyzed in detail, with the help of real-world examples associated with state-of-the-art frameworks and programming languages. Client-side web programming through the JavaScript language will be discussed, with a focus on both the synchronous and the asynchronous paradigm. The XML (eXtensible Markup Language) language and APIs will be introduced and analyzed in depth. The focus will then move to real-time communication, by looking at both the data layer and the signaling layer. State-of-the-art streaming technologies will be discussed in detail and comparatively analyzed. Network reachability and NAT (Network Address Translation) traversal issues will be presented, together with the standard protocols that have been designed in order to effectively deal with them. A detailed overview of the most up-to-date Instant Messaging applications and related standard protocols will be presented. Finally, the class will show how to put things all together in an integrated framework that leverages both the IETF RtcWeb and the W3C WebRTC standard protocols and APIs in order to realize next-generation web-enabled real-time communication scenarios.

Syllabus:
- Web-based communication basics: HTTP protocol deep-dive
- Server-side programming basics: Common Gateway Interface (CGI)
- Server-side programming in Java through Java servlets
- Server-side programming in Python through the Flask framework
- Server-side programming in Java through the Spring Boot framework
- Client-side programming with JavaScript
- Asynchronous JavaScript and XML (AJAX) and the Fetch API
- The XML language
- XML programming
- Server-side programming in JavaScript with Node.JS
- Web-based interaction through WebSockets
- The Real-time Transport Protocol (RTP)
- Voice over IP (VoIP) applications and the Session Initiation Protocol (SIP)
- Streaming protocols and technologies:
o Real Time Streaming Protocol (RTSP)
o MPEG-DASH (Dynamic Adaptive Streaming over HTTP)
o Real Time Messaging Protocol (RTMP)
o Peer-to-peer approaches
- NAT-traversal protocols:
o Session Traversal Utilities for NAT (STUN)
o Traversal Using Relays Around NAT (TURN)
o Interactive Connectivity Establishment (ICE)
- Instant Messaging protocols and technologies:
o Internet Relay Chat (IRC)
o Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions (SIP/SIMPLE)
o eXtensible Messaging and Presence Protocol (XMPP)
o WebRTC-enabled IM through data channels
o Web-socket enabled IM
o Message Queuing Telemetry Transport (MQTT) enabled IM
o Advanced Message Queuing Protocol (AMQP) enabled IM
o Simple Text Orientated Messaging Protocol (STOMP) enabled IM
o The RabbitMQ library
o Secure, decentralized real-time communication through Matrix
- User interface design and implementation through React.js
- Using native components instead of web components with React Native
- WebRTC: the new frontier of real-time communications in the web
- The Janus WebRTC media server and gateway

READINGS/BIBLIOGRAPHY

6. Official references like, e.g., Requests For Comments (RFC), available at: https://www.ietf.org
7. “Real-Time Communication with WebRTC”, Salvatore Loreto, Simon Pietro Romano, Released May 2014, Publisher: O'Reilly Media, Inc. ISBN: 9781449371876
8. Slides and additional materials provided by the teacher and made available on the official sites associated with the class


TEACHING METHODS

Teacher will use a hands-on approach for the entire duration of the class. All of the course topics will be both presented in theory and further analyzed through practical examples.
All of the students will have to work on a practical project, either individually or in groups, focused on an in-depth study of one or more of the topics addressed during the class.

EXAMINATION/EVALUATION CRITERIA

a) Exam type:


Exam type

written and oral
only written
only oral X
project discussion X
other


In case of a written exam, questions refer to: (*) Multiple choice answers
Open answers
Numerical exercises
(*) multiple options are possible

 

b) Evaluation pattern:
[this field needs to be filled in only when there are different weights among written and oral exams, or among modules if this refers to an integrated course]
- 35% of the final mark will depend on an evaluation of the practical project developed by the student (either individually or in group). The project itself will have to be delivered (with a fully-fledged documentation, including source code, if applicable) to the teacher at least seven days in advance of the oral examination date;
- 65% of the final mark will depend on the results of the oral interview.

Text mining

SCHEDA DELL'INSEGNAMENTO (SI)

TEXT MINING

SSD: ING-INF/05

 

DENOMINAZIONE DEL CORSO DI STUDIO: LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO 2022-23

 

INFORMAZIONI GENERALI - DOCENTE

DOCENTE: FLORA AMATO
TELEFONO: 081-7683851
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.


INFORMAZIONI GENERALI - ATTIVITÀ

INSEGNAMENTO INTEGRATO (EVENTUALE):
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): I/II
SEMESTRE (I, II): I
CFU: 6

 


INSEGNAMENTI PROPEDEUTICI (se previsti dall'Ordinamento del CdS)


EVENTUALI PREREQUISITI


OBIETTIVI FORMATIVI
Il corso ha l’obiettivo di fornire i principi metodologici e tecnologici relativi all’elaborazione di testi in linguaggio naturale. Questo prevede l’apprendimento dei principali algoritmi per l’analisi e l’interpretazione del linguaggio naturale, dei modelli utilizzati per la descrizione di argomenti e concetti, tecniche di estrazione delle informazioni e apprendimento automatico sui testi.
Gli studenti acquisiranno i principali modelli e le tecniche avanzate per l’annotazione automatica di risorse testuali, la formalizzazione della conoscenza contenuta nei testi, la strutturazione e l’estrazione di informazioni.
Relativamente all’apprendimento automatico, saranno approfondite ed utilizzate tecniche avanzate di Machine Learning e Deep Learning, applicate in diversi domini di interesse quali E-health, Giustizia, Amministrazione e Industria 4.0.

RISULTATI DI APPRENDIMENTO ATTESI (DESCRITTORI DI DUBLINO)

Conoscenza e capacità di comprensione
Il percorso formativo intende fornire agli studenti le conoscenze, i metodi e le tecniche necessarie per analizzare le problematiche sul trattamento automatico del testo, l’estrazione delle informazioni da esso, l’individuazione degli argomenti del discorso (topic).
Questi strumenti consentiranno agli studenti di capire le problematiche, padroneggiare la teoria, delineare una metodologia di strutturazione e analisi dei testi, di trattamento semantico e di rappresentazione della conoscenza alla base della costruzione di sistemi, e in particolare di interfacce intelligenti.

 

Capacità di applicare conoscenza e comprensione
Il percorso formativo è orientato a trasmettere le capacità e gli strumenti metodologici e operativi necessari ad applicare le conoscenze di trattamento automatico del linguaggio naturale, nonché a favorire la capacità di utilizzare gli strumenti metodologici acquisiti per la progettazione e la realizzazione di sistemi e interfacce intelligenti. Le tecniche e i modelli proposti saranno applicati a domini specialistici quali E-health, Giustizia, Amministrazione e Industria 4.0.


PROGRAMMA-SYLLABUS


Introduzione alle tecniche di Elaborazione del Linguaggio Naturale (NLP). Intelligenza artificiale e NLP.

Modelli di Rappresentazione delle Informazioni. Ontologie, vocabolari e dizionari personalizzati.

Trasformazione di testo non strutturato in strutture dati idonee all'elaborazione automatica.
Estrazione di caratteristiche testuali. Riconoscimento di modelli per scoprire e identificare categorie di informazioni.

Apprendimento automatico ed elaborazione del linguaggio naturale.
Algoritmi di apprendimento automatico di tipo Machine Learning per il testo.
Pattern recognition per scoprire e identificare categorie di informazioni, confronto con approcci basati su dizionari.

Identificazione, etichettatura e ricerca in sezioni specifiche del documento. Elaborazione linguistica per riconoscere unità significative all'interno del testo come frasi, gruppi di nomi, verbi e relazioni sussistenti.

Strumenti semantici per identificare concetti all'interno del testo, normalizzazione dei concetti su ontologie standard. Individuazione di termini di dominio. Ontologie di dominio (come MedDRA e MeSH), dizionari personalizzati. identificazione, etichettatura e ricerca in sezioni specifiche del documento.

Algoritmi di apprendimento automatico di tipo Deep Learning per il testo

Reti neurali dense e ricorrenti, LSTMs, GRUs, in TensorFlow per eseguire l'analisi del testo, il riconoscimento delle entità e l'identificazione delle relazioni.
Uso di encoder-decoder, causale, e auto-attenzione per eseguire l'elaborazione automatica avanzata di frasi complete, implementazione di interfacce intelligenti e chatbot.

T5, BERT, transformer, reformer: uso dei modelli T5 e BERT per implementare un sistema automatico di risposta alle domande; implementazione di un chatbot usando un modello Reformer.


MATERIALE DIDATTICO
Libri di testo consigliati:
• Materiale prodotto e fornito dalla Docente
• D. Jurafsky, J.H. Martin, Speech and Language Processing. 3nd edition, Prentice-Hall, pp. 653, 2018 (con aggiornamenti di dicembre 2021 reperibili su https://web.stanford.edu/~jurafsky/slp3/ed3book_dec292021.pdf).
• S. Bird, E. Klein, E. Loper. Natural Language Processing with Python. O'Reilly, pp.903.

Altro materiale didattico:
• Aggarwal, Charu C. Machine learning for text. Springer, 2018.
• Dipanjan Sarkar. Text Analytics with Python: A Practitioner's Guide to Natural Language Processing. Apress, 2019
• Clinical text mining: Secondary use of electronic patient records. Springer

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO
L’insegnamento si svolgerà con lezioni frontali (55% delle ore totali) ed esercitazioni di laboratorio (45% delle ore totali). Nelle esercitazioni di laboratorio sarà utilizzato il linguaggio Python, le librerie di trattamento testi NLTK e spaCy, i framework di deep learning TensorFlow e Keras. In modalità blended, tutte le lezioni saranno registrate e rese disponibili.


VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:


L'esame si articola in prova

scritta e orale
solo scritta
solo orale X
discussione di elaborato progettuale X
altro


L’elaborato Progettuale sarà proposto al centro del corso e sarà sviluppato anche durante le lezioni di laboratorio con il supporto del docente.

b) Modalità di valutazione:
La prova di esame avrà lo scopo di accertare il raggiungimento degli obiettivi formativi previsti per l’insegnamento, è articolata in una prova di laboratorio ed una prova orale incentrata sulla discussione del progetto.

 

COMPUTER SYSTEMS DESIGN

SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05

 

LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO: 2022-2023

 

INFORMAZIONI GENERALI - DOCENTE

DOCENTE: NICOLA MAZZOCCA
TELEFONO:
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

 

INFORMAZIONI GENERALI - ATTIVITÀ

INSEGNAMENTO INTEGRATO (EVENTUALE):
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): I
SEMESTRE (I, II): II
CFU: 9

 

INSEGNAMENTI PROPEDEUTICI

(se previsti dall'Ordinamento del CdS)

...................................................................................................................................................

 

EVENTUALI PREREQUISITI

Conoscenza dell’architettura di un calcolatore, dei sistemi operativi e delle reti di comunicazione.

 

OBIETTIVI FORMATIVI

Il corso si pone l’obiettivo di fornire gli elementi metodologici, progettuali e tecnologici per la realizzazione di sistemi di elaborazione con riferimento alle architetture pipelined, multi-computer, multi-processore, multi-core e multi-threading. Il corso affronta inoltre il funzionamento e dimensionamento dei sistemi di memoria gerarchici, il progetto e la programmazione delle unità di I/O (parallele, seriali, DMA e PIC) con i relativi protocolli di comunicazione, e le problematiche di implementazione dei meccanismi di base per la virtualizzazione delle risorse hardware (meccanismi di gestione dei processi, macchine virtuali e hypervisor). Il corso presenta, infine, le principali tecniche per la realizzazione di sistemi pervasivi, autonomici, IoT e di edge computing, nonché le architetture cloud.
La parte applicativa del corso è dedicata al progetto di driver di I/O e allo sviluppo di sistemi operanti in ambito industriale. Le attività vengono svolte con riferimento ad applicazioni sviluppate e valutate sperimentalmente mediante architetture che prevedono l’impiego di nodi di elaborazione dotati di processori RISC e di diversi dispositivi di I/O opportunamente configurabili.
Con riferimento agli aspetti tecnologici, sono illustrate le architetture di sistemi commerciali per l’implementazione di applicazioni industriali basate su System on Chip o su nodi di elaborazione ottenuti per integrazione di componenti configurabili.

 

RISULTATI DI APPRENDIMENTO ATTESI

(Descrittori di Dublino)

Conoscenza e capacità di comprensione
Lo studente deve dimostrare di conoscere e comprendere le problematiche relative al progetto di sistemi di elaborazione, con particolare riferimento alla gestione degli hazard derivanti dall’impiego di tecniche di parallelismo interno ed esterno per l’aumento delle prestazioni, al dimensionamento delle memorie, e all’orchestrazione di diversi sottosistemi operanti in concorrenza fra loro e comunicanti mediante diverse interfacce di I/O.
Deve inoltre dimostrare di saper individuare, fra i diversi approcci presentati al corso, quelli che meglio si adattano a specifiche applicazioni o condizioni operative.
Capacità di applicare conoscenza e comprensione
Lo studente deve dimostrare di essere in grado di progettare e sviluppare il software di base (driver assembly) necessario per consentire la comunicazione fra diversi sottosistemi mediante i dispositivi di I/O presentati al corso, anche in presenza di accessi concorrenti a dati comuni, nonché di scheduler per la gestione della concorrenza. Deve inoltre essere in grado di completare il ciclo di sviluppo di applicazioni di media complessità, che richiedano l’utilizzo di uno o più nodi di elaborazione, di diversi dispositivi di I/O, di sensori/attuatori, sui dispositivi hardware in dotazione.

 

PROGRAMMA-SYLLABUS

Richiami ed approfondimenti sui sistemi di elaborazione: Sistemi general purpose ed embedded. Processori RISC e CISC. Unità di controllo cablata e microprogrammata. Meccanismi di gestione delle interruzioni. Introduzione al parallelismo e al pipelining. Richiami sul processore Motorola 68000. Il processore MIPS: modello di programmazione e pipeline. Il processore ARM. Architetture e applicazioni dei DSP.
Pipelining e hazard: Tecniche di gestione dei conflitti sui dati, dei salti e delle interruzioni in una architettura pipelined. Architetture superscalari.
Sistemi multiprocessore e multicomputer: Architetture parallele, speed up ed efficienza. Algoritmi per la coerenza della memoria.
Periferiche di I/O e driver: Architettura e funzionamento di periferiche parallele, seriali, DMA e PIC, e sviluppo di driver per la loro programmazione.
La gerarchia della memoria: Architettura, indirizzamento e dimensionamento di una cache. Memoria virtuale. Memorie statiche e dinamiche.
Bus e reti di interconnessione: I bus di sistema. Protocolli di comunicazione. Reti di interconnessione: switch multistadio.
Progetto e sviluppo di sistemi basati su microcontrollori: Principi di progetto di sistemi di elaborazione per applicazioni industriali basati su microcontrollori. Architetture e impiego dei System on a Chip (SoC). Dispostivi commerciali e industriali programmabili. Ambienti di progettazione, di simulazione e analisi di sistemi di elaborazione.
Virtualizzazione e cloud computing. Tecniche di virtualizzazione e hypervisor. Introduzione ai sistemi cloud: modelli di servizio e applicazioni.
IoT/Edge computing. Architetture e applicazioni di sistemi IoT e di edge computing. Sviluppo di sistemi edge di tipo commerciale e integrazione di reti di sensori.

 

MATERIALE DIDATTICO

Libro di testo: Conte, Mazzeo, Mazzocca, Prinetto. Architettura dei calcolatori. Edizioni CittàStudi. 2014. ISBN: 9788825173642.
Dispense e presentazioni fornite dai docenti relative ad argomenti teorici e applicativi trattati al corso.
Manuali e datasheet dei dispositivi utilizzati per l’implementazione delle applicazioni.

 

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

Il corso prevede circa il 70% di lezioni frontali in cui vengono affrontati gli argomenti teorici, mentre il restante 30% è riservato a lezioni pratiche ed esercitazioni riguardanti lo sviluppo di driver di I/O e l’utilizzo degli ambienti di sviluppo.
La parte applicativa del corso si avvale di strumenti di sviluppo professionali di cui è disponibile una licenza ad uso gratuito e di board di sviluppo (dotate di un microcontrollore ARM e di diversi dispositivi di I/O) che vengono distribuiti agli studenti per l’implementazione dei propri progetti.

 

VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:

L'esame si articola in prova:
 Scritta e orale
 Solo scritta   
 Solo orale  
 Discussione di elaborato progettuale 
 Altro  

 

In caso di prova scritta i quesiti sono (*):
 A risposta multipla  
 A risposta libera   
 Esercizi numerici  

  

La verifica dell’apprendimento prevede una prova scritta consistente in esercizi di progetto di sistemi basati su dispositivi di I/O e una prova orale orientata alla verifica della comprensione dei concetti teorici del corso e alla discussione degli esercizi implementati su board di sviluppo.

b) Modalità di valutazione:

 

ARCHITETTURA DEI SISTEMI DIGITALI

SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05

 

LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO: 2022-2023

 

INFORMAZIONI GENERALI - DOCENTE

DOCENTE: NICOLA MAZZOCCA
TELEFONO:
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

 

INFORMAZIONI GENERALI - ATTIVITÀ

INSEGNAMENTO INTEGRATO (EVENTUALE):
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): I
SEMESTRE (I, II): I
CFU: 9

 

INSEGNAMENTI PROPEDEUTICI

(se previsti dall'Ordinamento del CdS)

...................................................................................................................................................

 

EVENTUALI PREREQUISITI

Conoscenza dei principi di progettazione delle reti logiche combinatorie e sequenziali e dell’architettura generale di un calcolatore; conoscenze di programmazione.

 

OBIETTIVI FORMATIVI

Il corso si pone l’obiettivo di fornire un’impostazione metodologica e tecnologica per il progetto di architetture dei sistemi digitali dedicati e/o programmabili. Il corso prevede di analizzare le tecniche di progetto con riferimento allo sviluppo di: microcontrollori, processori dedicati, unità di I/O, sistemi di interconnessione, unità aritmetiche, unità dedicate ad applicazioni di IoT e multimediali. Le attività sono svolte con riferimento al linguaggio VHDL, mediante l’impiego di simulatori industriali e di sistemi FPGA (con i relativi ambienti di sviluppo), utilizzati per l’implementazione dei casi di studio proposti durante il corso. Sono inoltre presentati i principali elementi per la realizzazione della documentazione e per il testing di sistemi digitali in applicazioni industriali.

 

RISULTATI DI APPRENDIMENTO ATTESI

(Descrittori di Dublino)

Conoscenza e capacità di comprensione
Lo studente deve dimostrare di conoscere e comprendere le problematiche relative al progetto di sistemi digitali dedicati e programmabili, con riferimento alle metodologie generali di progetto e ai vincoli specifici derivanti dagli strumenti di sviluppo, dai linguaggi di programmazione e dalle piattaforme hardware coinvolti. Deve inoltre dimostrare di comprendere le caratteristiche fondamentali di diversi modelli di sistemi digitali e di saper individuare il modello o i modelli più appropriati per risolvere uno specifico problema di progettazione.

Capacità di applicare conoscenza e comprensione
Lo studente deve dimostrare di essere in grado di eseguire l’intero ciclo di progettazione e implementazione di sistemi digitali di base (ad es. macchine combinatorie o sequenziali notevoli) ed avanzati (macchine aritmetiche, reti di interconnessione, interfacce di I/O, processori), dalla fase di definizione dell’architettura e del comportamento funzionale alla descrizione mediante linguaggio VHDL, fino all’implementazione su dispositivi hardware programmabili (FPGA), utilizzando strumenti e ambienti di sviluppo di ampio utilizzo industriale.

 

PROGRAMMA-SYLLABUS

Principi di progetto di sistemi digitali: Sistemi general purpose, special purpose e embedded. Progettazione dei sistemi digitali: aspetti tecnologici, metodologici e ambienti a supporto. Il ciclo di sviluppo di un sistema digitale. I linguaggi HDL per la descrizione dell’hardware e gli ambienti di simulazione.
Richiami e approfondimenti sul progetto di macchine combinatorie: Realizzazione di funzioni booleane mediante circuiti digitali. Parametri e vincoli di progetto: ritardi, deformazioni dei segnali, dissipazioni di potenza. Minimizzazione di funzioni booleane. Progetto di macchine combinatorie notevoli (multiplexers/demultiplexer, decoder/encoder, reti di transcodifica).
Richiami e approfondimenti sul progetto di macchie sequenziali: Modelli di macchine sequenziali. Macchine impulsive, a livelli, sincrone, asincrone. Progetto di macchine sequenziali notevoli (registri, contatori).
Progetto di sistemi complessi: Modelli architetturali per lo sviluppo di sistemi complessi: sistemi di reti sequenziali, architettura a pipeline, problematiche di tempificazione, modello PO/PC, sistemi a controllo cablato e microprogrammato. Principi di progetto di un processore. Il processore MIC-1.
Protocolli e interfacce di comunicazione fra sistemi: Protocolli di comunicazione sincroni e asincroni; progetto di reti di interconnessione molti a molti; progetto e utilizzo di una interfaccia di comunicazione seriale secondo lo standard RS232.
Progetto di macchine aritmetiche combinatorie e sequenziali: Architetture parallele per addizionatori, sottrattori e moltiplicatori binari. Algoritmi ed architetture sequenziali per la moltiplicazione e la divisione.
Dispositivi per la sintesi di reti logiche: PAL, PLA, FPGA, ASIC. Approfondimento sull’architettura degli FPGA XIlinx delle famiglie Artix-7 e Spartan 3E.
Testing di sistemi digitali: Problematiche e tecniche di testing di dispositivi hardware.
Linguaggio VHDL e ambiente di sviluppo: Stili di descrizione dei sistemi digitali e principali costrutti del linguaggio a supporto. Linee guida per l’implementazione di macchine combinatorie e sequenziali notevoli. Processo di simulazione, sintesi, implementazione di un design digitale e strumenti a supporto. Timing analysis e strumenti a supporto.

 

MATERIALE DIDATTICO

Libro di testo: Conte, Mazzeo, Mazzocca, Prinetto. Architettura dei calcolatori. Edizioni CittàStudi. 2014. ISBN: 9788825173642.
Dispense e presentazioni fornite dal docente relative ad argomenti teorici e applicativi.
Manuali e datasheet dei dispositivi utilizzati per la sintesi dei progetti.
Codice VHDL relativo alle esercitazioni svolte in aula.

 

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

Il corso prevede circa il 70% di lezioni frontali in cui vengono affrontati gli argomenti teorici, mentre il restante 30% è riservato a lezioni pratiche ed esercitazioni riguardanti lo sviluppo di codice VHDL per l’implementazione di specifiche macchine e l’utilizzo degli ambienti di sviluppo.
La parte applicativa del corso si avvale di strumenti di sviluppo professionali di cui è disponibile una licenza ad uso gratuito e di board di sviluppo (dotate di FPGA e di diversi dispositivi di I/O) che vengono distribuiti agli studenti per l’implementazione dei propri progetti.

 

VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:

L'esame si articola in prova:
 Scritta e orale
 Solo scritta   
 Solo orale  
 Discussione di elaborato progettuale 
 Altro  

 

In caso di prova scritta i quesiti sono (*):
 A risposta multipla  
 A risposta libera   
 Esercizi numerici  

  

La verifica dell’apprendimento prevede una prova scritta consistente in esercizi di progetto di sistemi digitali e una prova orale orientata alla verifica della comprensione dei concetti teorici del corso e alla discussione di un elaborato.

 

ALGORITMI E STRUTTURE DATI

SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05

 

LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO: 2022-2023

 

INFORMAZIONI GENERALI - DOCENTE

DOCENTE: ROBERTO PIETRANTUONO
TELEFONO: 0817683880
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

 

INFORMAZIONI GENERALI - ATTIVITÀ

INSEGNAMENTO INTEGRATO (EVENTUALE):
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): I
SEMESTRE (I, II): I
CFU: 9

 

INSEGNAMENTI PROPEDEUTICI

(se previsti dall'Ordinamento del CdS)

...................................................................................................................................................

 

EVENTUALI PREREQUISITI

...................................................................................................................................................

 

OBIETTIVI FORMATIVI

L’insegnamento si propone di fornire le nozioni necessarie per la progettazione e l'analisi di algoritmi e strutture dati nello sviluppo delle applicazioni informatiche. Tali nozioni includono i fondamenti teorici e le tecniche avanzate di progettazione ed analisi di algoritmi la cui applicazione spazia su tutti gli aspetti relativi ad un sistema di elaborazione, da quelli hardware a quelli software, dai sistemi operativi alle reti di elaboratori, dalle basi di dati ai sistemi informativi, dai linguaggi di programmazione all'ingegneria del software, dall'interazione uomo-macchina al riconoscimento dei segnali e delle immagini, all'elaborazione multimediale, all'ingegneria della conoscenza, all'intelligenza artificiale ed alla robotica.

 

RISULTATI DI APPRENDIMENTO ATTESI

(Descrittori di Dublino)

Conoscenza e capacità di comprensione
Al termine del corso, lo studente deve dimostrare di aver acquisito familiarità con una ampia varietà di strutture dati ed algoritmi noti che risolvono problemi di carattere fondamentale, di aver compreso le tecniche per la sintesi di nuovi algoritmi e di padroneggiare i metodi per analizzare la correttezza e la complessità asintotica degli algoritmi.

Capacità di applicare conoscenza e comprensione
Al termine del corso, lo studente deve dimostrare di sapere applicare e combinare le principali tecniche di progettazione, nonché strutture dati avanzate, per la sintesi di algoritmi corretti ed efficienti per la risoluzione di problemi nello sviluppo delle applicazioni informatiche, e di saperne analizzare formalmente la correttezza e la complessità asintotica. Il percorso formativo è orientato a fornire le capacità e gli strumenti necessarie a risolvere problemi nuovi o non familiari negli ampi contesti relativi ai sistemi di elaborazione dell’informazione.

 

PROGRAMMA-SYLLABUS

Concetti introduttivi: algoritmi e strutture dati, ricorsione, analisi e progettazione degli algoritmi.
Tecniche di analisi e strutture dati elementari.
Analisi di correttezza: invariante di ciclo, correttezza di algoritmi ricorsivi.
Analisi di complessità: analisi asintotica, notazioni O, Ω, Θ; analisi di algoritmi ricorsivi.
Strutture dati elementari: dizionari; pile e code; code di priorità; liste; tabelle hash e stringhe; alberi binari di ricerca.
Tecniche di progettazione. Classificazione di problemi, caratteristiche della soluzione.

DIVIDE et IMPERA. Problemi ed algoritmi comuni. Ordinamento: merge sort, heap sort, quick sort, ordinamento in tempo lineare (counting sort, radix sort, bucket sort), mediane e statistiche d'ordine.

RICERCA COMBINATORIALE E METODI EURISTICI. Ricerca esaustiva, ricerca combinatoriale; backtracking, pruning della ricerca.
Metodi euristici, ricerca locale ed algoritmi golosi (“greedy”). Cenni ad algoritmi meta-euristici. Problemi ed algoritmi comuni.
Problemi combinatoriali (costruzione di subset e permutazioni), copertura minima di un insieme. Il problema della selezione di attività

PROGRAMMAZIONE DINAMICA. Introduzione alla programmazione dinamica. Ricerca esaustiva vs. ricerca greedy vs. programmazione dinamica. Applicazioni. Problemi ed algoritmi comuni. Problema di string matching, edit distance, longest increasing sequence. Fibonacci. Problema dello zaino. Ulteriori esempi.

Strutture dati e tecniche di analisi avanzate: alberi RB, alberi auto-aggiustanti. B-alberi. Grafi. Rappresentazione, esplorazione in ampiezza e profondità, ordinamento topologico. Applicazioni. Cammini minimi. Tecniche di analisi di algoritmi avanzate: analisi ammortizzata.

Problemi ed algoritmi comuni, esempi applicativi. Problemi di teoria dei numeri (es.: algoritmi DES ed RSA). Problemi su grafi: ricerca di cammini minimi. Multithreading e parallelismo: progettazione di algoritmi multithread, algoritmi paralleli e distribuiti. Esempi (Fibonacci, ordinamento). Analisi e confronto con algoritmi sequenziali. Traduttori ed interpreti: analisi lessicale, analisi sintattica, analisi semantica, interpreti, strutture dati usate nei traduttori.

Problemi intrattabili. Introduzione a problemi NP ed NP-completi. Riducibilità. Esempi di problemi NP-completi.

Parte Esercitativa: Prevalentemente in C.

 

MATERIALE DIDATTICO

LIBRO DI TESTO ADOTTATO:
1) Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. Introduction to Algorithms. 3rd ed. MIT Press, 2009. ISBN: 9780262033848.

TRASPARENZE DALLE LEZIONI ED ESERCITAZIONI disponibili sul sito web docenti di Ateneo sulla piattaforma Microsoft Teams.

LIBRO CONSIGLIATO:
2) S. Skiena. The Algorithm Design Manual, 3rd ed, Springer, 2020. ISBN-13: 978-3030542559, ISBN-10: 3030542556.

 

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

Il docente utilizzerà: a) lezioni frontali per circa l’80% delle ore di lezione totali, b) esercitazioni per circa il 20% delle ore di lezione totali. E’ prevista l’assegnazione di esercizi da svolgere autonomamente e consegnare al docente. Le lezioni sono registrate e rese disponibili tramite la piattaforma Microsoft Teams.

 

VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:

L'esame si articola in prova:
 Scritta e orale
 Solo scritta   
 Solo orale  
 Discussione di elaborato progettuale   
 Altro

 

In caso di prova scritta i quesiti sono (*):
 A risposta multipla  
 A risposta libera   
 Esercizi numerici  

  

L’esame si articola in n. 3 prove scritte ed in una prova orale che include una discussione sugli esercizi assegnati durante il corso. La parte scritta si articolata in n.2 prove intercorso più n.1 prova finale. Le prove richiedono, per uno o più problemi, di implementare algoritmi per la loro risoluzione ed analizzarne la complessità asintotica.
La prova orale consta di un colloquio sostenuto dopo l’ultima prova scritta (prova finale). Esso include anche la discussione sulla risoluzione degli esercizi assegnati durante il corso.

b) Modalità di valutazione:
Le n.3 prove scritte pesano ciascuna il 20% sul giudizio finale (per un totale del 60%). La prova orale pesa per il restante 40% sul giudizio finale (con un peso del 30% per la valutazione e discussione degli esercizi e del 10% per l’interrogazione sulla parte del programma non coperta dalle prove e dagli esercizi).

 

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.