La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1."— Transcript della presentazione:

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

2 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

3 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

4 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

5 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

6 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?

7 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.

8 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).

9 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:

10 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).

11 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

12 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.

13 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.

14 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

15 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

16 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?

17 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!

18 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

19 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?

20 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?

21 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!

22 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!

23 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

24 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]

25 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

26 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:

27 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

28 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

29 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.

30 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]

31 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

32 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

33 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

34 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

35 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

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

37 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)

38 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

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

40 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

41 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

42 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)

43 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:

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

45 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


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

Presentazioni simili


Annunci Google