Tempo e spazio di calcolo (continua)

Documenti analoghi
Esempio : i numeri di Fibonacci

Heap e code di priorità

ADT Coda con priorità

Introduzione alla tecnica di Programmazione Dinamica

1 Definizione di sistema lineare omogeneo.

Algoritmi esponenziali

Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati

11.4 Chiusura transitiva

Rappresentazioni numeriche

Regola del partitore di tensione

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Algoritmi. Pagina 1 di 5

PROGRAMMAZIONE STRUTTURATA

Macchina RAM. Modelli di calcolo e metodologie di analisi. Linguaggio di una macchina RAM. Algoritmi e Strutture Dati. Istruzioni.

AA LA RICORSIONE

Corso di Laurea in Ingegneria Informatica Analisi Numerica

04 - Numeri Complessi

ESPONENZIALI E LOGARITMI. chiameremo logaritmica (e si legge il logaritmo in base a di c è uguale a b ).

Programmazione Ricorsione

Cifre significative delle misure di grandezze fisiche

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Ricorsione. (da lucidi di Marco Benedetti)

EQUAZIONI E GRAFICI con DERIVE. Gli errori di Derive EQUAZIONI

Corso di Calcolo Numerico

4 0 = 4 2 = 4 4 = 4 6 = 0.

I Grafi ad Albero..Strumenti per aiutare a ragionare

1 L estrazione di radice

Mini-Corso di Informatica

Esercizi Capitolo 6 - Alberi binari di ricerca

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

Alberi binari di ricerca

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy

Informatica B

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I)

Esercizi di Algoritmi e Strutture Dati

2. Risolvere con il metodo di eliminazione di Gauss con pivoting parziale il seguente sistema lineare:

Programma del corso di: Calcolo Numerico Corso di laurea in Matematica a.a Prof. B.Paternoster

AMBIENTE EXCEL CALCOLO DEL RESTO DELLA DIVISIONE FRA NATURALI

Le frazioni algebriche

Codice Gray. (versione Marzo 2007)

Definizione di metodi in Java

Unità Didattica realizzata dalla prof.ssa De Simone Marilena A.S. 2015/16

Linguaggi e Grammatiche Liberi da Contesto

= < < < < < Matematica 1

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Matematica con il foglio di calcolo

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Anno 3 Equazione dell'ellisse

I B+ Alberi. Sommario

Algoritmi e dintorni: La radice quadrata Prof. Ettore Limoli. Formule iterative

Esercizi Capitolo 2 - Analisi di Algoritmi

ESERCIZI IN PIÙ I NUMERI COMPLESSI

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

algebra: insiemi numerici N e Q +, proprietà operazioni e calcolo linguaggio degli insiemi

Anno 1. M.C.D. e m.c.m. fra monomi

UNIVERSITA DEGLI STUDI DI PERUGIA

Esercizi su algebra lineare, fattorizzazione LU e risoluzione di sistemi lineari

Esercitazioni di. LOGICA e MATEMATICA. per la preparazione della PROVA NAZIONALE INVALSI CLASSE PRIMA

Richiami di aritmetica(2)

MATRICI. 1. Esercizi

Algoritmi. Un tema centrale dell informatica è lo studio degli algoritmi.

ESERCIZI SVOLTI SUL CALCOLO INTEGRALE

Algoritmi (9 CFU) (A.A )

Appunti di Algoritmi e Strutture Dati. Alberto Carraro

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

RADICE QUADRATA:LA CRISI DEI PITAGORICI

PIANO DI LAVORO DEL DOCENTE prof. DIMONOPOLI A.S. 2013/2014 CLASSE 1ALS MATERIA: MATEMATICA

Individuazione di sottoproblemi

ANALISI DI SEGNALI TEMPO VARIANTI

Statistica inferenziale. La statistica inferenziale consente di verificare le ipotesi sulla popolazione a partire dai dati osservati sul campione.

Curricolo verticale MATEMATICA

Le tecniche di calcolo mentale rapido usano alcune proprietà delle operazioni. Le principali proprietà utilizzate sono: = = 2 3

La tabella dell addizione Completa la tabella e poi rispondi alle domande.

Esercizi svolti di aritmetica

Capitolo 11 Test chi-quadro

Unità frazionaria. 5 Da quanti gettoni è formato l intero?... Quanti gettoni hai colorato?...

per un altro; le più importanti sono quelle di seguito elencate.

FUNZIONI ELEMENTARI, DISEQUAZIONI, NUMERI REALI, PRINCIPIO DI INDUZIONE Esercizi risolti

Anno 3. Funzioni esponenziali e logaritmi: le 4 operazioni

Allocazione Dinamica della Memoria

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Successioni ricorsive lineari

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Liceo scientifico Pascal Manerbio Esercizi di matematica per le vacanze estive

Esercizi sulla conversione tra unità di misura

Corso di Calcolo Numerico

Sistemi Web per il turismo - lezione 3 -

Richiami di aritmetica

Matematica finanziaria

4.1 Modelli di calcolo analisi asintotica e ricorrenze

APPLICAZIONI DELLE GRANDEZZE PROPORZIONALI. Problemi del tre semplice

LABORATORIO DI INFORMATICA

Transcript:

Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza e l efficienza Vogliamo progettare algoritmi che: Producano correttamente il risultato desiderato Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria Un esempio giocattolo : i numeri di Fibonacci Leonardo da Pisa (anche noto come Fibonacci) si interessò di molte cose, tra cui il seguente problema di dinamica delle popolazioni: Quanto velocemente si espanderebbe una popolazione di conigli sotto appropriate condizioni? In particolare, partendo da una coppia di conigli in un isola deserta, quante coppie si avrebbero nell anno n?

Le regole di riproduzione 1. Una coppia di conigli genera due coniglietti ogni anno 2. I conigli cominciano a riprodursi soltanto al secondo anno dopo la loro nascita 3. I conigli sono immortali L albero dei conigli La riproduzione dei conigli può essere descritta in un albero come segue: La regola di espansione Nell anno n, ci sono tutte le coppie dell anno precedente, e una nuova coppia di conigli per ogni coppia presente due anni prima Indicando con F n il numero di coppie dell anno n, abbiamo la seguente relazione di ricorrenza: F n = F n-1 + F n-2 se n 3 1 se n=1,2

Il problema Come calcoliamo F n? Un approccio numerico Possiamo usare una funzione matematica che calcoli direttamente i numeri di Fibonacci. Si può dimostrare che: dove: Algoritmo fibonacci1

fibonacci1 e Corretto? Qual è l accuratezza su Φ e Φˆ per ottenere un risultato corretto? Ad esempio, con 3 cifre decimali: n 3 16 18 fibonacci1(n) 1.99992 986.698 2583.1 arrotondamento 2 987 2583 F n 2 987 2584 Algoritmo fibonacci2 Poiché fibonacci1 non è corretto, un approccio alternativo consiste nell utilizzare direttamente la definizione ricorsiva: algoritmofibonacci2(intero n) intero if (n 2) then return 1 else return fibonacci2(n-1) + fibonacci2(n-2) che opera solo con numeri interi Tempo di esecuzione Calcoliamo il numero di operazioni primitive mandate in esecuzione (misura indipendente dalla piattaforma utilizzata) Se n 2: una sola operazione primitiva Se n=3: quattro operazioni primitive: due all inizio della chiamata fibonacci2(3), una per la chiamata fibonacci2(2) e una per la chiamata fibonacci2(1)

Relazione di ricorrenza In ogni chiamata non terminale si eseguono due operazioni primitive, oltre a quelle eseguite nelle chiamate ricorsive T(n) = 2 + T(n-1) + T(n-2) In generale, il tempo richiesto da un algoritmo ricorsivo è pari al tempo speso all interno della chiamata più il tempo speso nelle chiamate ricorsive Albero della ricorsione Utile per risolvere la relazione di ricorrenza Nodi corrispondenti alle chiamate ricorsive Figli di un nodo corrispondenti alle sottochiamate Calcolare T(n) Etichettando i nodi dell albero con il numero di linee di codice eseguite nella chiamata corrispondente: I nodi interni hanno etichetta 2 Le foglie hanno etichetta 1 Per calcolare T(n): Contiamo il numero di foglie Contiamo il numero di nodi interni

Calcolare T(n) Il numero di foglie dell albero della ricorsione di fibonacci2(n) è pari a F(n) Il numero di nodi interni di un albero in cui ogni nodo (non foglia) ha due figli è pari al numero di foglie -1 In totale le operazioni primitive eseguite sono F(n) + 2 (F(n)-1) = 3F(n)-2 Osservazioni fibonacci2 è un algoritmo lento: T(n) F(n) Φ n Possiamo fare di meglio? Algoritmo fibonacci3 Perché l algoritmo fibonacci2 è lento? Perché continua a ricalcolare ripetutamente la soluzione dello stesso sottoproblema. Memorizziamo allora (ad es. in un array) le soluzioni dei sottoproblemi! algoritmofibonacci3(intero n) intero sia Fib un array di n interi Fib[1] Fib[2] 1 for i = 3 to n do Fib[i] Fib[i-1] + Fib[i-2] return Fib[n]

Calcolo del tempo di esecuzione L algoritmo fibonacci3 impiega tempo proporzionale a n invece di esponenziale in n come fibonacci2 Tempo effettivo richiesto da implementazioni in C dei due algoritmi su piattaforme diverse: Occupazione di memoria Il tempo di esecuzione non è la sola risorsa di calcolo che ci interessa. Anche la quantità di memoria necessaria può essere cruciale. Se abbiamo un algoritmo lento, dovremo solo attendere più a lungo per ottenere il risultato Ma se un algoritmo richiede più spazio di quello a disposizione, non otterremo mai la soluzione, indipendentemente da quanto attendiamo Algoritmo fibonacci4 fibonacci3 usa un array di dimensione n In realtà non ci serve mantenere tutti i valori di F n precedenti, ma solo gli ultimi due, riducendo lo spazio a poche variabili in tutto: algoritmofibonacci4(intero n) intero a b 1 for i = 3 to n do c a+b a b b c return b

DOMANDA Possiamo sperare di calcolare F n in tempo inferiore a O(n)? Potenze ricorsive fibonacci4 non è il miglior algoritmo possibile E possibile dimostrare per induzione la seguente proprietà di matrici: 1 1 1 0 n = F n+1 F n F n F n-1 Useremo questa proprietà per progettare un algoritmo più efficiente Algoritmo fibonacci5 Il tempo di esecuzione è ancora O(n) Cosa abbiamo guadagnato? (o perso?)

Calcolo di potenze Possiamo calcolare la n-esima potenza elevando al quadrato la (n/2)-esima potenza Se n è dispari eseguiamo una ulteriore moltiplicazione Esempio: 3 2 =9 3 4 =(9) 2 =81 3 8 =(81) 2 =6561 Algoritmo fibonacci6 Tutto il tempo è speso nella procedura potenzadimatrice All interno della procedura si spende tempo costante Si esegue una chiamata ricorsiva con input n/2 L equazione di ricorrenza è pertanto: Come risolverla? Tempo di esecuzione T(n) = O(1) + T(n/2)

Metodo dell iterazione Risulta: T(n) kc + T(n/2 k ) Per k=log 2 n si ottiene T(n) c log 2 n + T(1) = O(log 2 n ) fibonacci6 è quindi esponenzialmente più veloce di fibonacci3! Riepilogo fibonacci2 fibonacci3 fibonacci4 fibonacci5 fibonacci6 Tempo di esecuzione O(2 n ) O(n) O(n) O(n) O(log n) Occupazione di memoria O(n) O(n) O(1) O(1) O(log n) ESERCIZIO Dimostrare la correttezza degli algoritmi considerati nei lucidi precedenti con il metodo delle asserzioni. ANNOTATE (SCRIVENDO SULLA STAMPA DEI LUCIDI) IL CODICE CON LE ASSERZIONI CHE NE DIMOSTRANO LA CORRETTEZZA. In questo modo vi sara piu facile seguire il ragionamento sulla loro complessita!!!

DOMANDA Possiamo costruire un algoritmo che sia migliore di fibonacci6? UN ALTRO ESERCIZIO Scrivete una versione iterativa dell algoritmo fibonacci6, che chiameremo fibonacci7, che abbia complessita in tempo O(log n) e complessita in spazio O(1). Suggerimento: ispiratevi all algoritmo Exp illustrato (da qualche parte) nei lucidi precedenti.