La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.

Presentazioni simili


Presentazione sul tema: "ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do."— Transcript della presentazione:

1 ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do while. Es. somma i primi n interi: ( ( ( (1)+ 2) +3)+…+ n) somma=0 somma=0+1=1 somma=1+2=3 … somma= somma + n somma=0 for (i=1, i<=n, i++) somma=somma +i

2 ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do while. Es. Cerca il minimo tra A[0],…,A[n-1] min=A[0] min=min{min, A[1]} min=min{min, A[2]} … min=min{min, A[n-1]} {min=A[0]; for (i=1, i

3 SORTING (Ordinamento) Ordinare una lista significa permutare gli elementi in modo da averli in ordine non decrescente da sinistra a destra lista iniziale (3,1,4,1,5,9,2,6,3)

4 SORTING (Ordinamento) Ordinare una lista significa permutare gli elementi in modo da averli in ordine non decrescente da sinistra a destra lista iniziale (3,1,4,1,5,9,2,6,3) lista ordinata (1,1,2,3,3,4,5,6,9) La lista ordinata contiene gli stessi elementi e conserva il numero di occorrenze di ogni valore

5 LISTA ORDINATA Date le variabili a e b, a b se e solo se il valore di a è minore di quello di b oppure a e b hanno lo stesso valore Una lista (a 0,a 1,…,a n-1 ) è ordinata (sorted) se a 0 a 1 … a n-1

6 LISTA ORDINATA Date le variabili a e b, a b sse il valore di a è minore di quello di b oppure a e b hanno lo stesso valore Una lista (a 0,a 1,…,a n-1 ) è ordinata (sorted) se a 0 a 1 … a n-1 SORTING (Ordinamento) Input: lista (a 0,a 1,…,a n-1 ) output: lista (b 0,b 1,…,b n-1 ) tale che 1. è una lista ordinata 2. è una permutazione della lista input, ogni elemento appare con la stessa molteplicità nelle due liste Es. (3,5,7,2,3,5) => (2,3,3,5,5,7)

7 SELECTION SORT (algoritmo iterativo) La lista da ordinare è contenuta in un array A di n interi. METODO. Iteriamo il seguente passo: larray A è diviso in 2 parti Parte iniziale ordinata | parte finale da ordinare cerchiamo lelemento minimo nella parte non ordinata e lo scambiamo con il primo della parte non ordinata

8 SELECTION SORT (algoritmo iterativo) La lista da ordinare è contenuta in un array A di n interi. METODO. Iteriamo il passo: larray A è diviso in 2 parti A= Parte iniziale ordinata | parte finale da ordinare cerchiamo lelemento minimo nella parte non ordinata e lo scambiamo con il primo elemento della parte non ord. I iterazione: A[0..n-1] non ordinato, cerca minimo di A[0..n-1] e scambialo con A[0]. Quindi: A[0] |A[1..n-1] Es: [5,2,1,3] => [1,2,5,3]

9 SELECTION SORT (algoritmo iterativo) Parte iniziale ordinata | parte finale da ordinare I iterazione: A[0..n-1] non ordinato, cerca minimo di A[0..n-1] e scambialo con A[0]. Quindi: A[0] |A[1..n-1] Es: [5,2,1,3] => [1,2,5,3] II iterazione: A[0] ordinato, A[1..n-1] non ordinato, cerca minimo di A[1..n-1] e scambialo con A[1]. Quindi: A[0]A[1] A[2..n-1] Es: [1,2,5,3] => [1,2,5,3]

10 SELECTION SORT (algoritmo iterativo) Parte iniziale ordinata | parte finale da ordinare generica iterazione: A[0..i-1] ordinato, A[i..n-1] non ordinato, cerca minimo di A[i..n-1] e scambialo con A[i]. Quindi: A[0..i] A[i+1..n-1] Per i=n-2: A[0..n-2] A[n-1]. ARRAY ORDINATO Es: [5,2,1,3] => [1,2,5,3] => [1,2,5,3] => [1,2,3,5] = =[1,2,3,5]

11 SELECTION SORT (algoritmo iterativo) (1) for (i=0,i<=n-2,i++) { (2) small=i /* variabile small rappresenta la prima occorrenza del minimo di A[i..n-1] */ (3) for (j=i+1, j

12 SELECTION SORT (algoritmo iterativo) (1) for (i=0,iA[small] Scambia A[0] e A[0] Risultato A[5|7] Es. A=[7|5] i=0, small=0 j=1, A[1]

13 Es. A=[40|30|20|10] i=0, small=0 j=1, A[1]=30A[small]=A[2]=20 Scambia A[1] e A[2] Risultato Parziale A=[10|20|30|40] i=2, small=2 j=3, A[3]=40>A[small]=A[2]=30 Scambia A[2] e A[2] Risultato A=[10|20|30|40] =[10|20|30|40] ordinato

14 Esercizi. Simulare lesecuzione del selection sort per i seguenti array: A=[6|8|14|17|23] A=[17|23|14|6|8] A=[23|17|14|6|6]

15 ORDINE LESSICOGRAFICO Possiamo ordinare ogni volta che esiste una relazione di minore ( < ). Ordina lessicografico: Dato un alfabeto A con un ordine sulle lettere (es. a

16 SORTING ON KEYS A volte vogliamo ordinare usando solo una parte specifica dei valori (KEY). Se abbiamo delle strutture possiamo ordinare su di un solo campo Es. type struct studente { int matricola; chararray nome int voto} possiamo ordinare secondo uno dei 3 campi. Se ordiniamo per matricola allora dobbiamo confrontare i campi matricola.Nel SelectionSort, A è un array di strutture e si hanno i confronti A[j].matricola < A[small].matricola

17 Dimostrazioni Affermazione (o proposizione): può essere vera o falsa Dimostrazione: Data una affermazione S(n), vogliamo dimostrare che essa è vera. Es. S(n): risulta Si vuole dimostrare che S(n) vale per ogni n > 1.

18 Dimostrazioni Es. S(n): è primo Si vuole dimostrare che S(n) vale per ogni n > 1. Proviamo per qualche valore p(1)=43 primo P(2)=47 primo P(3)=53 primo … P(20)=461 primo … P(39)=1601 primo VERA?

19 Dimostrazioni Es. S(n): è primo Si vuole dimostrare che S(n) vale per ogni n > 1. Proviamo per qualche valore p(1)=43 primo P(2)=47 primo P(3)=53 primo … P(20)=461 primo … P(39)=1601 primo P(40)=40x =41x41 FALSO!

20 Dimostrazioni Non possimo stabilire VERO provando per un numero finito di valori! Servono altri metodi Congettura di Goldbach (1742) S(n): n si può scrivere come somma di due primi S(n) vera per ogni n>2? S(n) vera per ogni n testato, ma non si conosce la risposta!

21 INDUZIONE Data una affermazione S(n), vogliamo dimostrare che essa vale per ogni intero n>a. Es. S(n): risulta Si vuole dimostrare che S(n) vale per ogni n > 1.

22 INDUZIONE Vogliamo dimostrare che S(n) vale per ogni intero n>a. Una dimostrazione per induzione consiste di 2 fasi 1.BASE INDUTTIVA. Si dimostra che laffermazione è vera per il primo valore, cioè S(a) è vera. 2.PASSO INDUTTIVO. Assumiamo che S(n-1) è vera e dimostriamo che allora anche S(n) è vera.

23 INDUZIONE 1.BASE INDUTTIVA. S(a) è vera. 2. PASSO INDUTTIVO. S(n-1) implica S(n) vera. Es. S(n): Si vuole dimostrare che S(n) vale per ogni n > 1. Base. S(1) è vera perché Passo. Ipotesi induttiva S(n-1): Si ha Quindi S(n) è vera.

24 INDUZIONE Esercizio. Dimostrare per induzione che la seguente affermazione S(n) è vera per ogni intero n>0. S(n):

25 VALIDITA delle dimostrazioni per INDUZIONE Dim. per induzione S(n) vera, ogni n>a Base: S(a) vera Passo induttivo Minimo controesempio. IPOTESI: S(n) falsa per qualche n. Sia b il più piccolo intero tale che S(b) falsa. DEDUCIAMO: Se b=a contraddiciamo la base. Quindi b>a. Essendo b-1>a e b = minimo intero per cui laffermazione è falsa, risulta S(b-1) vera Per il Passo Induttivo, se S(b-1) è vera allora anche S(b) è vera. Abbiamo una contraddizione con assunzione che S(b) falsa. Quindi lipotesi è sbagliata e non esiste un intero per cui laffermazione è falsa.

26 CORRETTEZZA DI PROGRAMMI Dato un programma (o frammento di programma) si vuole mostrare che il risultato è quello desiderato.

27 CORRETTEZZA DI PROGRAMMI Invariante di ciclo: proprietà vera ad ogni iterazione; al termine del ciclo fornisce il risultato desiderato.

28 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j

29 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j

30 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j S(n)

31 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j

32 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j A[small], small invariata A[small]=min A[i..k-2]=min A[i..k-1] ok!

33 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j

34 CORRETTEZZA DI PROGRAMMI (1)small=i; (2) for(j=i+1, j

35 CORRETTEZZA del SelectionSort (1)For (i=0,i

36 CORRETTEZZA del SelectionSort (1)For (i=0,i

37 CORRETTEZZA del SelectionSort (1)For (i=0,i0.

38 CORRETTEZZA del SelectionSort (1)For (i=0,i

39 CORRETTEZZA del SelectionSort For (i=0,i elemento A[0..m-1] A[m] Quindi elemento in A[m+1..n-1] > elemento in A[0..m] 2) vale per m.

40 CORRETTEZZA CICLI WHILE Possiamo nuovamente provare la correttezza per induzione sul numero di volte per cui il ciclo è stato eseguito. Però può non esistere variabile che conta numero di esecuzioni. Inoltre bisogna anche provare che il ciclo termina.

41 CORRETTEZZA CICLI WHILE (1)i=1; (2)s=0; (3)while (i

42 CORRETTEZZA CICLI WHILE (1)i=1; (2)s=0; (3)while (i

43 CORRETTEZZA CICLI WHILE (1)i=1; (2)s=0; (3)while (i

44 CORRETTEZZA CICLI WHILE (1)i=1; (2)s=0; (3)while (i


Scaricare ppt "ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do."

Presentazioni simili


Annunci Google