Avendo una “stringa alfanumerica con caratteri ASCII di 256 caratteri” (quindi lunghissima) e’ possibile convertirla in formato numerico attraverso un algoritmo. Tutti concordano,ma il problema e’ che il numero che si ottiene e’ molto grande in termini di cifre e quindi si discute sul fatto se tale numero (es.di 32 cifre) e’ possibile comprimerlo in un NUMERO corrispondente compreso tra “6 e al massimo di 13 cifre” e tale che il numero corrispondente se esiste in forma compressa puo’ poi essere RITRASFORMATO con lo stesso algoritmo nel numero piu’ grande e successivamente anche alla stringa di 256 caratteri alfanumerici. Esiste cioe’ la reversibilita’ bidirezionale tra stringa e numero compresso?

Abbiamo dei simboli alfanumerici, ma non viene specificato se si considerano
solo le lettere maiuscole o anche le minuscole. Premetto che lo standard
ASCII prevede 128 simboli e quello esteso (specifico per le diverse nazioni)
prende tutte le combinazioni di bit possibili in un byte per cui si arriva
a 256. Ovviamente gli amici che pongono la domanda sono interessati alla
crittografazione di messaggi e parlando di caratteri alfanumerici intendono
esattamente caratteri che appartengono all’insieme 0-9, A-Z più lo spazio,
tralasciando caratteri di punteggiatura, lettere accentate, e altri.

In base alle mie considerazioni ci troviamo di fronte a un insieme composto
di 36 simboli, e ad una lista di variabili appartenenti a questo insieme.
Per rappresentare 36 simboli sono più che sufficienti 6 bit (26
= 64). A questo punto è facile rendersi conto che la nostra stringa non
userà mai 2 bit per ogni carattere, da cui si deduce che una compattazione
dei bit porterebbe ad un risparmio del 25%(2/8) di spazio, riducendo la
nostra stringa da 256 a 192 byte. Questo ci porta alla conclusione che
un numero intero per rappresentare tale sequenza è calcolabile in termini
di 2(192*8) = 2.4103124…* 10462.

Il numero appena ottenuto non può essere compresso ulteriormente, se
non ricorrendo ad algoritmi come quello di Huffman, basato sulle frequenze
dei simboli, ma che prevedono una tabella di queste, che sia unica (non
calcolata sul messaggio specifico), e a disposizione sia del mittente
che del destinatario. In questo caso il livello di compressione ottenibile
dipende molto dal singolo messaggio e quantificabile solo statisticamente.
In realtà una tabella delle frequenze è significativa solo sul messaggio
originale, per cui il fatto di compattare i bit pregiudica la sua validità
e utilità.

Riassumendo possiamo dire che la compressione potrebbe essere effettuata,
applicando uno dei due sistemi, ma compattando con il primo saremo sicuri
di una compressione del 25%, rappresentabili con almeno 462 cifre, mentre
con il secondo la compressione è variabile, e in media si potrebbe aggirare
attorno al 50%, toccando punte dell’80 per cento per messaggi con una
grande presenza di lettere comuni come le ‘a’ o le ‘e’ (almeno in italiano),
e che ridurrebbero (in quest’ultimo caso molto fortunato) i 256 simboli
(2048 bit) a 52 byte che in cifre decimali diventano 2(52*8)=1.692303*10125.

Tutto quello che ho tentato di spiegare fin’ora si riferisce esclusivamente
ad una compressione dei dati, mentre è chiaro che l’autore della domanda
e i suoi amici, vogliano una tecnica matematica di compressione del numero
ottenibile con questi metodi. A riguardo non posso pronunciarmi, essendo
un problema fondamentalmente matematico, e che esula dalle mie conoscenze.
Comunque una compressione numerica penso che introduca necessariamente
una perdita di informazioni che porterebbe sicuramente ad una ricostruzione
del messaggio molto poco attendibile.