Matematica Discreta II - Matematica e Informatica

annuncio pubblicitario
Matematica Discreta II
Lezione del giorno 19 novembre 2007
Algoritmo per le radici n-esime
Sia dato il numero naturale x e costruiamo un algoritmo che, dato in input x, calcoli la parte intera
della radice n-esima di x (ossia il più grande intero ≤ della radice n-esima di x), dove n>1 è un
naturale fissato.
Rappresentiamo x in base 2, e raggruppiamo le cifre binarie a blocchi di n cifre:
x = 12……k
dove ogni i è un blocco di n cifre binarie (aggiungiamo eventualmente degli zeri a sinistra per
rendere il blocco 1 di n cifre, e in ogni caso 10).
Si ha ovviamente 0i<2n per ogni i, essendo ogni i un blocco di n cifre binarie.
Escludiamo il caso banale in cui l’input x abbia non più di n cifre (nel qual caso il numero dei
blocchi è k=1) perché in tale caso si ha 2n>x quindi la parte intera della radice n-esima di x è 1.
Descriviamo il seguente algoritmo che genera 2 successioni di numeri interi 0:
yi , xi (con i=0,1,…,k)
1) Si pone y0=x0=r0=0
2) Per i=1,….,k si ripete il seguente blocco di istruzioni:
a) Si calcola la massima cifra binaria {0,1} tale che (2yi-1+)n2nxi-1+i
b) Si pone yi=2yi-1+, xi=2nxi-1+i
Alla fine l’algoritmo esce con output yk che come vedremo è la parte intera della radice n-esima di
x.
Esaminando l’algoritmo si vede che ad ogni iterazione nel passo 2) il numero x i si ottiene shiftando
verso sinistra il numero xi-1 di n cifre binarie e aggiungendo il blocco i : quindi, partendo dal
valore iniziale xi=0, è ovvio che alla fine del ciclo si avrà xk=12……k=x.
D’altro canto il numero yi si ottiene shiftando verso sinistra il numero yi-1 di 1 cifra binaria e
aggiungendo la cifra binaria  trovata nel passo a): quindi le cifre binarie  trovate nella iterazione
della a) sono proprio le cifre binarie dell’output yk .
Inoltre ad ogni iterazione, esaminando le istruzioni a),b), si nota che yinxi, e in particolare
yknxk=x.
Dimostriamo inoltre che per ogni i=1,2,…,k si ha:
(yi+1)n > xi
Ragioniamo per induzione (Ia forma).
Per i=1 è vero, perché il valore  nella a) è in questo caso =1 (in quanto (2y0+1)n=12nx0+1=1)
dunque y1=2y0+1=1, x1=2nx0+1=1 , 1n=11.
Supponiamolo vero per i-1, e dimostriamolo vero per i.
Dunque supponiamo che (yi-1+1)2 > xi-1 , e dimostriamo che (yi+1)n > xi .
Se nell’iterazione i-esima al passo a) il valore di  è 0 (quindi se (2yi-1+1)n>2nxi-1+i ) allora è ovvio
perché appunto (yi+1)n=(2yi-1+1)n>2nxi-1+i = xi .
Se invece il valore di  è 1, e se fosse per assurdo (yi+1)n  xi , si avrebbe:
(yi+1)n=(2yi-1+2)n=2n(yi-1+1)n xi=2nxi-1+i da cui:
2n[(yi-1+1)n-xi-1]  i
ed essendo per l’ipotesi induttiva (yi-1+1)n-xi-1>0, si avrebbe 2n i , in contraddizione con quanto
notato all’inizio.
In particolare per i=k si ottiene:
yknxk=x
(yk+1)n > xk=x
Dunque l’output yk è il più grande naturale tale che la sua potenza n-esima sia x , quindi yk è la
parte intera della radice n-esima dell’input x.
Scarica