Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Sottoprogrammi: funzioni e procedure
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Iterazione while – do while - for.
Procedure e funzioni ricorsive
3TC – 5/11/2010 Cicli while e do.. While Contatori e Totalizzatori.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Lez. 51 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Complessita'
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
INFORMATICA Strutture iterative
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Algoritmi e Dimostrazioni Stefano Berardi
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Iterazione enumerativa (for)
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Introduzione alla programmazione lll
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Gli algoritmi AA 2003/04 © Alberti Programmazione 2. Algoritmi.
Strutture di controllo in C -- Flow Chart --
AN FI Iterazione&Invarianti Il ragionamento iterativo Gli invarianti di ciclo.
Elementi di Informatica
Calcolo del Massimo Comun Divisore
Elementi di Informatica di base
Radix-Sort(A,d) // A[i] = cd...c2c1
Lezione 6 Strutture di controllo Il condizionale
Massimo Comun Divisore
Algoritmi e Strutture Dati
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 3 Complessità computazionale concreta Corso di Informatica 2 a.a. 2003/04 Lezione 3.
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Complessità di un algoritmo
IO E LA MATEMATICA PROCEDURALE
11/21/2014E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Array (ordinamento) CORDA – Informatica A. Ferrari.
3/31/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Complessità del problema Se non facciamo ipotesi sul tipo degli elementi della sequenza le uniche operazioni permesse sono confronti e assegnazioni. Problema.
Algoritmi e Strutture Dati Luciano Gualà
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Diagrammi a blocchi.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Quinta giornata Risolvere efficientemente un problema in P: ancora sulla sequenza di Fibonacci.
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione.
Strutture di controllo
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 6 – Invariante.
Algoritmi e Strutture Dati Luciano Gualà
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Transcript della presentazione:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Problema: 1.dati x, y, z, … così e così istanza

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Problema: 1.dati x, y, z, … così e così 2.trovare u, v, w.. tali che … criterio per riconoscere la risposta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Esempio (Massimo comun divisore: MCD). Dati due interi positivi non entrambi nulli n ed m, determinare un intero positivo k tale che: 1. k divide sia n che m; 2. per ogni divisore comune h di n ed m, h divide k. istanza criterio per riconoscere la risposta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Esempio (Ordinamento: Sorting) Dato un intero positivo n ed una sequenza di n elementi di un insieme A linearmente ordinato, trovare una permutazione  di ordine n tale che: istanza criterio per riconoscere la risposta

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Quindi un problema è una relazione (binaria) R, ossia una collezione di coppie Le cui istanze sono in R è sempre univoca?

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 La relazione R è: MCD: univoca, perché se k | h e h | k, allora h = k. Sorting: univoca solo se non ci sono ripetizioni. Ci sono due risposte per l’istanza 7, 5, 22, 5: anche se producono lo stesso 5, 5, 7, 22.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Algoritmo: è un metodo automatico di calcolo, che indica passo passo come ottenere un risultato (output) date certe informazioni di partenza (input).

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Un algoritmo è deterministico: se eseguito più volte sullo stesso input, fornisce sempre lo stesso output. Dunque ad ogni algoritmo possiamo associare una funzione input-output:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il “che cosa” ed il “come” Un algoritmo risolve un problema R se la su funzione input-output F associa una risposta ad ogni istanza di R: F sceglie una risposta per ogni istanza (ma le risposte possono essere più d’una se R non è univoca).

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Che cosa calcola un algoritmo? La risposta è una specifica dell’algoritmo. Vorrei calcolare valori con la proprietà  Posso farlo purché i dati soddisfino  Pre-condizione Post-condizione Sig. UtenteSig. Algoritmo

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Specifica di un algoritmo Pre-condizioni: ipotesi sull’ingresso Post-condizioni: proprietà dell’uscita Esempio: MCD (n, m) Pre: n, m interi positivi non entrambi nulli Post: ritorna k che divide sia n che m e t.c. per ogni divisore comune h di n ed m, h divide k.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Specifica di un algoritmo Pre-condizioni: ipotesi sull’ingresso Post-condizioni: proprietà dell’uscita Una pre-condizione  ed una post-condizione  definiscono una relazione: Se R è un problema ed R  P, allora ogni algortimo che soddisfi la specifica Pre. , Post. , risolve R.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ragionamenti su di un algoritmo Ragionare sulla specifica di un algoritmo data con pre e post-condizioni serve a: (a posteriori) verificare la correttezza dell’algoritmo (a priori) (re)-inventare un algoritmo a partire da un’idea circa la soluzione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Il metodo delle asserzioni (Floyd) Divisione (n, m) Pre. n  0, m > 0 Post. ritorna q, r t.c. n = m q + r, 0  r < m r  n q  0 while r  m do r  r  m q  q + 1 return q, r { n = m q + r, 0  r } { n = m (q+1) + r  m, 0  r  m} { n = m q + r, 0  r < m} Asserzioni: descrivono relazioni tra i valori delle variabili, che devono valere quando il controllo raggiunge un certo punto del codice

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Asserzioni per le iterazioni while y > 0 do { ??????? } z  z + x 2 y  y  1 Cosa mettere in un punto attraversato tante volte?

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Asserzioni per le iterazioni {x 1  x 2 = x 2  y + z} while y > 0 do {x 1  x 2 = x 2  y + z  y > 0} z  z + x 2 y  y  1 {x 1  x 2 = x 2  y + z  y = 0} {z = x 1  x 2 } Qualcosa che, pur cambiando i valori delle variabili, resti sempre vero!

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Asserzioni per le iterazioni {x 1  x 2 = x 2  y + z} while y > 0 do {x 1  x 2 = x 2  y + z  y > 0} z  z + x 2 y  y  1 {x 1  x 2 = x 2  y + z  y = 0} {z = x 1  x 2 } {  } while B do {   B} C {  } {    B} invariante

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Gli invarianti di ciclo invariante: asserzione vera prima di ogni esecuzione del corpo dell’iterazione l’invariante deve essere vero anche prima di entrare nel ciclo, dopo ogni esecuzione del corpo, all’uscita dal ciclo L’ invariante è unico?

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Gli invarianti di ciclo Un ciclo ha molti (infiniti) invarianti, per lo più triviali: {0 = 0} è invariante di ogni ciclo Qual è allora quello che mi serve?

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Gli invarianti di ciclo Un invariante è interessante se mi fa capire cosa avrà fatto il ciclo dopo la terminazione Quindi occorre che implichi la post-condizione del ciclo che desidero dimostrare Trovare un invariante senza conoscere l’idea su cui si basa l’algoritmo è una strada in salita!

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Come si inventa un ciclo? inizializzazione while condizione do corpo dell’iterazione Per scrivere l’inizializzazione si deve sapere cosa deve fare il ciclo 2.Per scrivere la condizione (guardia) si deve conoscere cosa farà il corpo L’ordine giusto è l’opposto!

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 La generica iterazione Per individuare correttamente l’invariante non ci si deve porre agli estremi (inizio o fine del ciclo) ma in un ideale punto medio: la generica iterazione

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione parte ordinata tutti gli el. di questa parte sono maggiori di quelli nella parte ordinata i indice del primo elemento della parte da ordinare Idea V [1..n]

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i Invariante V [1..n] V [1.. i  1] ordinato se x in V [i.. n] ed y in V [1.. i  1] allora x  y

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i Passo V [1..n] V [k] sia il minimo valore in V [i.. n] k Scambiando V[i] con V[k] l’invariante si mantiene con i  i + 1:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i Passo V [1..n] V [k] sia il minimo valore in V [i.. n] k Scambiando V[i] con V[k] l’invariante si mantiene con i  i + 1: V [1.. i] ordinato se x in V [i n] ed y in V [1.. i ] allora x  y

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i+1 Passo V [1..n] Inoltre la lunghezza della porzione ordinata è aumentata, mentre la lunghezza di quella da ordinare è diminuita

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i Guardia (test di controllo) V [1..n] L’iterazione deve proseguire fintanto che i < n.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione i = 1 Inizializzazione V [1..n] La parte già ordinata è vuota: V[1.. 0]

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione Pseudocodifica SelectSort (V) Pre. V[1..n] vettore di valori su un insieme linearmente ordinato (es. gli interi) Post. permuta sul posto gli elementi di V in ordine non decrescente i  1 while i < n do {inv. V[1..i  1] ordinato, gli el. in V[i..n] maggiorizzano quelli in V[1..i  1]} k  indice del minimo in V[i..n] scambia V[i] con V[k] i  i + 1

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione Codice C++ void SelectSort (int v[], int n) // post: ordina distruttivamente ed in // senso non decrescente v[0..n-1] { for (int i = 0; i < n; i++) // inv. v[0..i-1] ordinato, gli el.in v[i..n-1] // maggiorizzano quelli in v[0..i-1] { int k = IndiceDelMin (v, i, n); Scambia (v[i], v[k]); } C++: dichiarazioni nei blocchi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Ordinamento per selezione Codice C++ int IndiceDelMin (int v[], int i, int n) // pre: i < n, quindi v[i..n-1] non e' vuoto // post: ritorna l'indice del minimo in v[i..n-1] { int indmin = i; for(int j = i + 1; j < n; j++) if (v[j] < v[indmin]) indmin = j; return indmin; } void Scambia(int& a, int& b) // post: scambia distruttivamente i valori dei par. {int temp = a; a = b; b = temp; } C++: passaggio parametri per riferimento

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Accumulatori ed invarianti Quello iterativo è un metodo di calcolo incrementale: ci si avvicina al risultato un passo dopo l’altro Un accumulatore è una variabile il cui valore rappresenta l’approssimazione corrente L’invariante deve allora spiegare in che senso l’accumulatore approssima il risultato

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Accumulatori ed invarianti int Molt (int x, int n) // Pre. n intero positivo // Post. ritorna x  n { int z = 0, y = n; while (y > 0) {z = z + x; y = y  1; } return z; } 2 X 3 = A scuola: moltiplicandi e moltiplicatori

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Accumulatori ed invarianti z x  y z + x x  (y – 1 )

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Accumulatori ed invarianti int Molt (int x, int n) // Pre. n intero positivo // Post. ritorna x  n { int z = 0, y = n; while (y > 0) {z = z + x; y = y  1; } return z; } accumulatore contatore {inv. x  n = z + x  y} z + x  y = (z + x) + x  (y – 1)

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Moltiplicazione alla russa  56 div 2 raddoppio +++=+++= Risultato = somma val. della seconda colonna quando quelli sulla prima sono dispari

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Moltiplicazione alla russa

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Moltiplicazione alla russa int MoltRussa (int m, int n) // Pre. n, m interi positivi // Post. ritorna n  m { int a = n, b = m, z = 0; while (a > 0) {if (a % 2 == 1) z = z + b; a = a / 2; b = b + b; } return z; } {inv. n  m = z + a  b} contatore accumulatore

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Dimostrare proprietà di cicli (1) Divisione (n, m) Pre. n  0, m > 0 Post. ritorna q, r t.c. n = m q + r, 0  r < m r  n q  0 while r  m do r  r  n q  q + 1 return q, r { n = m q + r, 0  r < m} {inv. n = m q + r, 0  r } Come dimostrare che l’invarinte vale? Per induzione sul numero delle iterazioni

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Lo schema dell’induzione Una dimostrazione per induzione si suddivide in due parti: 1.Il caso di base: P(0) (ma potrebbe essere P(k), e allora la conlcusione sarebbe  n  k.P(n)) 2.Il passo induttivo: P(n)  P(n+1). L’ipotesi P(n) si chiama ipotesi induttiva. P(m)P(m) P(m-1)  …  P(0)

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Una dimostrazione per induzione Tesi: Base: P(0). Passo: P(n)  P(n+1). Per ipotesi induttiva quindi:

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Dimostrare proprietà di cicli (2) Base: Tesi: Passo: ipotesi induttiva

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Riassumendo La specifica (pre e post condizioni) definisce cosa fa una procedura (algoritmo) Le asserzioni sono un metodo per verificare la correttezza di un algoritmo Per trattare i cicli occorre individuare i loro invarianti Gli invarianti sono fondamentali per progettare o capire un ciclo La prova che un’asserzione è un invariante è per induzione