AN FI 98-99 Iterazione&Invarianti Il ragionamento iterativo Gli invarianti di ciclo.

Slides:



Advertisements
Presentazioni simili
LE FUNZIONI REALI DI VARIABILE REALE
Advertisements

Unità G3 Algoritmi notevoli. Ordinamento Un insieme di dati {a0, a1, a2, …, an} si dice ordinato in ordine crescente se a0 a1 a2 a3 … an I dati sono generalmente.
Procedure e funzioni ricorsive
Iterazione Capitolo 17 febbraio 2004 Iterazione.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Sistemi di numerazione e codici
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
esponente del radicando
INFORMATICA Strutture iterative
Esempio : 2x+5=11-x è un’uguaglianza vera se x è uguale a 2.
PROGRAMMI DI RICERCA E ORDINAMENTO
Continuità delle funzioni. Funzione continua in un punto Sia y=f(x) una funzione definita in un intervallo, aperto o chiuso, e sia x 0 un punto interno.
Esercizi su alberi binari
1 Esempi di consistenza sui limiti Non consistente sui limiti, considera Z=2, poi X-3Y=10 Ma il dominio qui sotto e consistente sui limiti: Confrontare.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
CORSO DI PROGRAMMAZIONE II
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Esistono 10 tipi di persone al mondo: Quelli che conoscono il codice binario & Quelli che non lo conoscono.
Rappresentazione binaria dei numeri interi senza segno.
Esercizi su alberi binari
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Unità Didattica 1 Algoritmi
Il Linguaggio C.
Le funzioni a tempo di esecuzione
AN FI Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
AN FI Array Array in Java. AN FI Array Dichiarazione di array in Java [ ]; //oppure u [] ; int a[]; int[] a; u La dimensione non è specificata.
AN Fondam98 Sorting Ricerca in un vettore ordinato.
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
RAPPRESENTAZIONE DELL’INFORMAZIONE
LAPPROCCIO FUNZIONALE Obiettivo: esprimere la soluzione di un problema sotto forma di funzione. Quali funzioni primitive? Quali meccanismi di combinazione?
AN FI Un denominatoe comune Linguaggi di programmazione Un denominatore comune.
AN FI Array Collezioni di dati uniformi in tipo Array.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
RICORSIONE & ITERAZIONE
AN FI Array Collezioni di dati uniformi in tipo Array.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.

La divisione di un polinomio
Strutture dati elementari
Richiami di matematica DALLE POTENZE ALLA NOTAZIONE SCIENTIFICA
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
Array (ordinamento) CORDA – Informatica A. Ferrari.
NUMERI RELATIVI.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
4/25/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Un esempio con iteratore: le liste ordinate di interi.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Le quattro operazioni.
DISEQUAZIONI IRRAZIONALI
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
GLI ALGORITMI DI ORDINAMENTO
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
OPERAZIONI CON I MONOMI
MASSIMO COMUNE DENOMINATORE (M.C.D)
I sistemi di numerazione
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
La numerazione ottale. Il sistema di numerazione ottale ha ampio utilizzo in informatica E’ un sistema di numerazione posizionale La base è 8 Il sistema.
Definizioni Rappresentazione Operazioni Espressioni Esercizi
Iterazioni con controllo in testa:
Lezione n° 10 Algoritmo del Simplesso: - Coefficienti di costo ridotto - Condizioni di ottimalità - Test dei minimi rapporti - Cambio di base Lezioni di.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

AN FI Iterazione&Invarianti Il ragionamento iterativo Gli invarianti di ciclo

AN FI Iterazione&Invarianti Impostazione di soluzioni iterative si parte dallidea che la soluzione possa essere ottenuta in un numero finito di n passi computazionali; si inizializza una variabile (detta accumulatore ) con il valore della soluzione al passo iniziale si imposta un ragionamento del tipo: sapendo che al passo generico i laccumulatore esprime il valore corrente della soluzione, la soluzione al passo i+1 si ottiene modificando laccumulatore come segue ….. Se il passo i rappresenta il passo finale, allora il valore della soluzione coincide con il valore dellaccumulatore.

AN FI Iterazione&Invarianti Il calcolo di b k double power(double b, int k ){ return (k==0) ? 1 : //k>0 b * power(b,k-1); }

AN FI Iterazione&Invarianti b k : progetto iterativo si inizializza un accumulatore v al valore b, inteso come il valore di b i al passo i=1 ; sapendo che al passo generico i (i<k) v esprime il valore corrente b i della soluzione, la soluzione al passo i+1 si ottiene modificando laccumulatore in v*b. Se i=k, allora la soluzione e v.

AN FI Iterazione&Invarianti b k : versione iterativa double power( double b, int k ){ return (k==0) ? 1 : powerIt(b,k,b,1);} double powerIt(double b,int k, double v, int i ){ return (i==k) ? v : powerIt(b, k, v*b, i+1);}

AN FI Iterazione&Invarianti Invarianti di ciclo u una relazione sempre vera (ad ogni iterazione) b k =v*b k-i inizialmente v=b, i=1

AN FI Iterazione&Invarianti b k : linvariante double powerIt( double b, int k, double v, int i ){ return (i==k) ? // b k =v*b k-i and i=k => b k =v v : // b k =v* b k-i and i<k // b k =v* b * b k-(i+1) and i<k // Ponendov = v*b, i=i+1 // si riottiene b k =v* b k-i powerIt(b, k, v*b, i+1); }

AN FI Iterazione&Invarianti Progettare per invarianti b k b k = v k con v=b Se k=0, si ha b k =v 0 =b 0 = 1 Trasformazioni: b k = (v 2 ) k/2 se k pari b k = v*v k-1 se k dispari

AN FI Iterazione&Invarianti b k : una soluzione a complessita log 2 (k) boolean odd(int n){ return(n%2==1); } double exp(double b,int k){ return (k==0) ? 1 : ( odd(k) ) ? b*exp(b,k-1) : exp(b*b,k/2); }

AN FI Iterazione&Invarianti b k in log 2 (k) : versione iterativa b k = t*v n con v=b, t=1,n=k –Se n=0, si ha b k =t. b k = t*(v 2 ) n/2 se n pari b k = t*v*v n-1 se n dispari

AN FI Iterazione&Invarianti Progetto versione iterativa log 2 (k) double expIt(double b,int k,double t,double v,int n ){ //Calcolare b k sapendo che b k = t*v n. //Inizialmente e v=b, n=k,t=1. Se n=0, b k =t. return (n==0) ? t : //Se n dispari, si itera con t=t*v ed n=n-1 (odd(n)) ? expIt(b,k,t*v,v,n-1) : //Se n pari si itera con v=v 2 e n=n/2 expIt(b,k,t,v*v,n/2) u le variabili b,k non servono

AN FI Iterazione&Invarianti Codice double power( double b, int k ){ return (k==0) ? 1 : expIt(1,b,k); // b k = 1*b k } double expIt(double t, double v, int n){ //b k = t*v n return (n==0) ? t : (odd(n)) ? // b k =t*v*v n-1 expIt(t*v,v,n-1) : // b k = t*(v 2 ) n/2 expIt(t,v*v,n/2); }

AN FI Iterazione&Invarianti Un caso strano int MulNat( int a, int b ){ return MulNat(a,b,0); } int MulNat( int x, int y, int z ){ return(y == 0) ? z : MulNat(x*2,y/2,z+x*(y%2)); }

AN FI Iterazione&Invarianti Una diversa versione int MulNat( int x, int y, int z ){ return(y == 0) ? z : ( odd(y) ) ? MulNat(x >1,z+x) : MulNat(x >1,z); }

AN FI Iterazione&Invarianti La relazione di base y = Q * B + R u B intero positivo u Q=y/B (quoziente) u R=y%B(resto)

AN FI Iterazione&Invarianti La moltiplicazione disgregata p = x* y = x *(Q * B + R) = x*B*Q + x*R u pensando che x*R e x*B siano primitive, si deve calcolare x*Q

AN FI Iterazione&Invarianti Lalgoritmo ricorsivo (B=2) int MulNatR( int x, int y ){ return (y == 0) ? 0 : x*(y%2)+MulNatR(x*2, y/2); }

AN FI Iterazione&Invarianti Verso un invariante di ciclo p = x*y + z = con y=0 si ha: p = z p = x*B*Q + x*R + z inizialmente z=0

AN FI Iterazione&Invarianti Il caso B=2 p = x*2*Q + x*R + z essendo Q=y/2 e R=y%2 p = x*2*y/2 + x*y%2 + z Ponendo x=x*2, y=y/2 e z=z+x*(y%2) si riottiene la relazione di partenza p=x*y+z

AN FI Iterazione&Invarianti Il codice spiegato int MulNat(int x,int y,int z){ //a*b=x*y+z inizialmente x=a, y=b, z=0 return(y == 0) ? //a*b =x*y + z and y=0 => a*b=z z : //a*b = x*( y/2*2+y%2) + z = //x*2*(y/2) + x*(y%2) + z MulNat(x*2,y/2,z+x*(y%2)); }

AN FI Iterazione&Invarianti La rappresentazione binaria y%2=0 se y pari, y%2=1 se y dispari; x*2 si ottiene spostando la rappresentazione binaria di x di una posizione a sinistra; x/2 si ottiene spostando la rappresentazione binaria di x di una posizione a destra.

AN FI Iterazione&Invarianti Lalgoritmo per moltiplicare int MulNat( int x, int y, int z ){ //a*b = x * y + z inizialmente x=a, y=b, z = 0 return(y == 0) ? //a*b=x*y+z and y=0 => a*b=z Z : (odd(y))? //a*b=x*( y/2*2+y%2)+z and y dispari //a*b=x*2*y/2 + x*1 + z MulNat(x >1,z+x) : //a*b = x*( y/2*2+y%2) + z and y pari //a*b = x*2*y/2 + x*0 + z MulNat(x >1,z); }