Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-01-2009, 16:43   #1
cocca81
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
cocca81 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2009, 17:14   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
perchè viene utilizzato un carattere (1 char, ovvero 1 byte) per ogni cifra del numero di occorrenze del carattere da ripetere
Spiega meglio cosa fai attualmente
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2009, 19:27   #3
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
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
per dire che ci sono 48 caratteri 'a' uguali e consecutivi tra di loro, puoi semplicemente evitare di codificare il tutto in ASCII e scrivere un solo byte che vale quante sono le ripetizioni (che occupa 8 bit e potrà quindi rappresentare un numero da 0 a 255: ma dal momento che 0 è un valore impossibile nel tuo caso, puoi prendere il tutto e considerarlo incrementato di 1 per riuscire a contare da un minimo di 1 ad un massimo di 256 ripetizioni). Non credo che ti serva affatto una struttura dati per conservare queste informazioni... a meno che non sia un requisito dell'esercizio.

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!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 10:03   #4
Apollo86
Senior Member
 
L'Avatar di Apollo86
 
Iscritto dal: Jan 2003
Città: La Spezia
Messaggi: 753
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Stai facendo una sorta di RLE, insomma... be', se utilizzi un formato di questo tipo:
Codice:
48a
per dire che ci sono 48 caratteri 'a' uguali e consecutivi tra di loro, puoi semplicemente evitare di codificare il tutto in ASCII e scrivere un solo byte che vale quante sono le ripetizioni (che occupa 8 bit e potrà quindi rappresentare un numero da 0 a 255: ma dal momento che 0 è un valore impossibile nel tuo caso, puoi prendere il tutto e considerarlo incrementato di 1 per riuscire a contare da un minimo di 1 ad un massimo di 256 ripetizioni). Non credo che ti serva affatto una struttura dati per conservare queste informazioni... a meno che non sia un requisito dell'esercizio.

Spero di non aver capito male il tuo problema o di averti confuso più che aiutato... in bocca al lupo.
Si, ma se le ripetizioni superano il valore di 256? Non ti basta più 1 byte ....
Apollo86 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 10:40   #5
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:20.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 11:00   #6
Apollo86
Senior Member
 
L'Avatar di Apollo86
 
Iscritto dal: Jan 2003
Città: La Spezia
Messaggi: 753
Quote:
Originariamente inviato da rеpne scasb Guarda i messaggi
Non è completamente esatto.
Ciao

puoi approfondire il tuo intervento? detto così non mi aiuti a comprendere il mio errore ne tantomeno "cocca81" a risolvere il suo quesito

grazie
Apollo86 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 11:16   #7
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 16:21.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 12:03   #8
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da rеpne scasb Guarda i messaggi
E' vero. Ho pero' suscitato la tua curiosita'.

In sostanza:

Si possono utilizzare i valori compresi tra 0 e 254 (1 byte) per indicare il numero di ripetizioni comprese tra 1 e 255, il valore 255 (0FFh) lo si puo' riservare come codice speciale indicante che il numero di ripetizioni e' un numero che necessita di 2 byte per poter essere rappresentato. Ad esempio, si vogliano rappresentare i seguenti valori:

17 -> |16|
100 -> |99|
1 -> |0|
255 -> |254|
256 -> |255|0|0|
300 -> |255|44|0|
1000 -> |255|232|2|
10000 -> |255|16|38|

Questa tecnica e' conveniente se sono molti i valori minori di 255 e pochi i valori maggiori di 255, altrimenti conviene una codifica a 2 byte.
Quoto... se i numeri però sono soprattutto bassi (< 500) si potrebbe fare meglio:
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
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 12:06   #9
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 12:35   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Apollo86 Guarda i messaggi
Si, ma se le ripetizioni superano il valore di 256? Non ti basta più 1 byte ....
Come al solito, non c'è mai un'unica strada che puoi percorrere, la mia era giusto un'idea abbozzata.
Possiamo elaborarla:
  1. spezzi le ripetizioni ogni volta che raggiungi i 256 caratteri ed inserisci in coda una nuova serie di ripetizioni per lo stesso carattere (esempio: carattere 'a' ripetuto 260 volte → |255|a|3|a)
  2. utilizzi una codifica come quella di repne scasb che si adatta "dinamicamente" al numero di ripetizioni
  3. utilizzi una forma |n|byte1..n|carattere|, dove n indica la lunghezza della serie di byte che lo seguono, i quali a loro volta rappresentano il numero delle ripetizioni del carattere salvato alla fine (ad esempio per 65536 ripetizioni di 'a'|2|255|255|a, che viene valutato come 256 * 256).

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.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 13:03   #11
cocca81
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!!!
cocca81 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2009, 13:14   #12
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
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!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Il dispositivo hardware AI di Jony Ive p...
Wikipedia valuta il blocco di Archive.to...
Cupra Tavascan primo veicolo cinese a en...
openSIL, il firmware open-source di AMD ...
Da dove avete scaricato 7-zip? Il vostro...
Fotocamera selfie da 100 megapixel: la n...
Robot aspirapolvere in super offerta su ...
Addio a GPT-4o, il modello empatico (e p...
Razer Boomslang 20th Annyversary Edition...
Nintendo contro la pirateria: bloccati d...
NIS2 entra nel vivo: la soluzione di Cyn...
xAI perde due cofondatori in due giorni:...
Robot aspirapolvere Mova Z60 Ultra Rolle...
Google semplifica la rimozione di immagi...
EPOS H3 Hybrid a soli 39€: cuffie gaming...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:57.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v