Matematica Discreta Lezione del giorno 29 aprile 2009 Il nostro obiettivo è quello di calcolare (nel caso peggiore) il numero di divisioni effettuate nell’algoritmo Euclideo, come funzione della “dimensione” dell’input (cioè del numero di cifre dell’input rappresentato in una base prefissata). A tale scopo ci serviremo di alcuni concetti preliminari. Seconda forma del principio di induzione. Ricordiamo il principio di induzione: Principio di induzione: se P(n) è un predicato nella variabile n (dove n varia fra i numeri naturali) e se sono vere le seguenti 2 ipotesi: a) P(1) è vero b) per ogni naturale k: P(k) vero P(k+1) vero allora P(n) è vero per ogni naturale n. Tale principio è detto anche Ia forma del principio di induzione, in quanto vi è un’altra formulazione che ora dimostreremo: IIa forma del principio di induzione: se P(n) è un predicato nella variabile n (dove n varia fra i numeri naturali) e se sono vere le seguenti 2 ipotesi: a) P(1) è vero b) per ogni naturale k>1: P(1), P(2), …., P(k-1) veri P(k) vero allora P(n) è vero per ogni naturale n. Dimostrazione: Per assurdo supponiamo che esista qualche numero naturale che rende falso il predicato P: dunque è non vuoto l’insieme S dei numeri naturali x tali che P(x) è falso. Applicando l’assioma del minimo, esisterà un minimo s in S (quindi in particolare P(s) è falso). Si ha s>1 (per l’ipotesi a)). Poiché s è il minimo in S, i numeri naturali 1,2,….,s-1 (che sono <s) non appartengono all’insieme S: 1,2,…,s-1S dunque P(1),P(2),…,P(s-1) sono veri, e da ciò segue che P(s) è vero (per l’ipotesi b)), (contraddizione perché P(s) è falso). Osservazione : esistono delle versioni del principio di induzione (Ia e IIa forma) in cui la variabile n non assume tutti i valori naturali ma solo quelli compresi fra 1,2,….,m (dove m è un naturale fissato). La tesi in questo caso è “P(n) è vero per ogni n=1,2,….,m”, e la dimostrazione è simile a quelle precedenti. Successione dei numeri di Fibonacci. La successione F0,F1,F2,F3,……. dei numeri di Fibonacci è la successione di numeri naturali definita nel modo seguente: F0=1; F1=1; per ogni indice n>1 Fn=Fn-1+Fn-2 (dunque, dall’indice n=2 in poi, ogni termine della successione si ottiene sommando i 2 termini che lo precedono). Quindi F2=F0+F1=2; F3= F1+F2=3, F4= F2+F3=5, F5= F3+F4=8 etc… Tale successione interviene in molti problemi combinatori, come nell’esempio che segue. Esempio. Per ogni naturale n, dimostriamo che il numero delle parole di lunghezza n sull’alfabeto {0,1} che non contengono 2 cifre consecutive =1 è il numero di Fibonacci Fn+1. Per dimostrare tale affermazione basta usare la IIa forma del principio di induzione. Per n=1 l’affermazione è banale: sono 2=F2 le parole in questione (le parole 0 e 1). Fissato k>1, supponiamo vera l’affermazione per i valori n=1,2,….,k-1 e dimostriamola vera per il valore n=k. Dunque la tesi è che il numero delle parole di lunghezza k sull’alfabeto {0,1} che non contengono 2 cifre consecutive =1 è il numero di Fibonacci Fk+1. Consideriamo una generica parola w di lunghezza k che non contiene 2 cifre consecutive =1. Distinguiamo 2 casi: 1) se l’ultima cifra di w è 1, la parola w si ottiene da una parola s di lunghezza k-2 (che non contiene 2 cifre consecutive =1) aggiungendo come penultima cifra 0 e come ultima cifra 1. Poiché per l’ipotesi induttiva l’affermazione è vera per n=k-2, il numero delle parole s é Fk-1, e quindi anche il numero di parole w è Fk-1 . 2) se l’ultima cifra di w è 0, la parola w si ottiene da una parola t di lunghezza k-1 (che non contiene 2 cifre consecutive =1) aggiungendo come ultima cifra 0. Poiché per l’ipotesi induttiva l’affermazione è vera per n=k-1, il numero delle parole t é Fk, e quindi anche il numero di parole w è Fk . In totale il numero delle parole w di lunghezza k che non contengono 2 cifre consecutive =1 si ottiene sommando quelle dei casi 1) e 2), ottenendo alla fine Fk+Fk-1=Fk+1 (tesi). Per esempio il numero delle parole di lunghezza 4 sull’alfabeto {0,1} che non contengono 2 cifre consecutive =1 è il numero di Fibonacci F4+1=F5=8 (in effetti tali 8 parole sono 0000, 0001, 0010, 0100, 1000, 1010, 0101, 1001). Il numero d’oro. Ricordiamo alcuni concetti geometrici: se AB è un segmento di estremi A,B è di lunghezza a (con a numero reale >0), si chiama parte aurea del segmento AB un segmento AC (dove C è un punto interno ad AB) tale che la lunghezza x di AC sia media proporzionale fra a e la lunghezza (a-x) del segmento CB. La lunghezza x della parte aurea AC di AB soddisfa dunque la proporzione: a : x = x : (a-x) da cui si ricava x2+ax-a2 = 0, e risolvendo l’equazione di 2° grado: x = a(-1 5 )/2 Essendo x la lunghezza di un segmento, si ha x>0, e l’unico valore accettabile è x = a(-1+ 5 )/2 (perché a(-1- 5 )/2 è <0) , da cui: a/x = 2/(-1+ 5 ) Moltiplicando numeratore e denominatore per 1+ 5 (per razionalizzare il denominatore) si ha: a/x = ( 5 +1)/2 1,61 (è il cosiddetto rapporto aureo o numero d’oro). Il concetto di parte aurea di un segmento ha molte applicazioni geometriche: per esempio il lato del decagono regolare ha la stessa lunghezza della parte aurea del raggio della circonferenza circonscritta. Se indica il numero d’oro, possiamo notare che , essendo x è soluzione di x 2+ax-a2 = 0, dividendo per x2 si ottiene che = a/x soddisfa l’identità: 1 + - 2 = 0 da cui: 2 = 1+ (*) Numero d’oro e successione di Fibonacci. Il numero d’oro ha una relazione con la successione dei numeri di Fibonacci Fn . Calcolando le potenze di base ad esponente naturale e confrontandole con alcuni valori di Fn, osserviamo che le potenze di base sembrano alternarsi con i numeri di Fibonacci : F1=1 < 1 1,61 < F2=2 < 2 2,6 < F3=3 < 3 4,2 < F4=5 e si può congetturare che si abbia : Fn < n < Fn +1 (**) per ogni numero naturale n. Possiamo dimostrare che ciò è vero, ragionando per induzione (IIa forma). Per n=1 abbiamo già notato che (**) è vero: F1=1 < 1 1,61 < F2=2 Fissato k>1, supponiamo vera l’affermazione (**) per n=1,….,k-1, e dimostriamola vero per n=k: dunque la tesi è che Fk < k < Fk +1 . Poiché (**) è per ipotesi vero in particolare per n=(k-1), n=(k-2), si ha: Fk-1 < k-1< Fk Fk-2 < k-2< Fk-1 da cui, sommando, si ha: Fk = Fk-1+Fk-2 < k–1 + k–2 < Fk+Fk-1 = Fk+1 Ma dalla (*) segue che: k–1 + k–2 = k–2(1+) = k–22 = k quindi la tesi. Abbiamo perciò dimostrato che la (**) é vera per ogni numero naturale n. Siano a,b numeri naturali e supponiamo a>b. Se m è il numero di divisioni successive nell’algoritmo Euclideo, utilizzato per calcolare il mcd(a,b), tali m divisioni sono schematizzate come al solito nel modo seguente: a=bq1+r1 (q10, 0<r1<b) b=r1q2+r2 (q20, 0<r2<r1) r1=r2q3+r3 (q30, 0<r3<r2) . . . rm-3=rm-2qm-1+rm-1 (qm-10, 0<rm-1<rm-2) rm-2=rm-1qm+rm (qm0, rm=0) (ricordiamo che l’ultima successione ha resto nullo, e si ha rm-1=mcd(a,b), perché mcd(a,b) è il resto della penultima divisione, l’ultima fra quelle con resto non nullo). Per costruzione si ha : a > b > r1 > r2 > …….. > rm-1 > 0=rm . Da ciò deduciamo che in particolare i quozienti qi sono tutti non nulli (se fosse per assurdo q1=0, dalla prima divisione di avrebbe a=r1 contraddizione; se fosse per assurdo q2=0, dalla seconda divisione di avrebbe b=r2 contraddizione etc….). Dunque tutti i quozienti qi sono 1. Poniamo per omogeneità r0=b (in modo che la prima divisione sia a=r0q1+r1) e dimostriamo che si ha: rm-n Fn per ogni numero naturale n=1,2,…..,m . Ragioniamo per induzione (IIa forma, nella versione limitata ai valori n=1,2,….,m di cui si è parlato sopra). Per n=1 si ha (essendo rm-1>0) : rm-1 1; ma F1=1, dunque rm-1 F1, dunque l’affermazione è vera per n=1. Fissato k>1, supponiamo che rm-n Fn sia vero per tutti gli n=1,2,…,k-1 e dimostriamolo vero per n=k: la tesi è dunque che rm-k Fk . Essendo per ipotesi vera l’affermazione in particolare per n=k-1, n=k-2, si ha: rm-k+1 Fk-1 , rm-k+2 Fk-2 Ricavando il resto rm-k dalla divisione numero m-k+2 si ha (tenendo conto che, come osservato sopra, il quoziente é qm-k+21): rm-k = rm-k+1qm-k+2+rm-k+2 rm-k+1+rm-k+2 Fk-1 + Fk-2 = Fk e si ha la tesi. Dunque è vero che: rm-n Fn per ogni numero naturale n=1,2,……,m . In particolare, per n=m, si ha b = r0 Fm , ma m-1 < Fm (per la proprietà già dimostrata che lega i numeri di Fibonacci alle potenze del numero d’oro ), dunque m-1 < b, ossia (estraendo il logaritmo in base 10): (m-1)log10 < log10b Poiché log10 0,206>1/5 si ottiene (m-1)/5 < (log10b) da cui (m-1)< 5(log10b) ossia: m < 5(log10b)+1 Se n è il numero di cifre nella rappresentazione dell’input b in base 10 sappiamo che : 10n-1 b< 10n e dunque log10b < n, da cui m < 5n+1, ed essendo m,n numeri naturali: m 5n. In pratica quindi il numero m di divisioni nell’algoritmo Euclideo non è superiore al quintuplo del numero di cifre (in base 10) dell’input b (dove b è individuato come il più piccolo dei numeri a,b di cui si sta calcolando il massimo comune divisore). Per esempio se il numero naturale a ha 1000 cifre in base 10, ed il numero naturale b ha 100 cifre in base 10, per calcolare il mcd(a,b) l’algoritmo Euclideo esegue al più 500 divisioni.