Introduzione al Corso di Algoritmi



Похожие документы
ALGORITMI e PROGRAMMI Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

Esercizi per il corso di Algoritmi e Strutture Dati

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

risulta (x) = 1 se x < 0.

Algoritmi e Strutture Dati

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Dispensa di Informatica I.1

Fasi di creazione di un programma

Lezione 8. La macchina universale

Corso di Informatica

Fondamenti di Informatica Ingegneria Clinica Lezione 15/10/2009. Prof. Raffaele Nicolussi

2. Leggi finanziarie di capitalizzazione

Esercizi Capitolo 6 - Alberi binari di ricerca

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Programmazione dinamica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Lezione 10: Il problema del consumatore: Preferenze e scelta ottimale

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Vademecum studio funzione

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

La selezione binaria

Formattazione. ü Introduzione

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

FUNZIONE ESPONENZIALE e INTERESSE COMPOSTO. Ipotizziamo di avere a nostra disposizione all'inizio del primo anno (tempo in ascissa

MOCA. Modulo Candidatura. [Manuale versione 1.0 marzo 2013]

4 3 4 = 4 x x x 10 0 aaa

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Esercizi su. Funzioni

Guida per la registrazione alla piattaforma di Gestione dei Corsi per il Consulente Tecnico Telematico

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO

Fondamenti di Informatica. Docenti: Prof. Luisa Gargano Prof. Adele Rescigno BENVENUTI!

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Soluzione dell esercizio del 2 Febbraio 2004

Office 2007 Lezione 08

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

OSSERVAZIONI TEORICHE Lezione n. 4

Codifica binaria dei numeri relativi

Funzioni in C. Violetta Lonati

Introduzione alla tecnica di Programmazione Dinamica

Introduzione al MATLAB c Parte 2

Complessità Computazionale

Invio SMS. DM Board ICS Invio SMS

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

PLIDA Progetto Lingua Italiana Dante Alighieri Certificazione di competenza in lingua italiana

LEZIONE: Pensiero Computazionale. Tempo della lezione: Minuti. - Tempo di preparazione: 15 Minuti.

Olga Scotti. Basi di Informatica. Excel

Fondamenti di Informatica T1

LABORATORIO DI INFORMATICA

Procedura di iscrizione alla Piattaforma On Line

Sistema operativo: Gestione della memoria

Descrizione di un algoritmo

Un gioco con tre dadi

Le Macchine di Turing

ANNO SCOLASTICO

Capitolo II. La forma del valore. 7. La duplice forma in cui si presenta la merce: naturale e di valore.

LA FORMAZIONE PROFESSIONALE

Guida Compilazione Piani di Studio on-line

Uso di base delle funzioni in Microsoft Excel

Tecniche di Prototipazione. Introduzione

10 - Programmare con gli Array

Office 2007 Lezione 02. Le operazioni più

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

PROGRAMMA SVOLTO NELLA SESSIONE N.

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Calcolo del Valore Attuale Netto (VAN)

Metodologie di programmazione in Fortran 90

Il database management system Access

Esempi di algoritmi. Lezione III

Metodologie Informatiche Applicate al Turismo

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

La valutazione nella didattica per competenze

Capitolo 2. Operazione di limite

Contabilità ordinaria, semplificata e altri regimi contabili

Introduzione. Informatica B. Daniele Loiacono

AA LA RICORSIONE

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base).

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi.

TECNOLOGIE INFORMATICHE DELLA COMUNICAZIONE ORE SETTIMANALI 2 TIPO DI PROVA PER GIUDIZIO SOSPESO PROVA DI LABORATORIO

Come valutare le caratteristiche aerobiche di ogni singolo atleta sul campo

PROGETTO EM.MA PRESIDIO

Informatica Generale

Транскрипт:

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 1/36 Introduzione al Corso di Algoritmi Di cosa parliamo oggi: Una discussione generale su cosa studieremo, perchè lo studeriemo, come lo studieremo,... Un esempio illustrativo di cosa studeriemo Informazione pratiche sul corso: - Modalità di esame (e come superarlo brillantemente) - Materiale didattico (libri di testo, materiale di supporto, esercizi di esame...) - Altro...

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 2/36 Corso di Algoritmi Obiettivi (ufficiali) del corso: Apprendere metodologie per il progetto ed analisi di algoritmi Di fatto, acquisiremo strumenti concettuali per la risoluzione di problemi. (Quali problemi? Di qualunque tipo...) Cosa studieremo? - Tecniche generali per lo sviluppo di algoritmi efficienti atti a risolvere problemi computazionali di interesse pratico - Strumenti per la valutazione degli algoritmi

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 3/36 Perchè studiare algoritmi? Tecniche algoritmiche permettono di risovere problemi importantissimi in Informatica (e ben oltre...) Trasmissione dati in Internet (come si gestisce in pratica il flusso di dati nei vari router della rete?) Ricerca nel WEB (come fà Google a trovare le informazioni nel WEB?) Bioinformatica (come il DNA determina le nostre caratteristiche?) Processi economici (come si gestiscono le aste on-line su Ebay?, come si effettua la compravendita di azioni su Internet?) Organizzazione di risorse e servizi (come si schedulano i voli delle aerolinee? Come si assegnano le frequenze nelle celle delle reti cellulari?)

E non lo dico solo io: Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 4/36

Anche il Corriere della Sera del 15/1/2012! Universita di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 5/36

...e se non siete ancora convinti dell utilità degli algoritmi, questo dovrebbe... Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 6/36

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 7/36 Iniziamo con un pó di storia... Il termine Algoritmo deriva dal matematico Persiano al-khwârizmî (c. 780-850), autore del testo Al-jabr w al-muqabâla (da cui anche il termine Algebra)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 8/36 Un altro pó di storia... Algoritmi di tipo numerico furono studiati da matematici babilonesi ed indiani piú di di 3000 anni fá. Algoritmi in uso fino a tempi recenti furono studiati dai matematici greci 500 anni a.c. Esempio: Algoritmo di Euclide per il Massimo Comun Divisore Esempio: Algoritmi geometrici (calcolo di tangenti, sezioni di angoli,...)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 9/36 Ma cos é un Algoritmo? Algoritmo: procedura computazionale che prende certi valori in input e produce i valori richiesti in output Algoritmo: strumento per risolvere un Problema Computazionale Il Problema computazionale (in forma generale o astratta) é definito da una relazione input/output Un algoritmo é quindi una procedure computazionale per ottenere la desiderata relazione input/output

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 10/36 Esempi di Problemi Computazionali Problema dell Ordinamento: Input: sequenza di numeri a 1,...,a n Output: una permutazione a 1,...,a n dell input tale che a 1... a n Algoritmo di Ordinamento: procedura che prende in input a 1,...,a n e produce in output a 1... a n

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 11/36 Esempi di Problemi Computazionali Problema della ricerca di un elemento: Input: Tabella A[1...n] ed elemento x Output: intero i, se x = A[i] per qualche indice i, un messaggio Non c é", altrimenti. Algoritmo di Ricerca: procedura che prende in input A[1...n] ed elemento x, e produce in output "i" se x = A[i], Non c è" altrimenti.

Dovrete avere la capacità di passare da tale problema concreto alla sua versione astratta (cioè l ordinamento) e quindi risolverlo con le tecniche che apprenderete in questo corso. Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 12/36 Nella vita reale raramente avrete a che fare con problemi astratti... Ciò che accadrà sarà che il vostro capo vi chiederà (ordinerà): Mi scriva un programma che elenchi i nostri fornitori in base ai loro tempi di consegna!

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 13/36 Abbiamo detto che studieremo Algoritmi Efficienti Cosa intendiamo per Algoritmi Efficienti? Algoritmi Efficienti = Algoritmi che usano "poche" risorse Risorse = Tempo e Spazio richiesto dall algoritmo per produrre l output Problema 1: Come misurare le risorse usate da un algoritmo? (Analisi degli algoritmi) Problema 2: Come progettare algoritmi che usano "poche" risorse? (Tecniche generali per il progetto di algoritmi) Lo vedremo...

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 14/36 Motivazioni Perché occuparci di algoritmi efficienti? Perchè algoritmi efficienti conducono a programmi efficienti Perchè programmi efficienti si vendono meglio... Perchè programmi efficienti fanno un miglior uso dell hardware Perchè programmatori che scrivono programmi efficienti sono piú richiesti...

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 15/36 Obiettivi Cosa otterrete da questo corso? Metodi e conoscenze per formulare modelli astratti da problemi pratici (Problemi Concreti Problemi Computazionali) Metodi e conoscenze per la progettazione di algoritmi efficienti per la risoluzione di problemi computazionali Metodi e conoscenze per analizzare l efficienza di algoritmi Un catalogo" di algoritmi efficienti, pronti per l uso, per la risoluzione dei piú comuni problemi computazionali

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 16/36 Esempio: Profitto Massimo in anni contigui Profitti della Ditta ACME-Corporation Anno 1 2 3 4 5 6 7 8 9 Profitto in M$ -3 2 1-4 5 2-1 3-1 Esempi: Tra gli anni 1 e 9 la Ditta ACME ha guadagnato 3+2+1 4+5+2 1+3 1 = 4 M$, tra gli anni 2 e 6 ha guadagnato 2+1 4+5+2 = 6 M$, tra gli anni 5 e 8 ACME ha guadagnato 5+2 1+3 = 9 M $ Il Problema del Profitto Massimo in anni contigui è quello di trovare l intervallo temporale in cui la Ditta ACME ha guadagnato di più (nel nostro esempio l intervallo (5, 8)).

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 17/36 Astrazione del Problema Input: un array di reali A[1...N], il profitto totale negli anni dall i-esimo allo j-esimo è V(i,j) = j x=i A[x]. Il Problema del Profitto Massimo in anni contigui (PMAC) è quello di trovare indici i j tali che Output: V(i,j) tale che i,j, vale che V(i,j ) V(i,j) i,j, vale che V(i,j ) V(i,j)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 18/36 Prima Soluzione: Forza Bruta Idea: Calcolare il valore V(i,j) per ogni coppia i j, e ritornare il valore massimo VMAX=A[1] for i = 1 to N do for j = i to N do % qui ci calcoliamo V = V(i,j) V = 0 for x = i to j do V = V +A[x] if V > VMAX then VMAX = V return VMAX Complessità dell algoritmo: Θ(N 3 ) (ci sono 3 for innestati, ciascheduno spazia su al piú N valori)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 19/36 Seconda Soluzione: Approccio Incrementale Idea: Non è necessario calcolare separatamente" ciascun V(i,j),ma possiamo usare il fatto che V(i,j) = j x=i A[x] = j 1 x=i VMAX=A[1] for i = 1 to N do V = 0 for j = i to N do % qui ci calcoliamo V(i,j) V = V +A[j] if V > VMAX then VMAX = V return VMAX A[x]+A[j] = V(i,j 1)+A[j]. Complessità dell algoritmo: Θ(N 2 ) (ci sono 2 for innestati, ciascheduno spazia su al piú N valori)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 20/36 Terza Soluzione: Divide-et-Impera Idea: Poni M = (N +1)/2. Il PMAC dell array A[1,...,N] deve necessariamente essere uno dei seguenti: S 1 : il PMAC dell array A[1,...,M], S 1 M M+1 oppure S 2 : il PMAC dell array A[M +1,...,N], M M+1 oppure é a "cavallo" di A[M], ovvero e A = A 1 A 2 A 1 A 2 M M+1 S 2

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 21/36 Esempio 1-5 4 2-7 3 6-1 2-4 7-10 2 6 1-3 In questo caso S 1 = [3,6] con valore 3+6 = 9, e S 2 = [2,6,1] con valore 2+6+1 = 9. 1-5 4 2-7 3 6-1 2-4 7-10 2 6 1-3 Ma abbiamo anche A 1 = [3,6,1], A 2 = [2, 4,7], con A = A 1 A 2 = [3,6,1,2, 4,7], di valore totale 3+6+1+2 4+7 = 13.

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 22/36 Dobbiamo quindi trovare S 1, S 2 e A... S 1 lo si trova determinando il PMAC di A[1...M], ovvero chiamando l algoritmo ricorsivamente sulla parte sinistra A[1...M] dell array A[1...N] S 2 lo si trova determinando il PMAC di A[M +1...N], ovvero chiamando l algoritmo ricorsivamente sulla parte destra A[M +1...N] dell array A[1...N] Come trovare A lo vediamo in un secondo... Il PMAC dell intero array A[1...N] sará quindi quel sottovettore che tra S 1, S 2, ed A, ha valore massimo.

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 23/36 Come trovare A: la fase di Conquer A 1 A 2 M M+1 i j A 1 é della forma A[i...M]: ci sono solo M N tali sequenze, tante quanti sono i corrispondenti valori di i,1 i M. Pertanto la sequenza contigua A 1 di valore massimo puó essere trovata usando al piú O(M) = O(N) operazioni. Analogamente, A 2 é della forma A[M +1...j]: ci sono solo N M N tali sequenze, tante quanti sono i corrispondenti valori di j,m j N. Pertanto la sequenza contigua A 2 di valore massimo puó essere trovata in O(N M) = O(N) operazioni. A = A 1 A 2 puó essere trovato in O(N) operazioni!

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 24/36 L Algoritmo Completo Divide-et-Impera Input: A[i...j], con i j PMAC(A,i,j) 1. if i = j return A[i] else 2. trova PMAC(A,i, (i+j)/2 ) 3. trova PMAC(A, (i+j)/2 +1,j) 4. trova PMAC che contiene sia A[ (i+j)/2 )] che A[ (i+j)/2 +1] 5. return il MASSIMO delle tre sequenze trovate Detto T(N) il numero di operazioni di PMAC(A,1,N), abbiamo: 1. richiede tempo O(1), 2. e 3. richiedono tempo T(N/2), 4. richiede tempo O(N), 5. richiede tempo O(1). T(N) = 2T(N/2)+O(N) T(N) = O(N logn)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 25/36 Analisi dell Algoritmo Divide-et-Impera Per semplificare l analisi, assumiamo che N = 2 h. I passi 4. e 5. dell algoritmo richiedono O(N) operazioni, ovvero richiedono un numero di operazioni cn, per qualche costante c. Quindi [ ] T(N) 2T(N/2)+cN 2 = 2 2 T(N/2 2 )+2cN 2 2 [ 2T(N/2 2 )+c N 2 +cn 2T(N/2 3 )+c N 2 2 ]+2cN = 2 3 T(N/2 3 )+3cN... 2 h T(N/2 h )+hcn Ponendo h = logn, si ha 2 h = 2 logn = N, e quindi T(N) NT(1)+(logN)cN = O(N logn)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 26/36 Abbiamo visto: Riassumendo... un algoritmo basato sulla generazione di tutte le possibili soluzioni, di complessitá O(N 3 ) un algoritmo basato sul riuso di dati precedentemente calcolati di complessitá O(N 2 ) un algoritmo basato su Divide-et-Impera di complessitá O(N logn)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 27/36 Ne é valsa la pena? Confrontiamo gli algoritmi su di un computer che esegue un milione di operazioni al secondo. Algoritmo 1 2 3 Tempo esecuzione N 3 N 2 N logn Tempo per risolvere un problema di taglia 10 2 1s 1/100s 0.00066438561s 10 3 16.67m 1s 0.00996578428s 10 4 277,78h 100s 0.13287712379s 10 5 31,69y 16,67m 1.66096404744s 10 6 31688,09y 277,78h 19.9315685693s

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 28/36 Morale della lezione Ne é valsa la pena Abbiamo visto che è possibile progettare algoritmi seguendo tecniche "generali" (forza bruta, divide-et impera,...) Abbiamo visto che è possibile analizzare e valutare algoritmi in base al numero di operazioni che essi compiono per produrre l output, in funzione della "taglia" dell input, e che questa analisi riflette il comportamento degli algoritmi in pratica

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 29/36 Circa PMAC: si può far meglio di O(N logn)? Si Esiste un algoritmo che risolve il Problema del Profitto Massimo in anni contigui in O(N) operazioni Però per oggi basta, trovatelo voi...

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 30/36 Informazioni sul corso Libro di testo: Jon Kleinberg ed Eva Tardos, Algorithm Design, Addison Wesley, 2005 Alla pagina WEB http://www.di.unisa.it/professori/uv/algo/algo.html apparirá tutto il materiale relativo al corso (copie delle slides usate, esercizi, date delle prove d esame, comunicazioni varie, etc.)

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 31/36 Informazioni pratiche sul corso In generale, le copie delle slide usate al corso compariranno in anticipo rispetto alla relativa lezione. É fortemente consigliato che le stampiate e le studiate (o almeno le leggiate...) prima della lezione.

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 32/36 Come superare l esame con buon voto? Seguire il corso Studiare lezione per lezione Studiare le slide anche prima della lezione Studiare anche dal libro di testo

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 33/36 Ma soprattutto... Fare tanti esercizi!

e dove li trovo gli esercizi, direte voi... Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 34/36

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 35/36 Promessa: Prometto che gli esercizi d esame li conoscerete in anticipo! ovvero, gli esercizi d esame saranno presi dalla lista di esercizi che saranno via via disponibili alla pagina http://www.dia.unisa.it/ uv/algo/algo.html

Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 36/36 Orario Lezioni e Ricevimento Lezioni: Lunedí ore 9:00 11:00, Aula F8, Mercoledí, ore 9:00 11:00, Aula F8 Controllare spesso la pagina WEB www.dia.unisa.it/professori/uv/algo/avvisi.html per eventuali cambiamenti all ultimo minuto di orari. Ricevimento: Lunedí e Mercoledí dopo la lezione