|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 3
|
[C] come utlizzare al meglio la memoria
Ciao.
devo leggere da un file quante volte un carattere è ripetuto se consecutivo, per poi scriverlo in un file nuovo ad esempio: aaabb ccd...ecc ecc, diventerà 3a2b(spazio)2c1d...ecc. e fin qui è tutto facile. Per il docente questa è considerata un'implementazione banale, perchè viene utilizzato un carattere (1 char, ovvero 1 byte) per ogni cifra del numero di occorrenze del carattere da ripetere; quindi devo utilizzare al meglio la memoria per quanto riguarda la memorizzazione delle cifre. Mi sono documentata sull'aritmetica binaria, ad esempio i numeri da 0 a 3, li posso rappresentere con 2 bit, quelli da 4 a 7 con 3 bit,da 8 a 15 con 4 bit e così via, ma non riesco a capire come posso implemetare questa soluzione. Cmq avrei anche già creato una lista: struct carattere { char carat; //carattere che leggo dal file int NumVolRip; //conta quante volte un carattere è consecutivo struct carattere *next; }; Potrebbe già andare bene così? Grazie per l'aiuto!!! Ciao ciao |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Stai facendo una sorta di RLE, insomma... be', se utilizzi un formato di questo tipo:
Codice:
48a Spero di non aver capito male il tuo problema o di averti confuso più che aiutato... in bocca al lupo.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: La Spezia
Messaggi: 753
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:20. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2003
Città: La Spezia
Messaggi: 753
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:21. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
Il valore 255 significa che il numero "continua" sul prossimo byte, e che il suo valore è 255 + il valore del prossimo byte. In questa maniera si possono fare "catene", tipo |255|255|10| = 523. Questo approccio ha il vantaggio che puoi salvare numeri grossi quanto ti pare, però per numeri grandi è meglio come fa repne scasb. potresti allora riservare 255 per dire che il numero è composto da altri due bytes da leggere insieme, e 254 per dire che c'è ancora un byte. Così combineresti entrambi i vantaggi, penso |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Diciamo che si può fare tutto e il contrario di tutto, dipende dalla distribuzione in frequenza delle sequenze.
Ad esempio si potrebbe pensare ad una codifica differenziale. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Possiamo elaborarla:
Preciso che nella 3) avresti dei numeri pesati a seconda della loro posizione. Nell'esempio che ti ho fatto per 65536 ripetizioni ti bastano 3 byte: il primo indica che il numero è lungo 2 byte. Questi ultimi due sono c1 e c0, che valgono 255 e 255. Il risultato è quindi (256^(n-1) * c1) + (256^(n-2) * c0) + 1 = (256^1 * 255) + (256^0 * 255) + 1 = 65280 + 255 + 1 = 65536. Credo si possa risparmiare un ulteriore byte, ma al momento ho altro a cui pensare. ![]() ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 18-01-2009 alle 13:15. |
|
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: Jan 2009
Messaggi: 3
|
Grazie per tutti gli interventi!!! Quindi devo cmq sempre costruire una lista!?? Ma però nel tuo modo, non riesco a capire come devo impostare la struttara dati! cmq oggi pomeriggio mi ci rimetto dietro!!!
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non credo ti servano né una lista né una struttura dati di appoggio, basta un contatore per le ripetizioni consecutive e una funzione di "codifica".
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:03.





















