4. Algoritmi Numerici Fondamentali
|
|
- Federica Costa
- 5 anni fa
- Visualizzazioni
Transcript
1 4. Algoritmi Numerici Fondamentali Consideriamo adesso un algoritmo classico, per il calcolo del Massimo Comun Divisore (MCD) tra due numeri interi, n ed m: l'algoritmo di Euclide. Senza perdita di generalità, assumiamo n m > 0 e chiamiamo R il MCD. Possiamo descrivere l'algoritmo di Euclide in un linguaggio pseudo-naturale: Euclide(n,m) x n y m while x y do if x > y then x x - y else y y - x endif end R y All'algoritmo descritto sopra corrisponde il diagramma di flusso della Figura 16. Questo algoritmo ha un ciclo di natura diversa da quelli visti in precedenza, perchè non si sa quante volte il ciclo stesso venga eseguito. Consideriamo il ciclo dell'algoritmo e scriviamolo esplicitando un contatore k del numero di cicli eseguiti: 32 k x k-1, y k-1 x k, y k Otteniamo le seguenti condizioni: Asserzione iniziale: n m > 0 Condizione iniziale: x 0 = n, y 0 = m Condizione di terminazione: x t = y t per qualche t Invariante: MCD(x k, y k ) = MCD(n,m) Asserzione finale: R = MCD(x t, y t ) = MCD(n,m) In questo caso, non si sa a priori quante volte venga eseguito il ciclo, perchè non si sa quando la condizione che lo controlla diventi vera. Nella Tabella A riportiamo l'esecuzione dell'algoritmo per n = 40 ed m = 16. Tabella A k x y 0 (n =) 40 (m = ) La correttezza dell'algoritmo è dovuta alla seguente proprietà del MCD: Supponendo, senza restrizione, che n m, se R = MCD(n,m), allora:
2 33 (a) n = h 1 R, m = h 2 R (b) Non esiste un numero R' > R tale che per esso valgano le (a). n, m n m > 0 x <- n y <- m MCD(n,m) = MCD(x,y) x = y x y x = y x MCD(n,m) = n x < y x > y x > y y <- (y-x) x <- (x-y) y - x > 0 x - y > 0 Figura 16 Algoritmo di Euclide basato sulle differenze successive Consideriamo la differenza n - m = R (h 1 - h 2 ). Il numero (h 1 - h 2 ) è un numero intero e quindi R è anche un divisore della differenza (n - m). Inoltre, non esisterà un numero R' > R che goda dlla stessa proprietà, perchè non esiste né per n né per m. Quindi, il MCD di due numeri è anche il MCD di uno qualsiasi dei due e della loro differenza. L'Algoritmo di Euclide calcola il MCD tra due numeri riducendo iterativamente il calcolo a quello del MCD tra il minore dei due e la loro differenza. Consideriamo adesso la terminazione e la complessità dell'algoritmo. Abbiamo che: x 0 = n, y 0 = m Il ciclo viene ripetuto fino a che si raggiunge un t tale per cui x t = y t. Quindi, finchè è k < t, abbiamo: x k = if (x k-1 > y k-1 ) then (x k-1 - y k-1 ) else x k-1 y k = if (x k-1 < y k-1 ) then (y k-1 - x k-1 ) else y k-1 (9) Le (9) implicano che, ad ogni iterazione, la maggiore tra le due variabili y k e x k diminuisce. Quindi, essendo y k e x k sempre > 0, la loro differenza tende
3 34 necessariamente a 0, implicando l'esistenza di un t per cui x t = y t. Quindi il programma termina. Il ciclo viene quindi eseguito t volte e la complessità dell'algoritmo è data da: C(n, m) = t = 4 (t + 1) = O(t) Quando m = 1, il ciclo di sottrazioni successive viene fatto tante volte quante sono le unità di n, perché ad ogni ciclo viene tolta 1 unità da x. Quindi, t n: C(n, m) = O(Max(n, m)) (10) L'Algoritmo di Euclide può essere modificato in modo da avere una complessità minore di quella lineare data dalla (10). Occorre introdurre l'operazione binaria mod : n mod m = Resto della divisione intera tra n e m (11) Per esempio, (12 mod 5) = 2, (23 mod 10) = 3. Osservando che il resto della divisione è il numero che rimane dopo aver tolto il divisore dal dividendo un numero di volte pari al quoziente intero, il ciclo dell'algoritmo di Euclide può essere trasformato sostituendo il mod alla sottrazione; di nuovo, senza restrizione, si può pensare che n m > 0. Euclide(n,m) while m 0 do z n n m m n mod m end R n Analizzando l'algoritmo in modo analogo al precedente, abbiamo: n k-1, m k-1 Asserzione iniziale: n m > 0 Condizione iniziale: n 0 = n, m 0 = m k Condizione di terminazione: m t = 0 Invariante: MCD(n k, m k ) = MCD(n,m) n k, m k Asserzione finale: R = MCD(n,m) Durante il ciclo, abbiamo le seguenti assegnazioni: n k = m k-1 m k = n k-1 mod m k-1 = m k-2 mod m k-1 (12) Usiamo adesso il seguente lemma: Lemma 1 Per ogni coppia di numeri interi (x, y), si ha: x mod y < x/2. Dimostrazione : Sappiamo che, per definizione, è x mod y < y. Consideriamo adesso due casi: (a) Se y x/2, allora, per la proprietà transitiva: x mod y < y x/2 e il lemma è vero. (b) Se x/2 < y < x, allora il quoziente di n/m sarà uguale a 1 e il resto non è altro che la differenza (x - y). Ma, se y > x/2, sarà (x - y) = x mod y < x/2. Quindi, in ogni caso possibile il lemma è vero. Usando il risultato del Lemma 1, dalla (12) abbiamo che: m k = n k-1 mod m k-1 = m k-2 mod m k-1 < m k-2 /2 (13) La (13) ci dice che il valore di m si dimezza (almeno) ogni due passi. Quindi, quando m 2t vale 1, si ha al più un ciclo solo da eseguire ancora. Otteniamo: k = 0 : m 0 = m, k = 2 : m 2 < m/2 1, k = 4 : m 4 < m/2 2,, k = 2 t : m 2t < m/2 t
4 35 La condizione di trminazione dice che deve essere: m/2 t = 1 2 t = m t = lg 2 m Quindi, la complessità dell'algoritmo di Euclide modificato è data da: C(n, m) = O(lg 2 min(n, m)) (14) La terminazione e la correttezza si dimostrano allo stesso modo che per l'algoritmo basato sulle differenze successive. Analizziamo ora un altro algoritmo classico, denominato Setacci di Eratostene, che genera tutti i numeri primi in sequenza crescente. L'algoritmo associa ad ogni numero primo p j (j 1) un "setaccio" σ j, attraverso le cui maglie "cadono" i numeri che sono multipli di p j : p 1 = 2 p 2 = 3 p 3 = 5 p j. p k Viene esaminata la sequenza dei numeri interi dispari (quelli pari non sono primi) e dalla sequenza vengono eliminati tutti i numeri che non sono primi. L'idea dell'algoritmo è quella di far passare i numeri sopra tutti i setacci generati fino a quel momento; se il numero non cade in alcuno dei setacci, allora è il prossimo primo. Nella Figura 17 è riportato il diagramma di flusso. p 1 = 2, p 2 = 3, k = 2 n = 3 p 1 Sqrt(3) p j Sqrt(n) primo(n) j = 1 p k Sqrt(n) primo(n) j = j + 1 p j Sqrt(n) and (n mod p j 0) n = n + 2 primo(n ) p j > Sqrt(n) primo(n) k = k + 1 p k = n n mod p j 0 p k = n primo(n) Figura 17 Algoritmo dei Setacci di Eratostene, per la generazione dei numeri primi.
5 36 L'algoritmo presenta due cicli annidati, il più esterno dei quali non termina, perchè deve trovare tutti i primi. Quello più interno, invece, deve terminare per ogni valore di n. Nell'algoritmo, k denota il numero di primi già trovati al momento in cui si esamina n. Quindi, i primi presenti saranno quelli da p 1 a p k. Osserviamo che il ciclo interno si può fermare per due motivi: (a) Il numero n cade in un setaccio ( n è multiplo di un p j ) (b) Si sono esaminati tutti i primi utili. Questi primi sono quelli che vanno da p 1 a un primo p t tale che p t [ ], ma p t+1 > [ ]. In altre parole basta esaminare quei primi che non superano. La ragione di questo risiede nel fatto che il numero n, se non è primo, cade nel setaccio che corrisponde al più piccolo dei suoi divisori. Sia p il più piccolo divisore di n; allora esisterà un altro intero divisore r, tale che, per definizione di divisibilità, soddisfa la relazione: n = p r (15) Ma p è il più piccolo divisore di n, quindi: r p. Sostituendo nella (15), otteniamo: n = p r p p = p 2 -> p Essendo p intero, sarà alla fine: p [ ]. Consideriamo lo schema dei due cicli, per calcolare gli invarianti. n i-1, k i-1 i j 2 p i-1 p j n i, k i Ciclo esterno n 0 = 3, k 0 = 1 Il ciclo non termina n i = n k i = if (n i-1 è primo) then (k i-1 + 1) else k i-1 Ciclo interno p 1 = 2, k 1 = 1 Il ciclo termina per un t tale che p t [ ] e p t+1 > [ ] p j = next-prime(p j-1 ) Terminazione del ciclo interno Siccome ad ogni iterazione p j aumenta, perchè la sequenza dei primi è strettamente crescente, e siccome n 1-1 è costante nel ciclo, esiste sicuramente un numero t tale che la condizione di terminazione diventa vera. Correttezza Dobbiamo dimostrare che l'algoritmo trova tutti e soli i primi esistenti. Osserviamo subito che l'algoritmo non può perdere un numero primo. Infatti, sia p il numero primo perso: in questo caso, p deve essere stato trovato non primo e quindi eliminato dalla sequenza dei numeri dispari, essendo caduto in un setaccio. Questo è impossibile, perchè, non esistendo alcun divisore di p, p non può cadere in alcun setaccio. D'altra parte, potrebbe accadere che un numero n non primo sia dichiarato primo. Questo errore potrebbe verificarsi se, al momento di esaminare n, non fossero stati trovati tutti i setacci occorrenti, e cioè se p k < p t [ ]. Facciamo vedere che questo non è possibile usando il principio di induzione (Ricordiamo che p k è l'ultimo primo trovato).
6 37 Passo base: B 0 -> Quando si esamina n 0 = 3, è k = 1, p 1 = 2 > Ipotesi induttiva: Hp : Per tutti i valori dell'indice del ciclo fino a (i-1), vale la relazione p k(i-1)+1 > [ ], essendo p k(i-1) l'ultimo primo trovato quando si esamina n i-1. Tesi da dimostrare: Ts : Si ha p k(i)+1 > [ ]. Si ha la relazione n i = n i Quindi, [ ] [ ] + 1. D'altra parte, per quanto riguarda i primi trovati, essi non cambiano se n i-1 non è primo. In questo caso, sarà ancora p k(i)+1 = p k(i-1)+1 [ ], perchè n i non può richiedere un ulteriore primo per la sua analisi, non essendoci due primi che differiscono di meno di due unità (tranne che per 2 e 3, caso che viene esaminato direttamente). Se n i-1 è primo, si ha k(i) = k(i-1) e quindi p k(i)+1 p k(i-1) [ ]. Quindi, l'algoritmo è corretto. Complessità Per quanto riguarda la complessità, consideriamo la Figura 16. L'algoritmo ha una complessità sostanzialmente dipendente dai due cicli annidati. Dato che il ciclo esterno non si ferma, per valutare la complessità, assumiamo che si vogliano trovare i primi non superiori a un numero N (dispari). Quindi, il ciclo esterno è ripetuto (N-1)/2 volte. Per ogni ripetizione, cui è associato il valore n, si fanno un massimo di t confronti tra n e i setacci, con p t+1 > [ ]. Questi confronti si fanno tutti quando n è primo, ma se ne possono fare di meno quando n non è primo. Siccome cerchiamo la massima complessità (quella del caso peggiore), possiamo dire che vengono fatti sempre t(n) confronti. Ma t(n) è il numero di primi non superiori a [ ]. Siccome vale la relazione: avremo che: (Numero di primi M) ~ per ogni M (16) t(n) ~ La complessità sarà dunque: C(N) = = O(N 3/2 /lnn) Nell'Esempio 25 avevamo introdotto un algoritmo per il calcolo della potenza y = x n, che era lineare con n. Vogliamo adesso vedere se c'è un algoritmo più efficiente di quello. Se la potenza n = 2p e un numero pari, possiamo scrivere: x n = x 2p = x p * x p (17) Per calcolare x n occorre fare n = 2p moltiplicazioni, ma usando la (17) e memorizzando x p, basta farne (p + 1 ). Se p è ancora un numero pari, possiamo ripetere il procedimento. Quindi se n è una potenza di 2, cioè n = 2 m posso scrivere l'algoritmo di Figura 18. Analizziamo l'algoritmo. Sia k la variabile che denota il numero di ripetizioni del ciclo. Avremo: Asserzione inziale: base 0 = x, esp 0 = n Asserzione finale: esp t = 1 per un certo t base k = base k-1 * base k-1 ; esp k = esp k-1 /2
7 38 x, n (x 0) (n = 2 m ) (m 0) esp = n base = x (x n = base esp ) (esp = 2 q ) (q 0) esp = 1 base (esp = 2 q ) (q > 0) base = base * base (x n = base esp/2 ) esp = esp/2 Figura 18 Calcolo della potenza x n. Avremo quindi: base 0 = x esp 0 = n base 1 = base 0 * base 0 = x 2 esp 1 = esp 0 / 2 = n/2 base 2 = base 1 * base 1 = (x 2 ) 2 = x 4 esp 2 = esp 1 / 2 = n/4.. base k = base k-1 * base k-1 = (x 2 ) 2 = x 2k esp k = esp k-1 / 2 = n/2 k Quando ci si ferma, si deve avere: esp t = n/2 t = 1 t = lg 2 n Quindi, il programma termina, perchè esp diminuisce ad ogni ciclo, pur restando positivo. Quando k = t = lg 2 n, il programma fornisce l'output: base t = x 2t = x 2 lg2n = x n Quindi l'algoritmo è corretto. Per quanto riguarda la complessità, essa dipende dal numero di volte che il ciclo viene eseguito: C (n) = O(t) = O(lg 2 n). Qundo n non è una potenza di 2, in particolare se n è dispari, si può scrivere n = 2p +1 e possiamo scrivere x n = x (2p+1) = x * x (2p) e quindi applicare il procedimento visto per gli n pari al passo successivo, ottenendo l'algoritmo di Figura 19. Analizziamo il ciclo e dimostriamo che la formula x n = (ris base esp ) (esp 0) è l invariante. base k-1, esp k-1, ris k-1 Condizione iniziale: base 0 = x, esp 0 = n, ris 0 = 1 Condizione finale: esp t = 0 per un certo t k base k-1, esp k-1, ris k-1
8 39 Inoltre: base k = if (esp k-1 è pari) then( base k-1 ) 2 else base k-1 esp k = if (esp k-1 è pari) then esp k-1 /2 else esp k-1 ris k = if (esp k-1 è pari) then ris k-1 else ris k-1 * base k-1 La prima volta che si entra nel ciclo, e cioè quando ris = 1, esp = n e base = x, l invariante è certamente vero. Supponiamo che lo sia dopo un certo numero di iterazioni e dimostriamo che lo è dopo una ulteriore iterazione, usando il principio di induzione matematica. Da esp 0 ed esp 0 deriviamo esp > 0. Nel caso in cui esp sia pari : ris (base esp = ris) (base base esp/2 ) (18) Dopo l assegnamento base base*base è vera l asserzione: (x n = ris) base esp/2 e quindi dopo l'assegnazione esp esp/2 ritrovo l invariante. Notiamo che nel caso in cui esp sia dispari, l equazione (18) non è vera. In questo caso sappiamo che: ris (base esp = ris) base base esp-1 Quindi, dopo l assegnamento ris ris * base ottengo l asserzione: (x n = ris) base esp-1 e dopo l assegnamento esp esp-1 ottengo di nuovo l'invariante. Inoltre, poichè n 0, il programma termina. Quindi all uscita del ciclo (cioè quando esp = 0) l invariante diventa: (x n = ris) (base 0 = ris) (1 = ris) che è esattamente l asserzione finale. Calcoliamo ora la complessità dell algoritmo. La complessità è dell ordine del numero dei cicli effettuati. Per prima cosa vediamo un esempio. Si consideri x 13. Con l algoritmo lineare si effettuano 13 cicli, mentre con questo algoritmo si effettuano cicli con esp = 13, esp = 12, esp = 6, esp = 3, esp = 2, esp = 1 (poi esp = 0 e si esce). Quindi si effettuano 6 cicli. Consideriamo l algoritmo in generale. Abbiamo visto che il caso migliore si ha quando l esponente n è una potenza di 2, diciamo 2 m. In questo caso si effettuano m cicli, e cioè un numero di cicli pari a log 2 n. Il caso peggiore si ha quando n è dispari, e tutte le volte che si sottrae 1 o si divide per 2 il numero risultante è ancora dispari. In questo caso n = 2 m - 1, per cui effettueremo (2 log 2 n) volte il ciclo. Quindi la complessità è O(log 2 n).
Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi
Lezione 4 Problemi trattabili e soluzioni sempre più efficienti Gianluca Rossi Trattabile o intrattabile? Consideriamo ora il problema, ben noto a tutti gli studenti a partire dalla scuola media, di calcolare
c A (a c = b) Le ipotesi che abbiamo ci dicono che esistono h, k A tali che:
Definizione 1. Dato un insieme A, un operazione su A è una applicazione da A A a valori in A. Definizione 2. Se A è un insieme con una operazione, dati a, b A diciamo che a divide b (e scriviamo a b) se
Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza
Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene
Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto
Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra
Due numeri naturali non nulli a, b tali che MCD(a,b) = 1 si dicono coprimi o relativamente primi.
MASSIMO COMUNE DIVISORE E ALGORITMO DI EUCLIDE L algoritmo di Euclide permette di calcolare il massimo comun divisore tra due numeri, anche se questi sono molto grandi, senza aver bisogno di fattorizzarli
Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.
Pseudo codice Paolo Bison Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova Pseudo codice, Paolo Bison, A.A. 2003-04, 2003-09-30 p.1/38 Pseudo codice linguaggio testuale mix di linguaggio naturale
A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.
A.A. 2015-2016. CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5. Esercizio 5.1. Determinare le ultime tre cifre di n = 13 1625. (Suggerimento. Sfruttare il Teorema di Eulero-Fermat)
Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova
Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi
Calcolare x n = x x x (n volte)
Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile
3/10/ Divisibilità e massimo comun divisore
MCD in N e Polinomi 3/10/2013 1 Divisibilità e massimo comun divisore 1.1 Divisibilità in N In questa sezione introdurremo il concetto di divisibilità e di massimo comun divisore di due numeri naturali
Diagrammi di flusso: forme
Il linguaggio C in breve Diagrammi di flusso: forme Inizio/ Fine Istruzione Input/ Output Cond C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 18/19 pag. 57 Il linguaggio C in breve if cond
4.5 Tempo di calcolo: introduzione.
4.5 Tempo di calcolo: introduzione. Perché un programma o sottoprogramma sia una soluzione accettabile di un problema, non basta che sia corretto rispetto alla specifica del problema; occorre anche che
Tutti i numeri qui considerati sono interi. Se si tratta in particolare di numeri Naturali (quindi non negativi) verrà specificato.
LICEO B. RUSSELL A.S. 2010/2011 DALLA TEORIA DEI NUMERI ALLE CONGRUENZE Tutti i numeri qui considerati sono interi. Se si tratta in particolare di numeri Naturali (quindi non negativi) verrà specificato.
Monomi L insieme dei monomi
Monomi 10 10.1 L insieme dei monomi Definizione 10.1. Un espressione letterale in cui numeri e lettere sono legati dalla sola moltiplicazione si chiama monomio. Esempio 10.1. L espressione nelle due variabili
Appunti sui Codici di Reed Muller. Giovanni Barbarino
Appunti sui Codici di Reed Muller Giovanni Barbarino Capitolo 1 Codici di Reed-Muller I codici di Reed-Muller sono codici lineari su F q legati alle valutazioni dei polinomi sullo spazio affine. Per semplicità
Appunti di Teoria dei numeri e algebra modulare
Appunti di Teoria dei numeri e algebra modulare 29 novembre 2013 0.1 Equazioni di II grado Le soluzioni dell equazione ax 2 + bx + c = 0 con b 2 4ac 0 sono Tra le soluzioni valgono le relazioni x 1,2 =
Esercizi di Algebra. 25 marzo Soluzione Si tratta di trovare una soluzione del sistema di equazioni congruenziali
Esercizi di Algebra 25 marzo 2010 1. Soluzione Si tratta di trovare una soluzione del sistema di equazioni congruenziali X 2 mod 5 X 3 mod 7 X 7 mod 9, che sia prossima a 1000. Dalla prima equazione abbiamo
Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3
Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2007/08 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it 12 ottobre 2010 1 Vero o falso? Per ciascuna delle seguenti affermazioni, dire se è vera o falsa, fornendo una dimostrazione:
PREPARAZIONE ALLE GARE DI MATEMATICA - CORSO BASE
Liceo Scientifico Gullace PREPARAZIONE ALLE GARE DI MATEMATICA - CORSO BASE Aritmetica 014-15 1 Lezione 1 DIVISIBILITÀ, PRIMI E FATTORIZZAZIONE Definizioni DIVISIBILITÀ': dati due interi a e b, diciamo
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio
Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Il problema di fondo Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Algoritmi
Istituzioni di Matematiche (V): Seconda Prova Parziale, 13 Gennaio 2015 (versione 1)
Istituzioni di Matematiche (V): Seconda Prova Parziale, 13 Gennaio 015 (versione 1) Nome e Cognome: Numero di matricola: Esercizio 1 Esercizio Esercizio 3 Esercizio 4 Esercizio 5 Totale 4 6 6 8 6 Tutte
Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»
Linguaggio Testuale E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato» Delle volte viene chiamato metalinguaggio, e l algoritmo scritto tramite
Giovanna Carnovale. October 18, Divisibilità e massimo comun divisore
MCD in N e Polinomi Giovanna Carnovale October 18, 2011 1 Divisibilità e massimo comun divisore 1.1 Divisibilità in N In questa sezione introdurremo il concetto di divisibilità e di massimo comun divisore
Aritmetica sui numeri interi
CHAPTER 1 Aritmetica sui numeri interi L insieme dei numeri naturali N è certamente l insieme numerico più familiare. Non consideriamo lo zero 0 come elemento dell insieme N; non è stata infatti naturale
Informatica
Informatica 2019-06-24 Nota: Scrivete su tutti i fogli nome e matricola. Esercizio 1. Si forniscano le regole della semantica delle espressioni di IMP, e si enunci il risultato di determinismo per tale
Lezione 4: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive (2p) Venerdì 7 Ottobre 2009
Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria Meccanica & Ingegneria Gestionale Mat. Pari Docente : Ing. Secondulfo Giovanni Anno Accademico 2009-2010 Lezione 4: La
Ottimizzazione dei Sistemi Complessi
1 Giovedì 2 Marzo 2017 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR Pseudo-code del metodo Fermi-Metropolis Input: x 0, 0, min, maxit k 0, x x 0, 0 while k maxit and min do k k + 1, x x
Esercizi di Algebra. 3 aprile 2006
Esercizi di Algebra 3 aprile 2006 1 Sia n 2 un intero (a) Trovare due interi a b > 0 tali che siano richiesti 5 passi dell algoritmo euclideo per stabilire che MCD(a, b) = n (b) Trovare due interi x n,
Elementi di Algebra e di Matematica Discreta Numeri interi, divisibilità, numerazione in base n
Elementi di Algebra e di Matematica Discreta Numeri interi, divisibilità, numerazione in base n Cristina Turrini UNIMI - 2016/2017 Cristina Turrini (UNIMI - 2016/2017) Elementi di Algebra e di Matematica
Nozioni di base (II Parte)
Nozioni di base (II Parte) 1 Ricorsione [GTG14, Par. 5.1-5.4 and 13.1] Algoritmo Ricorsivo: algoritmo che invoca se stesso (su istanze sempre più piccole) sfruttando la nozione di induzione. La soluzione
Elezione di un leader in una rete ad anello
Elezione di un leader in una rete ad anello Corso di Algoritmi Distribuiti Prof. Roberto De Prisco Lezione n a cura di Rosanna Cassino e Sergio Di Martino Introduzione In questa lezione viene presentato
m = a k n k + + a 1 n + a 0 Tale scrittura si chiama rappresentazione del numero m in base n e si indica
G. Pareschi COMPLEMENTI ED ESEMPI SUI NUMERI INTERI. 1. Divisione con resto di numeri interi 1.1. Divisione con resto. Per evitare fraintendimenti nel caso in cui il numero a del Teorema 0.4 sia negativo,
Fondamenti di Informatica A. A. 2018/19
Fondamenti di Informatica Prof. Marco Lombardi A. A. 2018/19 AlgoBuild: Strutture Iterative e Selettive OUTLINE Blocco condizionale (Struttura selettiva IF - IF/ELSE) Esempi Cicli a condizione iniziale
Aritmetica. Divisibilità e numeri primi
Aritmetica Indicheremo con N l insieme dei numeri naturali 0, 1, 2,... e con Z l insieme dei numeri interi..., 2, 1, 0, 1, 2,.... Divisibilità e numeri primi Def 1 Dati due numeri interi a, b, diciamo
Istruzioni di controllo: SEQUENZA
Istruzioni di controllo: SEQUENZA Negli esempi visti in precedenza gli algoritmi sono stati descritti come sequenze di passi elementari del tipo Passo 1. azione 1 Passo 2. azione 2... Abbiamo utilizzato
Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)
Problemi e algoritmi Il che cosa e il come Il che cosa ed il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come
Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.
Analisi asintotica Vittorio Maniezzo University of Bologna Analisi asintotica Obiettivo: semplificare l analisi del consumo di risorse di un algoritmo prescindendo dai dettagli implementativi o di altro
Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come
Problemi e algoritmi Il che cosa e il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come effettuare un calcolo
Strutture di controllo iterative
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione Problema Scrivere un programma che acquisisca da standard input un intero
Sviluppo di programmi
Sviluppo di programmi FASE 1: Dare un nome al problema partendo dall analisi del problema FASE 2: Scrivere la specifica funzionale FASE 3: Scrittura dell algoritmo FASE 3.1: Introduzione delle variabili
Progetto e analisi di algoritmi
Progetto e analisi di algoritmi Roberto Cordone DTI - Università degli Studi di Milano Polo Didattico e di Ricerca di Crema Tel. 0373 / 898089 E-mail: cordone@dti.unimi.it Ricevimento: su appuntamento
Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1
Scaletta Cenni di computabilità Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 23 27 novembre 2013
! Problemi, domande, risposte. ! Algoritmi che calcolano funzioni. ! Funzioni computabili e non. ! Problema = insieme di domande omogenee. !
Scaletta Cenni di computabilità Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 24 26 maggio 2015!
Dunque k vale all incirca log n: precisamente k = [log n] + 1.
Teoria Elementare dei Numeri Soluzioni Esercizi 1 Convenzione: Su questo foglio log n indica sempre il logaritmo in base 2 di n 1 Quante cifre binarie ha all incirca un numero intero n? Sol Scriviamo n
Il nano sulle spalle del gigante
Il nano sulle spalle del gigante il sottile legame che separa matematica e informatica Miriam Di Ianni Università di Roma Tor Vergata Cosa è un problema? Dal dizionario: In matematica e in altre scienze,
Piccolo teorema di Fermat
Piccolo teorema di Fermat Proposizione Siano x, y Z, p N, p primo. Allora (x + y) p x p + y p (mod p). Piccolo teorema di Fermat Proposizione Siano x, y Z, p N, p primo. Allora (x + y) p x p + y p (mod
Informatica
Informatica 2014-09-10 Nota: Scrivete su tutti i fogli nome e matricola. Esercizio 1. Si illustrino le differenze tra gli algoritmi di ricerca lineare e ricerca binaria su un vettore. Anche senza presentarli
Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base
Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile
METODI MATEMATICI PER L INFORMATICA
METODI MATEMATICI PER L INFORMATICA Tutorato Lezione 6 12/05/2016 Corso per matricole congrue a 1 Docente: Margherita Napoli Tutor: Amedeo Leo Induzione Esercizio 20 pagina 330 Mostrare che 3 n < n! se
Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi
Informatica Generale Andrea Corradini 13 - Gli algoritmi e la risoluzione di problemi Sommario Passi per la risoluzione di problemi Problemi di ricerca e ordinamento Algoritmi iterativi: la ricerca lineare
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di
liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA
INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE PROGRAMMAZIONE BIENNIO: SECONDA DISCIPLINA: INFORMATICA PIANO DI LAVORO DEL DOCENTE / RELAZIONE FINALE Anno scolastico 2014/2015 DOCENTE Prof. PAOLO ARMANI CLASSE:
In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.
In questa lezione Heap binario heapsort [CLRS10] cap. 6, par. 6.1-6.4!1 Heap binari Un heap binario è una struttura dati consistente di un array visto come un albero binario. A= 5 60 65 30 50 18 40 25
ANELLI EUCLIDEI E ANELLI A IDEALI PRINCIPALI. contrassegna gli esercizi (relativamente) più complessi.
ESERCIZI SU ANELLI EUCLIDEI E ANELLI A IDEALI PRINCIPALI N.B.: il simbolo contrassegna gli esercizi relativamente più complessi. 1 Sia A un anello commutativo unitario. Dimostrare che A è un campo A ha
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso
24 : 3 = 8 con resto 0 26 : 4 = 6 con resto 2
Dati due numeri naturali a e b, diremo che a è divisibile per b se la divisione a : b è esatta, cioè con resto 0. In questo caso diremo anche che b è un divisore di a. 24 : 3 = 8 con resto 0 26 : 4 = 6
1. Esistono numeri della forma , ottenuti cioè ripetendo le cifre 2006 un certo numero di volte, che siano quadrati perfetti?
1 Congruenze 1. Esistono numeri della forma 200620062006...2006, ottenuti cioè ripetendo le cifre 2006 un certo numero di volte, che siano quadrati perfetti? No, in quanto tutti questi numeri sono congrui
Elementi di Informatica
Elementi di Informatica Capitolo 6 Iterazione Prof. Mauro Gaspari: mauro.gaspari@unibo.it Assegnamenti multipli bruce = 5 print bruce, bruce = 7 print bruce Assegnamento e uguaglianza E' importante distinguere
2. Algoritmi e Programmi
12 2. Algoritmi e Programmi Dato un problema, per arrivare ad un programma che lo risolva dobbiamo: individuare di cosa dispongo: gli input; definire cosa voglio ottenere: gli output; trovare un metodo
A lezione sono stati presentati i seguenti passi per risolvere un problema:
Calcolo delle radici di un polinomio Problema: Dati i coefficienti a,b,c di un polinomio di 2 grado della forma: ax^2 + bx + c = 0, calcolare le radici. A lezione sono stati presentati i seguenti passi
10 STRUTTURE DI CONTROLLO REPEAT E WHILE. Strutture di controllo e variabili strutturate
LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 10 STRUTTURE DI CONTROLLO REPEAT E WHILE Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II
Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente
Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati
nota 1. Aritmetica sui numeri interi.
nota 1. Aritmetica sui numeri interi. Numeri interi. Numeri primi. L algoritmo di Euclide per il calcolo del mcd. Equazioni diofantee di primo grado. Congruenze. Il Teorema Cinese del Resto. 1 0. Numeri
Applicazioni dell Algoritmo di Euclide
Applicazioni dell Algoritmo di Euclide Applicazione dell Algoritmo di Euclide al calcolo del Massimo Comune Divisore tra due interi Mostriamo un esempio di come l algoritmo di Euclide permetta di calcolare
Definizione. Siano a, b Z. Si dice che a divide b se esiste un intero c Z tale che. b = ac.
0. Numeri interi. Sia Z = {..., 3, 2, 1, 0, 1, 2, 3,...} l insieme dei numeri interi e sia N = {1, 2, 3,...} il sottoinsieme dei numeri interi positivi. Sappiamo bene come addizionare, sottrarre e moltiplicare
Si imposti la relazione di ricorrenza che ne descrive la complessità e la si risolva utilizzando il metodo della sostituzione.
parte II - A 2 Si consideri la seguente funzione: analizzami(int n) c = 1 k = n*n while k > 1 do k = k/2 for i = 0 to 3 do if n >1 then analizzami(n/4) Si imposti la relazione di ricorrenza che ne descrive
For e do. Parte 4. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
Se d = 0, ogni numero naturale è suo divisore (con quoziente nullo) e 0 è multiplo solo di se stesso.
Illustrazione di tavola 2 La nozione di massimo comune divisore tra una coppia di numeri naturali viene meglio compresa, se è introdotta e studiata analizzandone il significato in connessione alle proprietà
Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi
Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Francesco Pasquale 6 maggio 2015 Esercizio 1. Su una strada rettilinea ci sono n case nelle posizioni 0 c 1 < c 2 < < c n. Bisogna installare
Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09
Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe
INSIEME N. L'insieme dei numeri naturali (N) è l'insieme dei numeri interi e positivi.
INSIEME N L'insieme dei numeri naturali (N) è l'insieme dei numeri interi e positivi. N = {0;1;2;3... Su tale insieme sono definite le 4 operazioni di base: l'addizione (o somma), la sottrazione, la moltiplicazione
Logica per la Programmazione
Logica per la Programmazione Lezione 14 Sistema di Dimostrazioni per le Triple di Hoare Comando Iterativo A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a. 2017/18 pag. 260 Semantica
Cosa si intende con stato
Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando
= < < < < < Matematica 1
NUMERI NATURALI N I numeri naturali sono: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,... L insieme dei numeri naturali è indicato con la lettera. Si ha cioè: N= 0,1,2,3,4,5,6,7,.... L insieme dei naturali privato
Parte I. Incontro del 6 dicembre 2011
Parte I Incontro del 6 dicembre 20 3 Notazioni Si suppone che il lettore sia familiare con le notazioni insiemistiche, in particolare con quelle che riguardano gli insiemi numerici: N = { 0,, 2, 3, } (numeri
For e do. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
For e do. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
nota 1. Aritmetica sui numeri interi.
nota 1. Aritmetica sui numeri interi. Numeri interi. Numeri primi. L algoritmo di Euclide per il calcolo del mcd. Equazioni diofantee di primo grado. Congruenze. Il Teorema Cinese del Resto. 1 0. Numeri
Sviluppo di programmi
Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla
Capitolo 5 Campi finiti
Capitolo 5 Campi finiti Definizione 5.1. Un campo finito K (cioè composto da un numero finito di elementi) si dice campo di Galois. Il numero dei suoi elementi si dice ordine e si denota con K. Un campo
CAPITOLO 1. I numeri naturali 0, 1, 2, 3,...
CAPITOLO 1 I numeri naturali I numeri naturali sono quelli che usiamo per contare: 0, 1,, 3,... e dei quali conosciamo alcune proprietà. Ad esempio sappiamo sommare e moltiplicare due numeri naturali;
Risposte non motivate non verranno giudicate
Istituzioni di Matematiche 12/01/2016 Ver.1 SECONDO PARZIALE Gli studenti della laurea quadriennale svolgono gli esercizi 1,2,3,5 e gli studenti della laurea quinquennale gli esercizi 1,2,3,4 1. 2. 3.
Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
Verifica di programmi
Verifica di programmi Informalmente, un programma è corretto se l output prodotto è quello atteso rispetto all input. La correttezza dei programmi può essere espressa mediante formule per la correttezza
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)
ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio
Un problema di programmazione dei lavori
Un problema di programmazione dei lavori Un lavoro unitario è un lavoro che richiede esattamente una unità di tempo per essere eseguito. Dato un insieme S di lavori unitari, una programmazione per S è
INFORMATICA. Strutture iterative
INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale
Algoritmi e Strutture Dati
Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli
TRIPLE DI HOARE: ESEMPI ED ESERCIZI. Corso di Logica per la Programmazione A.A. 2012/13
TRIPLE DI HOARE: ESEMPI ED ESERCIZI Corso di Logica per la Programmazione A.A. 2012/13 RICORDIAMO LA REGOLA PER IL COMANDO ITERATIVO P Inv def(e) Inv E Q Inv t 0 {Inv E} C {Inv def(e)} {P} while E do C
ELEMENTI DI LOGICA MATEMATICA LEZIONE VII
ELEMENTI DI LOGICA MATEMATICA LEZIONE VII MAURO DI NASSO In questa lezione introdurremo i numeri naturali, che sono forse gli oggetti matematici più importanti della matematica. Poiché stiamo lavorando
Esercizi sulla complessità di frammenti di pseudo-codice
Esercizi sulla complessità di frammenti di pseudo-codice Esercizio 1 Si determini la complessità temporale del seguente frammento di pseudo-codice in funzione di n. Il ciclo contiene solo istruzioni elementari;
Scaletta. Cenni di computabilità. Definizioni (1/2) Cosa fa un programma? Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1
Scaletta Cenni di computabilità Steano Mizzaro Dipartimento di matematica e inormatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 12a 12 novembre
Rappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
Appunti di informatica. Lezione 4 anno accademico 2015-2016 Mario Verdicchio
Appunti di informatica Lezione 4 anno accademico 2015-2016 Mario Verdicchio Numeri primi Si definisce primo un numero intero maggiore di 1 che ha due soli divisori: se stesso e 1 Esempi di numeri primi: