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 Informazioni utili • Orario lezioni – Lunedì: 12,00 – 14,00 – mercoledì: 9,00 – 11,00 • Orario ricevimento – mercoledì: 11,15 – 12,45 – Ufficio: dip. di matematica, piano 0, corridoio B0, stanza 206 2 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 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Prerequisiti del corso Cosa è necessario sapere… – – – – 4 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 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/ 5 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …altri testi utili… P. Crescenzi, G. Gambosi, R. Grossi, G. Rossi Strutture di dati e algoritmi Pearson T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduzione agli algortimi e strutture dati McGraw-Hill A. Bertossi, A. Montresor Algoritmi e strutture di dati Città Studi J. Kleinberg, E. Tardos Algorithm Design Addison Wesley 6 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Qualche consiglio: • Lavorare sui problemi assegnati in gruppo • Scrivere/formalizzare la soluzione individualmente 7 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 una 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 8 Copyright © 2004 - The McGraw - Hill Companies, srl 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; 9 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 10 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e programmi • Un algoritmo può essere visto come 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 può essere visto come un programma distillato da dettagli riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo – Algoritmo è un concetto autonomo da quello di programma 11 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 12 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 alKhwarizmi, che descrisse delle procedure per i calcoli matematici 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmo vs Problema Sequenza di passi ben definita che risolve un problema computazionale La definizione del problema specifica in termini generali la relazione di input/output desiderata 14 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. 15 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” 16 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano un esempio MCCXIV * XXI = ?????? 1214 * 21 = 1214 2428 25494 !!!!!!! 17 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”? – Producano correttamente il risultato desiderato (correttezza) – Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria (efficienza) 18 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi di algoritmi Studio teorico del comportamento, delle proprietà e dell’uso delle risorse di un algoritmo. 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) 19 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Cosa è (più) importante oltre l’efficienza? • • • • • • • • Correttezza Semplicità Mantenibilità Stabilità Modularità Sicurezza User-friendliness … 20 Allora perché tanta enfasi sull’efficienza? • Veloce è bello • A volte: o veloce o non funzionale • Legato alla User-friendliness • Efficienza può essere usata per “pagare” altre caratteristiche Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altri motivi per studiare gli algoritmi "There is a saying: If you want to be a good programmer, you just program every day for two years, you will be an excellent programmer. If you want to be a world-class programmer, you can program every day for ten years. Or you can program every day for two years and take an algorithms class." Charles E. Leiserson 21 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altri motivi per studiare gli algoritmi “Se è vero che un problema non si capisce a fondo finché non lo si deve insegnare a qualcuno altro, a maggior ragione nulla è compreso in modo più approfondito di ciò che si deve insegnare ad ua macchina, ovvero di ciò che va espresso tramite un algoritmo." Donald Knuth In ogni algoritmo è possibile individuare due componenti fondamentali: • l’identificazione della appropriata tecnica di progetto algoritmico (basato sulla struttura del problema; • la chiara individuazione del nucleo matematico del problema stesso. 22 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altri motivi per studiare gli algoritmi “L’algoritmica è l’anima dell’informatica." David Harel Le idee algoritmiche non solo trovano soluzioni a problemi ben posti, quanto costituiscono il linguaggio che porta ad esprimere chiaramente il problema soggiacente 23 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altri motivi per studiare gli algoritmi Potenzia le capacità di: • Critical Thinking: – un modo di decidere se un certo enunciato è sempre vero, vero a volte, parzialmente vero, o falso • Problem Solving: – insieme dei processi atti ad analizzare, affrontare e risolvere positivamente problemi 24 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? 25 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 26 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à? 27 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. 28 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 29 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 30 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) 31 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Trovare il cammino più breve 32 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Una possibile formalizzazione: cammino minimo su un grafo pesato sorgente 10 2 3 9 s 18 6 6 2 6 30 15 11 5 8 16 20 7 44 19 4 6 t Grafo pesato nodi: incroci archi: strade e distanze destinazione Trovare un cammino (diretto) da s a t che minimizza la somma dei pesi degli archi 33 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Formalizzazione: un altro esempio • Due robot telecomandabili R1 e R2 sono posizionati sui nodi s1 e s2 di un grafo G • Vogliamo spostare R1 e R2 in t1 e t2, rispettivamente • Possiamo spostarli uno alla volta seguendo gli archi di G • Vincolo: i due robot non devono mai essere a distanza (minimo numero di archi che li separa) ≤ r (per evitare interferenze di segnale) • Goal: trovare una sequenza minima di mosse valida 34 t2 r=1 s1 s2 t1 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Formalizzazione: un altro esempio • Idea: costruire un grafo delle “configurazioni” su cui cercare la sequenza di mosse • Costruiamo un nuovo grafo H • Nodi di H: coppie {i,j} di nodi di G tali che i e j sono a distanza > r • Archi di G: c’è un arco fra {i,j} e {k,j} se c’è un arco in G fra i e k • Trova un cammino minimo in H da {s1,s2} a {t1,t2} 35 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Un problema da $ 1,000,000 Trovare un algoritmo efficiente per il seguente problema: Dato un grafo G (non diretto e non pesato) e due nodi s e t, trovare il cammino (semplice) più lungo fra s e t s 36 s t t Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Buon inizio anno 37 Copyright © 2004 - The McGraw - Hill Companies, srl