Matematica Discreta - Matematica e Informatica

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-1S
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–22 = 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 (q10, 0<r1<b)
b=r1q2+r2 (q20, 0<r2<r1)
r1=r2q3+r3 (q30, 0<r3<r2)
.
.
.
rm-3=rm-2qm-1+rm-1 (qm-10, 0<rm-1<rm-2)
rm-2=rm-1qm+rm (qm0, 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+21):
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.