Newsgroup: it.comp.lang.delphi
Titolo: "Compressione" stringa in Delphi

Ciao,
ho una domanda,se č una cavolata non insultatemi.
  devo salvare una stringa nel registry limitato a 255 caratteri. La mia
stringa č leggermente piů lunga e vorrei evitare di spezzarla. č possibile
in qualche modo "comprimerla"?
  Ciao!

in qualche modo "comprimerla"?
In teoria si.. ma non dici quanto "piu' lunga" e' la tua stringa e quanti byte
uguali contiene. questo incide fortemente sulla compressione.
E poi, dovresti sempre controllare se il compresso e' >= 255 byte per farcelo
stare nella chiave, quindi non so se il metodo sia adatto.
A questo punto io sceglierei di memorizzare pezzetti di stream in chiavi
contigue del registro.. 
Ciao
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

[CUT]
La mia chiave ha la lunghezza fissa di 270 caratteri.
Ha molte ripetizioni contigue di carattere, ma effettivamente non è sicuro
che la compressione la porti a 255.
Grazie lo stresso
Ciao

Grazie lo stresso
Si, effettivamente sono un po' stressato... cmq :P


 [CUT]
Se hai solo le lettere, il numero massimo di valori è 26.
Per rappresentare 26 in binario bastano 5 bit.
Avresti quindi un risparmio di 3 bit per carattere.
Se hai anche i numeri da 26 si passa a 37 e ti servono 6 bit e avresti 
comunque un risparmio di 2 bit per carattere.
Magari ti basta.
Unico neo: la chiave, essendo compressa, non potrebbe essere modificata 
da regedit in modo diretto.
Il tutto ovviamente se ti serve *x forza* il registro....
-- 
Alberto Salvati
A NEAPOLITAN Delphi Developer who is studing c# and .net
"Dicette 'o pappece 'nfaccia 'a noce dammi 'o tiempo che pure te spertoso"

 Ciao
Andrea

 in qualche modo "comprimerla"?
Dipende.  Non necessariamente è possibile.
E comunque non ci sono parametri per giudicare.  Se la tua stringa è lunga
270 caratteri e non puoi limitare i caratteri della stringa ad un range
preciso, non è sempre detto che tu riesca a farla stare nei 255.
Tutti gli algoritmi di compressione si basano sulla riduzione della
ridondanza di informazioni atte a rappresentare i dati.  Ma nessun
algoritmo di compressione è in grado di stabilire che un dato flusso di
informazione verrà ridotto precisamente di una certa percentuale.
Quindi non puoi dire, a priori, che tutte le tue stringhe saranno
comprimibili da 270 a massimo 255 caratteri.  Non so se sono stato chiaro.
Gli algoritmi che lavorano molto bene sulle stringhe sono il (banale) Run
Length Encoding, che non fa altro che ridurre sequenze lunghe di caratteri
in stringhe più brevi, senza perdere informazioni.  
Per esempio, la stringa:
PPPPPPPPPIIIIIPPPPPO
potrebbe venir ridotta in qualcosa del tipo:
P9I5P5O1
Un altro algoritmo che lavora molto bene sulle stringhe è il
Lempel-Ziv-Welch, ma le stringhe devono essere molto lunghe perché dia il
meglio di se e 270 caratteri è pochino.  Questo algoritmo è detto
"asintoticamente ottimo", nel senso che più è lungo il flusso dati da
comprimere, più è alta la possibilità di avere una compressione ottimale.
Tutto quello che ti dico, ovviamente, è alla luce delle mie conoscenze in
materia di compressione dati, che fino all'altro ieri erano buone :-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it