en
Politecnico di Torino
Anno Accademico 2012/13
02MNOOA, 02MNONZ
Algoritmi e programmazione
Corso di Laurea in Ingegneria Informatica - Torino
Corso di Laurea in Ingegneria Delle Telecomunicazioni - Torino
Docente Qualifica Settore Lez Es Lab Tut Anni incarico
Camurati Paolo Enrico ORARIO RICEVIMENTO PO IINF-05/A 60 20 20 60 10
SSD CFU Attivita' formative Ambiti disciplinari
ING-INF/05 10 B - Caratterizzanti Ingegneria informatica
Presentazione
Insegnamento obbligatorio della Laurea in Ingegneria Informatica, collocato al II periodo didattico del I anno.
Il corso approfondisce i concetti necessari per acquisire adeguate conoscenze di programmazione, intesa quale strumento per la soluzione di problemi. Si accentua il passaggio dalle capacità analitiche a quelle progettuali. Vengono presentate le soluzioni algoritmiche "classiche" dei problemi, e la teoria che sta alla loro base, con particolare riferimento a realizzazioni in C. Si propongono agli studenti esempi pratici di soluzione di problemi complessi, con analisi dei principali paradigmi risolutivi, e sono svolte esercitazioni pratiche ad essi connesse.
Risultati di apprendimento attesi
- Conoscenza dei meccanismi di allocazione della memoria e utilizzo dei puntatori
- Abilità di programmazione in C, utilizzando puntatori e strutture dat dinamiche
- Conoscenza delle nozioni elementari di analisi della complessità
- Conoscenza degli algoritmi di ordinamento
- Abilità di valutare la complessità di algoritmi e di migliorarne l'efficienza in termini di tempo di esecuzione e/o uso di memoria
- Conoscenza di strutture dati complesse e ADT (liste, code, heap, alberi, tabelle di hash e grafi) e dei relativi algoritmi
- Conoscenza delle strategie elementari di programmazione modulare in C
- Conoscenza dei paradigmi di programmazione ricorsiva e greedy, della programmazione dinamica e con memorizzazione
- Abilità di utilizzo di strumenti di ausilio alla programmazione
- Abilità di problem solving mediante progetto di strutture dati e algoritmi
- Abilità nelle tecniche di programmazione ricorsiva
Prerequisiti / Conoscenze pregresse

- Conoscenza dell'architettura elementare dei sistemi di elaborazione (modello di Von Neumann)
- Conoscenza di sintassi, tipi di dato e costrutti base del linguaggio C
- Capacità di sviluppare semplici programmi in C, utilizzando construtti condizionali e iterativi, dati scalari a aggregati, I/O standard, file testo e funzioni
- Capacità di soluzione di problemi (algoritmici) elementari
Programma

- Analisi di algorítmi (8 h)
- analisi asintotica e complessità di caso peggiore; notazione 0, Q, W; equazioni alle ricorrenze
- Algoritmi di ordinamento: ordinamenti quadratico (selection sort, insertion sort), lineare (counting sort) linearitmico (quicksort, heapsort, mergesort);

- Strutture dati statiche e dinamiche e loro realizzazione in C (6 h)
- rappresentazione dei dati in memoria e gestione della memoria in runtime;
- puntatori (o riferimento a oggettì);
- allocazione di memoria statica, su stack, e dinamica;
- strutture linkate;
- strategie per scegliere la struttura dati.

- Modularità e realizzazione modulare di algoritmi e strutture dati (4 h)
- Il modello implementazione-interfaccia-client
- La realizzazione di un programma C con più sorgenti e header file
- Utilizzo elementare di strumenti di sviluppo e debug: es. make, gdb, cvs, '

- Ricorsione e programi ricorsivi (4 h)
- il concetto di ricorsione
- funzioni matematiche ricorsive
- procedure ricorsive semplici
- backtrack e implementazione della ricorsione.

- Matematica discreta (2 h)
- insiemi, relazioni, funzioni,
- grafi e alberi

- Oggetti astratti, collezioni di oggetti e ADT (6 h)
- Esempi modulari di strutture composte: es. vettori di liste, multi liste, '
- liste, stack, code FIFO, code generalizzate, coda prioritaria, heap

- Paradigmi algoritmici (6 h)
- divide et impera
- il paradigma greedy
- la programmazione dinamica e la ricorsione con memorizzazione

- Problem solving (4 h)
- Strategie di analisi e di definizione di strutture dati e algoritmi
- Problemi di ricerca e di ottimizzazione

- Strutture dati per tabelle di simboli (6 h)
- Alberi Binari di Ricerca
- Alberi bilanciati (RB-tree)
- B-tree
- Tabelle di hash

- Algoritmi sui grafi (8 h)
- visite in profondità e ampiezza
- applicazioni delle visite
- cammini minimi
- alberi ricoprenti minimi
Organizzazione dell'insegnamento

- Esercitazioni in aula (22 h)
- Puntatori e allocazione dinamica di memoria
- Programmi modulari e strumenti di sviluppo
- Programmazione ricorsiva
- Problem solving e paradigmi algoritmici
- Esempi applicativi dalla teoria dei giochi: 8 regine, torre di Hanoi, righello, labirinto
- Strutture dati e ADT

- Esercitazioni in laboratorio (24 h)
- Puntatori e allocazione dinamica di memoria: vettori e matrici dinamiche, liste
- Programmi modulari e strumenti di sviluppo: make, gdb, cvs
- Programmazione ricorsiva con backtrack
- Problem solving e paradigmi algoritmici
- Strutture dati, ADT e tabelle di simboli: stack e FIFO, BST, tabelle di hash
- Algoritmi sui grafi
Testi richiesti o raccomandati: letture, dispense, altro materiale didattico
I testi, scelti tra quelli elencati, saranno comunicati a lezione dal docente titolare dell'insegnamento

R. Sedgewick, 'Algoritmi in C', III edizione, Addison-Wesley

T.H.Cormen, C.E.Leiserson, R.L.Rivest, 'Introduction to Algorithms', MC-Graw Hill

Deitel & Deitel,' Corso completo di programmazione C', Apogeo


- Materiale didattico a disposizione su Web
- Trasparenze proiettate in aula
- Esercizi e soluzioni
Criteri, regole e procedure per l'esame
L'esame è costituito da una prova scritta, della durata di 150 minuti, è costituita da due parti:
- esercizi e/o domande sugli argomenti svolti a lezione
- La soluzione di un problema mediante linguaggio C
Durante lo svolgimento della prima parte della prova non è possibile consultare testi o appunti.
Orario delle lezioni
Statistiche superamento esami

Programma definitivo per l'A.A.2012/13
Indietro