Saturday, November 22, 2008

Matematiche sconosciute (1.4)

La cosa interessante del metodo del contadino russo è il suo legame con la rappresentazione binaria dei numeri decimali.

Senza entrare troppo nello specifico possiamo dire che le divisioni continue per 2 del numero di sinistra altro non sono che il criterio per trasformare un numero decimale nel corrispondente in base 2. Prendiamo l'esempio iniziale 24*79. Per rappresentare 24 in base binaria se ne eseguono ripetute divisioni per 2; se il risultato della divisione è un numero intero si scrive a fianco 0 (il resto), se è un numero decimale si prende la parte intera del risultato e di fianco si riporta 1. Si prosegue sino ad arrivare a 0, di fianco a cui si scrive sempre 1. Vediamo meglio:

24/2 = 12, lascio 12, il resto è 0
12/2 = 6, lascio 6, il resto è 0
6/2 = 3, lascio 3, il resto è 0
3/2 = 1,5, scrivo 1, il resto è 1
1/2 = 0,5, scrivo 0, il resto è 1

La forma binaria di 24 è la sequenza di 0 e 1 letta dal basso verso l'alto, ovvero 11000. La trasformazione contraria, dal binario al decimale, si esegue moltiplicando ciascuna cifra di 11000 per le corrispondenti potenze di 2; la regola dice che se un numero binario ha n cifre, queste vanno moltiplicate per le potenze da 2^(n-1) a 2^0 (quest'ultima è sempre pari a 1); nel nostro caso:

1*2^4 + 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0 =
= 1*2^4 + 1*2^3 =
= 1*16 + 1*8 = 16 + 8 = 24

Il metodo del contadino russo esegue la trasformazione da base 10 a base 2 senza scrivere il numero binario ottenuto, il numero binario rimane cioè nascosto. Il metodo esegue anche la trasformazione inversa, e anche questa è nascosta: la moltiplicazione per le potenze di 2 è infatti affogata nella colonna di destra.
Questo algoritmo si basa infine sulla proprietà distributiva della moltiplicazione rispetto all'addizione secondo cui, dovendo moltiplicare a*b e sapendo che b = x + y + z, posso scrivere:

a*b = a*(x + y + z) =
= a*x + a*y + a*z

Dove a*x + a*y + a*z sono prodotti parziali.

Per riepilogare: il metodo del contadino russo trasforma il moltiplicando di sinistra (24) in un numero a base 2 di cui non scrive la rappresentazione; dato che nella fase di ritrasformazione in base 10 contano solo le cifre 1 il metodo richiede di ignorare i risultati pari delle divisioni sequenziali per 2 (quelli che appunto sono stati ottenuti senza resto e dunque determinano le cifre 0 del numero binario); la colonna di destra infine contiene i prodotti parziali costituiti dal moltiplicando di destra (79) e dagli esponenti in base 2 necessari a ritrasformare in base 10 il moltiplicando di sinistra (24).