Algoritmica e Laboratorio

Corso tenuto presso il Polo Universitario “G. Marconi” di La Spezia, Corso di Laurea in Informatica Applicata.

News

  • Laboratorio C n. 1 (15/03/2010). Per la lezione, è di fondamentale importanza conoscere:
    • Struttura generale di un programma C
    • Sintassi di:
      • Dichiarazione variabili
      • Array
      • Dichiarazione e invocazione di funzioni

Informazioni Generali

Docenti: Anna Bernasconi Giuseppe Prencipe

Impegno: 12 CFU (9 di teoria e 3 di laboratorio)

Le lezioni si svolgono presso il Polo Universitario “G. Marconi” di La Spezia.

Orario delle lezioni
Lunedì 11:00-12:30, 14:00-15:30 Aula A2
Giovedì 11:00-12:30, 14:00-15:30 Aula A5
Ricevimento
Lunedì 10:00-11:00Polo G. Marconi
Giovedì 10:00-11:00Polo G. Marconi

Testi Consigliati e Laboratorio

  • Teoria
    • C. Demetrescu, I. Finocchi e G. F. Italiano, Algoritmi e Strutture Dati, McGraw-Hill, seconda edizione, 2008 (Testo di Riferimento)
    • P. Crescenzi, G. Gambosi e R. Grossi, Strutture di dati e algoritmi, Pearson – Addison Wesley, 2006
  • Laboratorio (Programmazione in C)
    • B.W. Kernighan, D.M. Ritchie. Il Linguaggio C, Pearson-Prentice Hall, seconda edizione, 2004

Per le attività di laboratorio è sufficiente l'utilizzo di un editor e di gcc. gcc è disponibile sulle macchine Linux. Per le macchine Windows, è sufficiente installare il pacchetto MiniGW. Su sistemi MAC, è necessario installare gli Xcode Tools, presenti nel CD/DVD di installazione della macchina.

Come editor, potete utilizzare Jedit.

Per un più proficuo utilizzo delle ore di laboratorio, si consiglia fortemente di studiare approfonditamente i primi 5 capitoli del libro di testo consigliato per le attività di laboratorio (Il Linguaggio C).

Contenuti del Corso

  • Problemi Computazionali
  • Array e liste
  • Alberi e grafi
  • Dizionari
  • Pile e code
  • NP-completezza

Registro delle lezioni

  1. Introduzione al Corso (22/02/2010)
  2. Introduzione informale agli algoritmi
    • I numeri di Fibonacci
    • Algoritmo numerico
    • Algoritmo ricorsivo
    • Algoritmo iterativo
    • Occupazione di memoria e altro algoritmo iterativo
    • Introduzione alla notazione asintotica
    • Algoritmo basato su potenze ricorsive
    • Nota sulla dimensione dell'istanza in ingresso (25/02/2010)
    • Problema 1.4 (dal libro di testo)
  3. Modelli di calcolo e metodologie di analisi
    • Modelli di calcolo
    • Criteri di costo (uniforme e logaritmico)
    • La notazione asintotica (O, Ω, Θ)
    • Costo degli algoritmi e complessità dei problemi
    • Metodi di analisi (caso peggiore, migliore e medio)
      • Ricerca sequenziale
      • Ricerca binaria
    • Analisi di algoritmi ricorsivi
      • Metodo iterativo
      • Metodo della sostituzione
      • Analisi dell'albero di ricorrenza
      • Metodo del cambiamento di variabile
      • Master Theorem (con dimostrazione) (01/03/2010)
      • Introduzione all'Analisi Ammortizzata
  4. Esercitazione (Capitoli 1 e 2 del testo di riferimento)
  5. Strutture dati elementari (04/03/2010)
    • Strutture indicizzate: array
    • Strutture collegate: record e puntatori
    • Dizionari
    • Pile e code
    • Relazione tra Pila e Ricorsione
    • Alberi
      • Rappresentazioni indicizzate
      • Rappresentazioni collegate
      • Visite di alberi
  6. Ordinamento con confronti (08/03/2010)
    • Limite inferiore al problema
    • Algoritmi quadratici: Selection Sort, Insertion Sort, Bubble Sort
    • Heapsort
    • Mergesort
    • Introduzione al Quicksort
    • Analisi di complessità nel caso medio del Quicksort (11/03/2010)
  7. Altri tipi di ordinamento
    • Integer sort, Bucket sort, Radix sort
  8. Laboratorio C n. 1 (15/03/2010). Per la lezione, è di fondamentale importanza conoscere:
    • Struttura generale di un programma C
    • Sintassi di:
      • Dichiarazione variabili
      • Array
      • Dichiarazione e invocazione di funzioni
  9. Selezione del k-esimo elemento (18/03/2010)
    • Soluzione con k piccolo
      • Algoritmo semplice e algoritmo del torneo
    • Heapselect
    • Quickselect
    • Mediano dei mediani
  10. Alberi di ricerca (22/03/2010)
    • Alberi binari di ricerca
    • Alberi AVL
    • Alberi 2-3
    • Panoramica sui B-Alberi
  11. Tabelle hash
  12. Laboratorio C n. 2 (02/04/2009). Programmi da sviluppare in C per il 2 Aprile (esercizi svolti):
    • Fibonacci numerico
    • Fibonacci ricorsivo (esponenziale)
    • Fibonacci iterativo con array
    • Fibonacci iterativo con 3 variabili
  13. Tecniche algoritmiche (06/04/2009)
    • Divide et impera
    • Programmazione dinamica
  14. Prima verifica intermedia (09/04/2009)
  15. Laboratorio C n. 3 (16/04/2009) Programmi da sviluppare in C per il 16 Aprile (esercizi svolti):
    • Selection Sort e Insertion Sort
    • Mergesort
    • Quicksort (con scelta random del perno)
    • Heapsort (in loco)
  16. Tecniche algoritmiche (20/04/2009)
    • Greedy
  17. Stringhe
    • Definizioni
    • Distanza fra 2 stringhe
    • Massima sottosequenza comune (LCS)
    • String matching
    • Stringhe e automi a stati finiti
    • Algoritmo di Knuth, Morris e Pratt (23/04/2009)
    • Definizioni
    • Rappresentazione di grafi
    • Visite (ampiezza e profondità)
    • Componenti connesse di un grafo non orientato
    • Componenti fortemente connesse di un brafo orientato (27/04/2009)
    • Minimo albero di copertura
      1. Kruskal
      2. Prim
      3. Boruvka
    • Problemi indecidibili e intrattabili
    • Classi Time, PSpace, ExpTime e P
    • SAT e formule Booleane quantificate
    • La classe NP
    • Problemi NP-completi
    • Il Teorema di Cook
    • NP-completezza del Problema della Clique
    • Algoritmi di approssimazione
  18. Cammini minimi (04/05/2009)
  19. Laboratorio C n. 4 (07/05/2009) Programmi da sviluppare in C per il 7 Maggio (esercizi svolti):
    • LeggiScriviChar(): Lettura e scrittura di caratteri con getchar() e putchar()
    • Reverse1(): inversione di una stringa costante
    • Reverse2(): inversione di una serie di stringhe lette da tastiera. Ogni stringa termina con '\n' e la serie termina con il carattere '0'. La stringa invertita viene stampata a video
    • LeggiStringhe(): lettura di una serie di stringhe da tastiera. Ogni stringa termina con '\n' e la serie termina con il carattere '0'. Tutte le stringhe sono inserite in un array, che viene stampato
    • GeneraStringhe(): genera casualmente un intero x; alloca memoria per un array di x stringhe lunghe al più 10 caratteri; genera x stringhe casuali lunghe al più 10 caratteri che sono inserite nell'array. NOTA: inizializzare il seme casuale mediante invocazione di srand(time(NULL))
    • OrdinaStringhe(): ordina un array di stringhe. Utilizzare come base di partenza un qualsiasi algoritmo di ordinamento sviluppato per la Lezione n. 3. Inoltre, utilizzare GeneraStringhe() per generare le stringhe da inserire nel vettore da ordinare
  20. Laboratorio C n. 5 (14/05/2009)
 
informaticaapplicata/all/start.txt · Ultima modifica: 2010/03/11 21:58 da Giuseppe Prencipe
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki