Newsgroup: it.comp.lang.c++
Titolo: consigli su soluzione empirica...

Salve a tutti,
ho necessità forzata di comprimere un file di 1029 byte,
mi piacerebbe ascoltare eventuali vostre rifflessioni riguardo un metodo
che vorrei implementare per garantirmi la riduzione del file.
Partendo dal fatto che non si conosce il contenuto del file perciò si
considerano tutte le 256 combinazioni, possiamo dire che avremo una
ridondanza media di oltre 4 presenze ogni simbolo.
Logicamente a prima vista sembrerebbe comprensibile una compressione, ma
la disposizione dei singoli simboli è incognita, perciò potremmo non
avere la possibilità di rappresentarli in maniera ridotta.
Questo "forse" può essere ovviato con una soluzione.
Il compromesso che ho scelto è di considerare 3 dizionari e un
inserimento dinamico.
La prima considerazione è scegliere un interruttore che permetta col
minor spazio possibile l'inserimento dinamico di simboli incomprimibili,
vale a dire il bit.
1= inserisci e successivamente inserisco gli 8 bit del carattere
0= fai uso dei dizionari
nel caso rappresentiamo il simbolo 0 ne occorre un successivo che
specifichi se stiamo considerando il dizionario 1 e 2 oppure il 3
0= per 1 e 2
1= per 3
Descrizione dizionari:
1) dizionario che contiene gli 8 caratteri + frequenti del file
rappresentazione binaria: 0 0 ***
2) dizionario che contiene i caratteri consecutivi ai caratteri +
frequenti per una dimensione di simboli non superiore ai 128, perciò
rappresentazione in 7 bit, questo per il semplice fatto che dobbiamo
ridurne lo spazio di identificazione.
Ogni elemento di questo dizionario deve rispondere a questa
caratteristica:
scelti i caratteri + frequenti, questo simbolo deve essere presente
minimo 2 volte.
rappresentazione binaria: 0 0 *** 0000000
totale 12 bit al posto di 16,
questa dimensione può ridursi ulteriormente infatti, se noi abbiamo
soltanto 32 caratteri che specificano la caratteristica, avremo
un'identificazione del secondo simbolo di soltanto 0 0 *** 00000 = 10
bit al posto di 16
3) dizionario che contiene tutti i caratteri usati + di 1 volta e che
non corrispondono alla caratteristica sopra specificata.
Questo dizionario ha una capacità di non oltre 32 simboli, naturalmente
possiamo amplificarne la sua capacità sfruttando anche altri parametri
senza allungarne la rappresentazione (sono solo sfumature decise
nell'implementazione)
rappresentazione binaria: 0 1 00000
Tutti gli altri caratteri che non si riconoscono comprimibili per la
loro disposizione o per la scarsa presenza, si inseriscono dinamicamente
con il bit rappresentativo 1...come dicevamo all'inizio.
Spero che qualcuno voglia considerare qualche opinione su questo metodo,
la notevole ricerca che sto intensificando sempre più per un compromesso
mi porta a notti bianche...help...
alcuni amici del NG mi hanno postato indirizzi internet molto utili con
sorgenti di compressori già implementati, li ringrazio ma sono scritti
in inglese e io non lo so, andare a tradurre l'algoritmo dal semplice
codice non mi sembra un lavoro produttivo, terrò comunque questa
alternativa come ultima...
grazie ancora a tutti quanti per i consigli portati fin'ora, sono
serviti per molte ottimizzazioni del codice.
bye duido
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 alternativa come ultima...
<snip>
io considererei imparare l'Inglese, anche a tempo perso, un investimento
indispensabile, e non solo per leggermi i manuali di informatica
~~
artemis.alpeia

sinceramente chiedere è lecito rispondere è cortesia...vorrei stringerti
la mano appoggiando il tuo spirito critico e amichevole.
artemis.alpeia, comprendo tu sia una persona molto emotiva e sensibile
ma cosa faremmo senza i manuali?
e sopratutto cosa si può fare senza un video su cui piangere?
la tua conclusione è stata sicuramente interpretata precedentemente da
esperti molto specifici, ma forse tu non consideri che
le problematiche del tempo che servirebbero per un corso d'inglese e le
spese che non tutti hanno la fortuna di permettersi...sono pesi che
alcune persone non posso risolvere mentre altri ne sbeffeggiano le
circostanze...meglio un manuale, che dici?
per fortuna esistono anche programmatori e NG italiani
 wow
  -
 \_/
;)


 Partendo dal fatto che non si conosce il contenuto del file perciň si
se il file puo` contenere indifferentemente tutte le 256^1029 
combinazioni non c'e` nulla da fare: non esiste un algoritmo in grado di 
assicurarti *sempre* la compressione, dato che il codice risultate 
avrebbe ridondanza minore di 1, il che e` assurdo.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it