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) 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. somma i primi n interi: ( ( ( (1)+ 2) +3)+…+ n) for (i=1, i<=n, i++) somma=somma +i Es. Cerca il minimo tra A[0],…,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

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 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 Parte iniziale ordinata | parte da ordinare cerchiamo lelemento minimo nella parte non ordinata e lo scambiamo con il primo della parte non ordinata 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]

9 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 Parte iniziale ordinata | parte da ordinare cerchiamo lelemento minimo nella parte non ordinata e lo scambiamo con il primo della parte non ordinata 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] 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]

10 SELECTION SORT (algoritmo iterativo) Parte iniziale ordinata | parte 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] 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] 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]

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

12 SELECTION SORT (algoritmo iterativo) (1) for (i=0,i

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

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

15 Es. A=[40|30|20|10] i=0, small=0 j=1, A[1]=30

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

17 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

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

19 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

20 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

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.

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

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

25 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é

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

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

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

29 VALIDITA delle dimostrazioni per INDUZIONE Dim. per induzione S(n) vera, ogni n>a Base: S(a) vera Passo induttivo Minimo controesempio. Supponiamo S(n) falsa per qualche n. Sia b il più piccolo intero tale che S(b) falsa. Se b=a contraddiciamo la base. Quindi b>a. Essendo b-1>a ed avendo scelto b come il 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 lipotesi che S(b) è falsa. Quindi non può esistere un intero per cui laffermazione è falsa.

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

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

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

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 S(n)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

60 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