Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e Strutture Dati con Laboratorio (Modulo I) Luciano Gualà [email protected] http://www.mat.uniroma2.it/~guala/ Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano int InC(int a[], int n){ public static int InJava (int[] a){ int i, max; int max=a[0]; max = a[0]; for (int i = 1; i < a.length; i++) for (i = 1; i < n; i++) if (a[i] > max) max = a[i]; if (a[i] > max) { return max; max = a[i]; } return max; function InPascal(var A: array[1…Nmax] of integer): integer; } var k, max: integer; begin max:=A[1]; for k:= 2 to n do begin if A[k]>max then max:=A[k]; end; InPascal:=max; end; 2 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un possibile pseudo-codice… Input: Sequenza di n numeri: <a1,a2,…, an> Output: valore massimo della sequenza max=a1 per ogni i=2,…, n se (ai > max) allora aggiorna max= ai restituisci max 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e programmi • Un algoritmo è l’essenza computazionale di un programma, nel senso che fornisce il procedimento per giungere alla soluzione di un dato problema di calcolo • Algoritmo diverso da programma – programma è la codifica (in un linguaggio di programmazione) di un algoritmo – un algoritmo è un programma distillato da dettagli riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo 4 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite passo per passo, in modo da poter essere eseguite meccanicamente e tali da produrre un determinato risultato 5 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano etimologia Il termine Algoritmo deriva da Algorismus, traslitterazione latina del nome di un matematico persiano del IX secolo, Muhammad al-Khwarizmi, che descrisse delle procedure per i calcoli matematici 6 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione di algoritmo Sequenza di passi ben definita che risolve un problema computazionale La definizione del problema specifica in termini generali la relazione di input/output desiderata 7 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Problema: ricerca del minimo fra n numeri • Input: una sequenza di n numeri A=<a1,a2,…,an> • Output: un numero ai tale che ai aj j=1,…,n (stabilisce una relazione tra input e outut) Algoritmo (descrive procedura computazionale per realizzare tale relazione) Minimo (A) 1. min= a1 2. for j=2 to n do 3. 4. 8 if (aj < min) then min=aj return min Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Strutture dati – Concetto di algoritmo è inscindibile da quello di dato – Un algoritmo è una procedura che prende dei dati (input) e, dopo averli elaborati, li restituisce (output) – I dati devo essere organizzati e strutturati in modo tale che la procedura che li elabora sia “efficiente” 9 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Cosa impareremo? …ad analizzare e progettare “buoni” algoritmi …che intendiamo per “buoni”? 10 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Due concetti fondamentali: Correttezza ed efficienza Vogliamo progettare algoritmi che: – Producano correttamente il risultato desiderato – Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria 11 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi di algoritmi Correttezza: – dimostrare formalmente che un algoritmo è corretto – non è sempre facile – Un algoritmo può essere complesso e/o non intuitivo (ai fini dell’efficienza) Complessità: – Stimare la quantità di risorse (tempo e memoria) necessarie all’algoritmo – Misurata in complessità asintotica – Non sempre è facile campire quale è la complessità di un algoritmo (es: algoritmi ricorsivi) 12 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi della complessità – stimare tempo e memoria necessari – stimare il più grande input gestibile in tempi ragionevoli – confrontare due algoritmi diversi – ottimizzare le parti “critiche” 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Un’altra cosa che impareremo a fare (un po’): …analizzare problemi (computazionali) …cosa intendiamo con analizzare un problema? 14 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Formalizzazione di un problema • Trovare un modello formale/matematico che descrive in modo non ambiguo il problema e renda esplicita la relazione fra input ed output • Qualche volta piuttosto difficile • Perché formalizzare? – aiuta a comprendere meglio il problema – una formalizzazione può suggerire un approccio risolutivo (possibilmente efficiente) per il problema 15 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Formalizzazione: un esempio • Vogliamo progettare un algoritmo che aiuti la segretaria di dipartimento ad assegnare i corsi ai docenti (lei quando lo fa a mano impiega troppo tempo). • C’è un insieme di docenti, a ognuno dei quali deve essere assegnato un solo corso (magari!). Un docente sa insegnare solo alcuni corsi. 16 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Una possibile formalizzazione: matching su grafi bipartiti docenti d1 d2 d3 d4 d5 Grafo bipartito nodi: docenti + corsi archi: (di,cj) se di sa insegnare cj c1 c2 c3 corsi c4 c5 Trovare insieme di archi che “coprono” tutti i corsi tale che due archi non incidono su uno stesso nodo 17 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Formalizzazione: un altro esempio • Vogliamo progettare un algoritmo per un correttore ortografico di testi che, data una parola, controlla se essa è scritta bene e in caso di errore suggerisce una possibile correzione 18 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Una possibile formalizzazione • • • • • Manteniamo un insieme D di parole dove D è il nostro dizionario (di parole corrette) Una parola x è corretta se x D Definiamo un concetto di distanza tra parole Se x non è in D, cerco una parola y in D che minimizza la distanza da x • Osservazioni: – Distanza fra due parole x e y deve essere piccola quando x e y sono “simili” – Distanza fra due parole deve poter essere calcolata (efficientemente) 19 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi di un problema: scoprire proprietà utili • Scoprire proprietà strutturali di un problema in modo da trarne vantaggio nella progettazione di un algoritmo efficiente 20 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ragionare sulla complessità di un problema • Ho progettato un algoritmo per un dato problema che usa una certa quantità di risorse di tempo e spazio • Posso fare meglio? • Quanto posso sperare di abbassare la mia complessità? 21 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Prerequisiti del corso Cosa è necessario sapere… – – – – 22 programmazione di base strutture dati elementari concetto di ricorsione dimostrazione per induzione e calcolo infinitesimale Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Struttura del corso • Corso strutturato in due moduli – Modulo I (vecchio Elementi di Algoritmi e Strutture Dati) • 6 CFU • Ottobre – Gennaio – Modulo II (vecchio Algoritmi e Strutture dati con Laboratorio) • 6 CFU • Marzo – Giugno 23 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Argomenti (Modulo I) • • • • • • • • 24 Introduzione informale agli algoritmi Modelli di calcolo e metodoligie di analisi Strutture dati elementari Algoritmi di ordinamento Algoritmi su stringhe Alberi binari di ricerca Alberi bilanciati (AVL) …???... Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Informazioni utili • Orario lezioni – Martedì: 15,00 – 17,00 – Venerdì: 15,00 – 17,00 • Orario ricevimento – Martedì: 11,15 – 12,45 – Ufficio: dip. di matematica, piano 0, corridoio B0, stanza 206 25 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Libro di testo C. Demetrescu, I. Finocchi, G. Italiano Algoritmi e Strutture dati (sec. ed.) McGraw-Hill Slide e materiale didattico http://www.mat.uniroma2.it/~guala/ 26 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …altri testi utili… T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduzione agli algortimi e strutture dati McGraw-Hill P. Crescenzi, G. Gambosi, R. Grossi Strutture di dati e algoritmi Addison-Wesley A. Bertossi, A. Montresor Algoritmi e strutture di dati Città Studi 27 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Modalità d’esame • L’esame consiste in una prova scritta e un’eventuale prova orale • Quattro appelli – 2 giugno/luglio – 1 settembre – 1 gennaio/febbraio • Prova parziale a febbraio • Per sostenere l’esame è obbligatorio prenotarsi online (una settimana prima) su delphi.uniroma2.it 28 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Buon inizio anno 29 Copyright © 2004 - The McGraw - Hill Companies, srl