Newsgroup: it.scienza.informatica
Titolo: sviluppo di un algoritmo "generico"

Vorrei un aiuto sul seguente problema:
Ho una funzione che genera secondo un certo algoritmo una stringa
alfanumerica di 20 caratteri. 
Voglio convertirla in una stringa di 10 cifre, facendo in modo che sia
rispettata la biunivocita' (ovviamente! :-)
Ad esempio :
da  ASDFQWEVCXGJYKILUOJD  ----[un unico valore]----->   0123456789
allo stesso tempo da :
0123456789  -----[un'unica stringa]---->   ASDFQWEVCXGJYKILUOJD
Mi piacerebbe avere qualche indicazione dal punto di vista dello
sviluppo dell' algoritmo .
Quali sono i passi da compiere?
Grazie per l'attenzione
Moreno Mariani

 0123456789  -----[un'unica stringa]---->   ASDFQWEVCXGJYKILUOJD
Facendo un semplicissimo conto:
una stringa da 20 caratteri alfanumerici ha (10+26)^20 possibili valori.
una stringa da 10 caratteri numerici ha 10^10 possibili valori.
Credo proprio che in generale l'operazione possa considerarsi impossibile,
almeno secondo le specifiche che fornisci.
--
Alessandro Monti

 rispettata la biunivocita' (ovviamente! :-)
Perdona una domanda un po' cretina, ma il tuo algoritmo per generare la
stringa può generare solo un sottoinsieme delle stringhe ammisibili o tutte?
(Mi chiedevo come fai a rappresentare in modo univoco 36^20 elementi con
10^10 codici).
Se la risposta alla mia domanda è: No.
Perche' vuoi utilizzare un algoritmo genetico?
In quel caso dovresti definire una funzione di costo da minimizzare. Occhio,
"minimizzare", quindi anche volendo massimizzare la distanza tra due
stringhe diverse (che può essere formulato come problema di minimo),
potresti avere come risultato (ammissibile) che la distanza ottimale è zero.
Non è meglio definire una sorta di ordinamento (es. lessicografico) ed
assegnare i codici, oppure suddividere la stringa in campi?
Scusa se ti ho risposto con altre domande.
        Ciao, Marco

 rispettata la biunivocita' (ovviamente! :-)
Non è possibile rispettando la biunivocità (le combinazioni di 20 caratteri
sono molte di più di quelle di 10 cifre).
Dovresti descrivere meglio qual' è il tuo problema, perché sospetto che in
realtà ti serve qualche tipo di funzione hash.

 writes:
m> 
m> Voglio convertirla in una stringa di 10 cifre, facendo in modo che sia
m> rispettata la biunivocita' (ovviamente! :-)
in *generale* non è possibile mantenere la biunivocità, perchè ci sono
36^20 combinazioni di stringhe alfanumeriche e solo 10^10 combinazioni
numeriche.
In pratica  stai chiedendo  un compressore  in grado di  supportare un
rapporto 10^21 a 1 senza che si perda informazione, uno sproposito!
Se invece, la tua stringa da 20  caratteri ha un struttura particolare
e sai per certo che  le combinazioni possibili  sono al massimo 10^10,
allora si può fare qualcosa.
Ciao
Marco
 
-- 
Dio non e' morto!  E' vivo e sta autografando delle bibbie in libreria.

 Moreno Mariani
bisognerebbe ragionarci un po' sopra.
La cosa mi pare un po' assurda o per meglio dire troppo generica per
ottenere sempre la stessa compressione.
Su un articolo reperito da 
www.programmazione.it
, si parla del noto
algoritmo di Huffman.
In un esempio viene riportata la stringa "TESTATA" e tramite l'algoritmo
viene ridotta a 2 byte.
Ovviamente la stringa iniziale č di 7 byte ed il risultato finale č piů che
buono. Perň bisogna anche notare che la lettera T compare ben 3 volte e la A
2.
Insomma ecco perchč dico che il tuo caso č troppo generico.
Con questo ti saluto......ciao !!
Antonio Tarolla