Progetto e analisi di algoritmi

Documenti analoghi
Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

Esercizi sugli Algoritmi numerici

PROGRAMMAZIONE STRUTTURATA

Programmazione I - corso B a.a prof. Viviana Bono

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Informatica Teorica. Macchine a registri

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 25/02/2016/ Foglio delle domande / VERSIONE 1

Algoritmi e Strutture Dati

Informatica e Bioinformatica: Algoritmi

Cosa si intende con stato

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Esercitazione 6. Array

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Grafi pesati Minimo albero ricoprente

Diagrammi a blocchi 1

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

Costrutti condizionali e iterativi

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

= < < < < < Matematica 1

Problemi, istanze, soluzioni

Algoritmi e soluzione di problemi

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Esercizi di Algoritmi e Strutture Dati

L'algoritmo di Euclide

Strutture di Controllo

PARTE III MACCHINE A REGISTRI

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

ALGORITMI. Obiettivo: risolvere problemi mediante l uso di un elaboratore elettronico. Elaboratore elettronico

Tempo e spazio di calcolo

Istruzioni iterative. Istruzioni iterative

1 Esercizi in pseudocodice

Analisi e Programmazione

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Istruzioni iterative (o cicliche)

Rappresentazione con i diagrammi di flusso (Flow - chart)

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Algoritmi e basi del C Struttura di un programma

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande / VERSIONE 1

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Mini-Corso di Informatica

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

Esercitazione 3. Espressioni booleane I comandi if-else e while

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI

Informatica, Algoritmi, Linguaggi

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

Algoritmi e Principi dell Informatica

LA METAFORA DELL UFFICIO

Algoritmi e Principi dell Informatica

Parte I - Concetti Base ESEMPIO

Corso di Informatica di Base

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Esempio: Problema 2 Il Progetto degli Algoritmi (Il linguaggio degli schemi a blocchi: seconda parte)

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

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

1.1 Concetti base dell Informatica: Algoritmi

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Informatica di Base - 6 c.f.u.

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

Cammini minimi fra tutte le coppie

Dall algoritmo al programma

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

11.4 Chiusura transitiva

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Le parole dell informatica: algoritmo e decidibilità

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire:

Corso di elettrotecnica Materiale didattico: i grafi

Matematica con Python

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

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

Lezione 5. La macchina universale

Grafi: visita generica

Zeri di funzioni e teorema di Sturm

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Aritmetica in Floating Point

Dispensa di Informatica II.1

Alberi binari di ricerca

Appunti ed esercizi su: La rappresentazione cartesiana di funzioni, equazioni, disequazioni

INSIEME N. L'insieme dei numeri naturali (N) è l'insieme dei numeri interi e positivi.

Marchini Marchini /Ferrari*(entra8.30) Marchini Marchini /Ferrari Marchini ITALIANO ITALIANO ITALIANO ITALIANO MATEMATICA

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

Cicli ed asserzioni. Ordinamento. Dato un intero positivo n ed una sequenza di n elementi a 1,...,a n

Algoritmi, linguaggi e programmi. Emilio Di Giacomo e Walter Didimo

ATTIVITÀ DEL SINGOLO DOCENTE

Programmazione strutturata

Heap e code di priorità

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

PROGRAMMA DI MATEMATICA CONTENUTI.

Corso di Fondamenti di Informatica

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Transcript:

Progetto e analisi di algoritmi Roberto Cordone DTI - Università degli Studi di Milano Polo Didattico e di Ricerca di Crema Tel. 0373 / 898089 E-mail: cordone@dti.unimi.it Ricevimento: su appuntamento Web page: http://www.dti.unimi.it/ cordone Lezioni: Martedì dalle 14.00 alle 16.00 Giovedì dalle 11.00 alle 13.00 Lezione 1: Algoritmi iterativi p.1/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 147 102 Come fareste voi? Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 147 102 Così fa l algoritmo di Euclide: a b = 45 min (a,b) = 102 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 45 102 Così fa l algoritmo di Euclide: a b = 57 min (a,b) = 45 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 45 57 Così fa l algoritmo di Euclide: a b = 12 min (a,b) = 45 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 45 12 Così fa l algoritmo di Euclide: a b = 33 min (a,b) = 12 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 33 12 Così fa l algoritmo di Euclide: a b = 21 min (a,b) = 12 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 21 12 Così fa l algoritmo di Euclide: a b = 9 min (a,b) = 12 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 9 12 Così fa l algoritmo di Euclide: a b = 3 min (a,b) = 9 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 9 3 Così fa l algoritmo di Euclide: a b = 6 min (a,b) = 3 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 6 3 Così fa l algoritmo di Euclide: a b = 3 min (a,b) = 3 Lezione 1: Algoritmi iterativi p.2/20

Massimo Comun Divisore Si voglia calcolare il MCD di due numeri interi a e b a b 3 3 Così fa l algoritmo di Euclide: MCD = a = b = 3! Riuscite a scriverlo? E chi ci dice che funziona? Lezione 1: Algoritmi iterativi p.2/20

Algoritmo di Euclide Sostituire al maggiore fra a e b la loro differenza Fermarsi quando a = b Il risultato è il MCD dei due numeri originari Ora stendetene lo pseudocodice (istruzioni strutturate in modo formale) senza dichiarazioni di tipo (quelle complesse vanno nel testo di accompagnamento) senza la gestione della memoria con le sole inizializzazioni essenziali per la correttezza Lezione 1: Algoritmi iterativi p.3/20

Algoritmo di Euclide Euclide(a, b) While a b do If a > b then a := a b; else b := b a; Return a; È una semplice struttura iterativa 1. continuare o fermarsi? 2. che fare? Lezione 1: Algoritmi iterativi p.4/20

Algoritmo di Euclide Euclide(a, b) While a b do If a > b then a := a b; else b := b a; Return a; È una semplice struttura iterativa 1. continuare o fermarsi? (condizione di arresto) 2. che fare? Lezione 1: Algoritmi iterativi p.4/20

Algoritmo di Euclide Euclide(a, b) While a b do If a > b then a := a b; else b := b a; Return a; È una semplice struttura iterativa 1. continuare o fermarsi? 2. che fare? (transizione di stato) Lezione 1: Algoritmi iterativi p.4/20

Ricerca in un vettore ordinato Si voglia determinare se un dato vettore A ordinato per valori crescenti contiene o no un dato numero x s = 1 d = 9 [ ] A = 2 4 21 24 28 31 32 47 93 [ ] A = 2 4 21 24 28 31 32 47 93 Come fareste voi? x = 24 Lezione 1: Algoritmi iterativi p.5/20

Ricerca in un vettore ordinato Si voglia determinare se un dato vettore A ordinato per valori crescenti contiene o no un dato numero x s = 1 m = 5 d = 9 [ ] A = 2 4 21 24 28 31 32 47 93 [ ] A = 2 4 21 24 28 31 32 47 93 x = 24 Così fa l algoritmo di ricerca binaria: m = (s + d) /2 = 5 e x A[m] A = A[s..m] = [2 4 21 24 28] Lezione 1: Algoritmi iterativi p.5/20

Ricerca in un vettore ordinato Si voglia determinare se un dato vettore A ordinato per valori crescenti contiene o no un dato numero x s = 1 m = 3 d = 5 [ A = 2 4 21 24 28 31 32 47 93 [ A = 2 4 21 24 28 31 32 47 93 ] ] x = 24 Così fa l algoritmo di ricerca binaria: m = (s + d) /2 = 3 e x > A[m] A = A[m + 1..d] = [24 28] Lezione 1: Algoritmi iterativi p.5/20

Ricerca in un vettore ordinato Si voglia determinare se un dato vettore A ordinato per valori crescenti contiene o no un dato numero x [ A = [ A = s = m = 4 d = 5 2 4 21 24 28 31 32 47 93 2 4 21 24 28 31 32 47 93 x = 24 ] ] Così fa l algoritmo di ricerca binaria: m = (s + d) /2 = 4 e x A[m] A = A[s..m] = [24] Lezione 1: Algoritmi iterativi p.5/20

Ricerca in un vettore ordinato Si voglia determinare se un dato vettore A ordinato per valori crescenti contiene o no un dato numero x [ A = [ A = s = m = d = 4 2 4 21 24 28 31 32 47 93 2 4 21 24 28 31 32 47 93 x = 24 ] ] Così fa l algoritmo di ricerca binaria: s = d e x = A[s] Il numero x compare in A! Lezione 1: Algoritmi iterativi p.5/20

Ricerca binaria RicercaBinaria(A, s, d) While s < d do m := s+d 2 ; If x A[m] then d := m; else s := m + 1; If s = d and x = A[s] then Return Sì else Return No; Lezione 1: Algoritmi iterativi p.6/20

Insertion Sort Si vogliano ordinare gli elementi di un dato vettore A per valori non decrescenti A = [ 5 2 8 4 7 1 3 6 ] Vi ricordate la procedura Insertion Sort? L01-ISort.pps Lezione 1: Algoritmi iterativi p.7/20

Insertion Sort InsertionSort(A, n) j := 2; While j n do x := A[j]; i := j 1; { Scala tutti gli elementi maggiori di A[j] } While i 1 and A[i] > x do A[i + 1] := A[i]; i := i 1; A[i + 1] := x { Inserisce il vecchio A[j] al posto giusto } j := j + 1; Return A; Ancora una struttura iterativa! Lezione 1: Algoritmi iterativi p.8/20

Algoritmi iterativi Gli algoritmi visti sinora hanno una struttura comune l algoritmo iterativo più elementare consiste in un ciclo (sequenza di istruzioni eseguita ripetutamente, sinché non diviene vera una condizione di arresto) B? E Generalizzando, il ciclo può contenere istruzioni condizionali e altri cicli essere preceduto e seguito da altre istruzioni Lezione 1: Algoritmi iterativi p.9/20

Algoritmi iterativi Gli algoritmi visti sinora hanno una struttura comune l algoritmo iterativo più elementare consiste in un ciclo (sequenza di istruzioni eseguita ripetutamente, sinché non diviene vera una condizione di arresto) B? E Generalizzando, il ciclo può contenere istruzioni condizionali e altri cicli essere preceduto e seguito da altre istruzioni Lezione 1: Algoritmi iterativi p.9/20

Algoritmi iterativi Gli algoritmi visti sinora hanno una struttura comune l algoritmo iterativo più elementare consiste in un ciclo (sequenza di istruzioni eseguita ripetutamente, sinché non diviene vera una condizione di arresto) B? E Generalizzando, il ciclo può contenere istruzioni condizionali e altri cicli essere preceduto e seguito da altre istruzioni Lezione 1: Algoritmi iterativi p.9/20

Algoritmi iterativi Gli algoritmi visti sinora hanno una struttura comune l algoritmo iterativo più elementare consiste in un ciclo (sequenza di istruzioni eseguita ripetutamente, sinché non diviene vera una condizione di arresto) B? E Generalizzando, il ciclo può contenere istruzioni condizionali e altri cicli essere preceduto e seguito da altre istruzioni Lezione 1: Algoritmi iterativi p.9/20

Obiettivi Come si fa a... 1.... ricordare facilmente un algoritmo iterativo? 2.... descrivere (bene) un algoritmo iterativo? 3.... implementare (bene) un algoritmo iterativo? 4.... verificare la correttezza e valutare la complessità di un algoritmo iterativo? 5.... progettare un nuovo algoritmo iterativo La risposta viene dal concetto di invariante di ciclo Lezione 1: Algoritmi iterativi p.10/20

La computazione Eseguire un algoritmo (computazione) significa far evolvere nel tempo lo stato della computazione, che è per noi, un insieme di oggetti matematici (numeri, simboli, grafi, relazioni... ) per una Macchina di Turing, lo stato dell automa più il contenuto del nastro e la posizione della testina per una Macchina RAM, il contenuto di tutti i registri più la posizione nel programma per un dispositivo fisico, lo stato dei suoi componenti (tensioni elettriche, posizioni di ingranaggi... ) Lezione 1: Algoritmi iterativi p.11/20

La computazione Progettare un algoritmo deterministico significa definire regole in base a cui lo stato al prossimo passo dipende solo da stato corrente ingresso (dati) Negli algoritmi non deterministici lo stato futuro può dipendere anche da altro (caso, responsi di oracoli, ecc... ) Alcuni stati godono di proprietà matematiche interessanti, altri no Alcuni passaggi da stato a stato richiedono regole semplici, altri regole molto complesse Lezione 1: Algoritmi iterativi p.12/20

Qualche concetto uno stato iniziale che contiene solo i dati del problema uno stato finale che contiene la soluzione del problema un insieme di stati ammissibili che godono di alcune delle proprietà dello stato finale una distanza dello stato corrente dallo stato finale, misurata quantitativamente in base alle proprietà dello stato finale di cui lo stato corrente non gode Lezione 1: Algoritmi iterativi p.13/20

Algoritmi iterativi un passo iniziale che fa passare dallo stato iniziale a uno stato ammissibile un test di continuazione che verifica se la distanza dallo stato finale è positiva un passo iterativo (eseguito finché il test non fallisce) che 1. conserva le proprietà istituite nello stato iniziale 2. riduce di un fattore finito la distanza dallo stato finale un passo finale che estrae la soluzione dallo stato finale Invariante di ciclo è l insieme delle proprietà imposte nel passo iniziale e conservate nel passo iterativo Lezione 1: Algoritmi iterativi p.14/20

Algoritmi iterativi un passo iniziale che istituisce l invariante di ciclo un test di continuazione che verifica se la distanza è positiva un passo iterativo (eseguito finché il test non fallisce) che 1. conserva l invariante di ciclo 2. riduce di un fattore finito la distanza un passo finale che estrae la soluzione dallo stato finale L invariante di ciclo è un insieme di affermazioni che diventano vere dopo il passo iniziale se sono vere all inizio del passo iterativo, sono vere alla fine del passo iterativo Lezione 1: Algoritmi iterativi p.15/20

Invariante di Euclide Stato della computazione: due numeri a e b Invariante di ciclo: Il MCD di a e b coincide con quello dei due numeri dati All inizio: vale banalmente Alla fine: i due numeri coincidono fra loro e con la soluzione Si conserva perché: i divisori comuni fra a e b sono anche divisori di a b e a b non ha divisori più grandi... Distanza: la differenza tra i due numeri Lezione 1: Algoritmi iterativi p.16/20

Invariante per la ricerca binaria Stato della computazione: un vettore di interi e una chiave Invariante di ciclo: Se la chiave compare nel vettore originale, compare anche in quello corrente All inizio, vale banalmente Alla fine, il vettore contiene un solo elemento, da confrontare con la chiave Si conserva perché si scartano solo elementi diversi dalla chiave Distanza: il numero di elementi del vettore corrente Lezione 1: Algoritmi iterativi p.17/20

Invariante per Insertion Sort Stato della computazione: un vettore e un contatore j Invariante di ciclo: I primi j elementi del vettore sono gli stessi del vettore originario, e sono ordinati All inizio: vale banalmente (j = 1) Alla fine, la soluzione e il vettore Si conserva perché nessun elemento entra o esce dal sottovettore, e il nuovo elemento va in posizione ordinata Distanza: n j Lezione 1: Algoritmi iterativi p.18/20

Ricordare l algoritmo Conoscere l invariante di ciclo aiuta a ricordare lo pseudocodice perché 1. le istruzioni iniziali istituiscono l invariante 2. la condizione di arresto confronta la distanza con zero 3. le operazioni del ciclo conservano l invariante riducono la distanza dallo stato finale 4. le istruzioni finali raggiungono la soluzione dallo stato finale Lezione 1: Algoritmi iterativi p.19/20

Verificare la correttezza La dimostrazione di correttezza di un algoritmo iterativo mostra che 1. le istruzioni iniziali istituiscono l invariante 2. la condizione di arresto confronta la distanza con zero 3. le operazioni del ciclo conservano l invariante riducono la distanza dallo stato finale 4. le istruzioni finali raggiungono la soluzione dallo stato finale Spesso, la parte più complessa è la conservazione dell invariante Lezione 1: Algoritmi iterativi p.20/20