TURNO: PES-Z Conoscenze di matematica richieste (prerequisiti): 1

PROGRAMMA DETTAGLIATO DEL CORSO DI ALGORITMI (ELEMENTI)
DOCENTE: DOTT. ALBERTO LEPORATI
TURNO: PES-Z
Conoscenze di matematica richieste (prerequisiti):
1. Insiemistica
1.1. Insieme, elemento, sottoinsieme, appartenenza, inclusione
1.2. Operazioni sugli insiemi: unione, intersezione, complemento
1.3. Relazioni e loro proprietà
2. Proprietà di funzioni
2.1. Logaritmi
2.2. Polinomi
2.3. Funzioni esponenziali
2.4. Funzioni fattoriali
2.5. Parte intera superiore (tetto) e inferiore (base):   ,  
3. Limiti di funzioni a una variabile
3.1. Limiti di funzioni logaritmiche
3.2. Limiti di funzioni polinomiali e con radici n-esime
3.3. Limiti di funzioni esponenziali e fattoriali
3.4. Limiti di funzioni composte
3.5. Limiti di rapporti di funzioni
4. Sommatorie
4.1. Serie aritmetica
4.2. Serie geometrica
4.3. Serie armonica
4.4. Manipolazione di sommatorie
5. Metodi di dimostrazione
5.1. Per induzione
5.2. Per assurdo
5.3. Per casi
6. Calcolo della media aritmetica
7. Combinatoria
7.1. Numeri di Fibonacci
7.2. Coefficienti binomiali: definizione e proprietà
7.3. Permutazioni
7.4. Fattoriale
8. Matrici e relative operazioni
9. Aritmetica modulo n (corso di Matematica Discreta)
9.1. Definizioni di modulo e divisione intera (mod e div)
1
9.2. Operazioni modulo n
PROGRAMMA DEL CORSO
1. Introduzione
1.1. Presentazione corso, modalità esame (scritto+orale+progettino), prerequisiti
1.2. Nozione di algoritmo
1.3. Esempi di problemi computazionali
1.4. La questione dell'efficienza computazionale
2. Analisi degli algoritmi: un modello formale
2.1. Convenzioni sullo pseudocodice
2.2. Dimensione delle istanze di un problema
2.3. Definizione di tempo e spazio di calcolo
2.4. Caso peggiore, caso migliore e caso medio
3. Algoritmi di ordinamento e loro analisi
3.1. Bubble Sort
3.2. Selection Sort
3.3. Insertion Sort
4. Algoritmi di ricerca e loro analisi
4.1. Ricerca sequenziale (con analisi nel caso medio)
4.2. Ricerca dicotomica (versione iterativa)
5. Algoritmi ricorsivi
5.1.
5.2.
5.3.
5.4.
5.5.
La ricorsione: chiamate ricorsive e record di attivazione
Algoritmo per il calcolo del fattoriale
Algoritmo per il calcolo dei numeri di Fibonacci
Ricerca dicotomica ricorsiva
Insertion Sort ricorsivo
6. Strumenti matematici per l’analisi degli algoritmi
6.1.
6.2.
6.3.
6.4.
Ordini di grandezza delle funzioni
Complessità asintotica e notazioni O, W, Q, o e w
Complessità polinomiale e superpolinomiale
Limiti superiori e inferiori (stretti e non) della complessità di un problema
7. Tecnica divide-et-impera per la progettazione di un algoritmo
7.1. Un esempio: MergeSort
8. Soluzione di equazioni di ricorrenza
8.1.
8.2.
8.3.
8.4.
8.5.
Analisi di MergeSort
Metodo iterativo
Metodo per sostituzione
Alberi di ricorsione
Metodo principale
2
9. Quicksort
9.1.
9.2.
9.3.
9.4.
9.5.
Descrizione dell’algoritmo
Selezione del pivot (perno) e procedura PARTITION
Analisi del tempo nei casi migliore e peggiore
Analisi del tempo nel caso medio
QuickSort randomizzato, e sua analisi nel caso medio
10. Ordinamento in tempo lineare
10.1. Limite inferiore per gli algoritmi di ordinamento basati su confronti
10.2. Counting Sort
10.3. Radix Sort
11. Problema della selezione e calcolo del mediano
11.1. Minimo e massimo simultanei
11.2. Selezione in tempo medio lineare
12. Strutture dati 1
12.1. Pile
12.2. Code
12.3. Liste e loro rappresentazione in memoria
13. Strutture dati 2
13.1. Grafi e alberi: definizioni e proprietà
13.2. Relazione tra numero di nodi e altezza di un albero binario
13.3. Rappresentazione di alberi posizionali in memoria: alberi binari, k-ari e
rappresentazione figlio-sinistro fratello-destro
14. Alberi binari di ricerca
14.1. Proprietà
14.2. Visita (attraversamento) di un albero binario di ricerca in pre-ordine (ordine
anticipato), in inordine (ordine simmetrico) e in post-ordine (ordine
posticipato)
14.3. Ricerca di un elemento
14.4. Calcolo del minimo e del massimo elemento in un albero binario di ricerca
14.5. Calcolo del successore e del predecessore di un elemento di un albero
binario di ricerca
14.6. Inserimento di un elemento
14.7. Cancellazione di un elemento
15. Strutture dati 3
15.1. Heap: definizioni e proprietà
15.2. Rappresentazione di un albero binario quasi completo in un array
15.3. Costruzione e mantenimento di uno heap: le procedure HEAPIFY e
BUILDHEAP
15.4. HEAPSORT, e suo tempo di calcolo
15.5. Code con priorità
16. Tabelle di hash
16.1. Definizione e collisioni
16.2. Tecniche per risolvere le collisioni: liste concatenate, ricerca lineare, ricerca
quadratica, doppio hashing
3