Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-11-2011, 22:09   #1
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
[C] algoritmo per comprimere un file

Salve a tutti, vorrei poter fare un programma che dato in input un file mi possa dare in output un file compresso, cioè che pesa meno in termini di byte, come posso realizzare ciò in C??? Premetto che sto cercando di capire il RLE ma proprio non so come metterlo in pratica, penso che voi mi possiate dare una mano consistente!

grazie
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 22:32   #2
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Beh l'argomento "compressione dei dati" è un campo di ricerca molto attivo dell'informatica. Ci sono tantissimi algoritmi diversi (molti proprietari).
L'RLE è uno dei più semplici, ma funziona bene solo in alcune circostanze.
RLE non fa altro che raggruppare unità di dati consecutive uguali, in altre parole, se trasmetto la sequenza:
AAAAAAAAAABBBCCCCCCCCCCCCCCCCAAAABBACCCC (40 carattewri ASCII8 => 60bytes)
la versione compressa sarà
10A3B16C4A2B1A4C (14 bytes: scrivo in un byte quante volte si ripete consecutivamente uno stesso valore, il byte successivo contiene il dato)

E' facile notare che se in media le sequenze contigue sono più corte di 2 elementi, la compressione è controproducente (e questo capita praticamente sempre nei file binari). L'RLE risulta più efficace nella compressione di immagini con numero di colori ridotto, per esempio è usata per i fax che trasmettono in bianco e nero documenti che molto spesso contengono lunghe sequenze di pixel bianchi (ma anche nei fax, questa compressione è combinata con altre)

Potresti provare a vedere l'Huffman, è intuitivo (a patto di conoscere come funzionano gli alberi binari). Comunque c'è molta teoria dietro tutto questo, non è semplice
Se ti serve una compressione "professionale" magari trovi qualche libreria già free in internet...
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 10-11-2011 alle 22:35.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 22:33   #3
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
In fondo a questa pagina puoi scaricare una versione in C.

http://michael.dipperstein.com/rle/index.html

Edit: Ho risposto in questo modo ma in realtà non ho capito se vuoi un codice da usare effettivamente o vuoi capire come funziona e arrivare a scrivere il codice da solo
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2011, 22:40   #4
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da demos88 Guarda i messaggi
Beh l'argomento "compressione dei dati" è un campo di ricerca molto attivo dell'informatica. Ci sono tantissimi algoritmi diversi (molti proprietari).
L'RLE è uno dei più semplici, ma funziona bene solo in alcune circostanze.
RLE non fa altro che raggruppare unità di dati consecutive uguali, in altre parole, se trasmetto la sequenza:
AAAAAAAAAABBBCCCCCCCCCCCCCCCCAAAABBACCCC (40 carattewri ASCII8 => 60bytes)
la versione compressa sarà
10A3B16C4A2B1A4C (14 bytes: scrivo in un byte quante volte si ripete consecutivamente uno stesso valore, il byte successivo contiene il dato)

E' facile notare che se in media le sequenze contigue sono più corte di 2 elementi, la compressione è controproducente (e questo capita praticamente sempre nei file binari). L'RLE risulta più efficace nella compressione di immagini con numero di colori ridotto, per esempio è usata per i fax che trasmettono in bianco e nero documenti che molto spesso contengono lunghe sequenze di pixel bianchi (ma anche nei fax, questa compressione è combinata con altre)

Potresti provare a vedere l'Huffman, è intuitivo (a patto di conoscere come funzionano gli alberi binari). Comunque c'è molta teoria dietro tutto questo, non è semplice
Se ti serve una compressione "professionale" magari trovi qualche libreria già free in internet...
grazie mille ottima spiegazione, si infatti c'è molta teoria, io ne volevo fare uno per poter vedere se "funzionava", nel senso vedere se il file in output è più leggero di quello in ingresso.
Quote:
Originariamente inviato da ndakota Guarda i messaggi
In fondo a questa pagina puoi scaricare una versione in C.

http://michael.dipperstein.com/rle/index.html

Edit: Ho risposto in questo modo ma in realtà non ho capito se vuoi un codice da usare effettivamente o vuoi capire come funziona e arrivare a scrivere il codice da solo
no voglio scrivermelo da solo ovviamente, altrimenti prendo winRar
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2011, 00:07   #5
Mirkolo
Senior Member
 
L'Avatar di Mirkolo
 
Iscritto dal: Sep 2007
Messaggi: 329
La compressione RLE è forse la più semplice ed intuitiva, quindi parti pure con quella per farti le ossa L'implementazione più famosa penso sia la PackedBits di Apple, usata in molti campi. Ad esempio, il tanto famoso formato PSD di Adobe salva le righe delle immagini (solo con profondità a 8bit però) in PackedBits. L'algoritmo di decompressione funziona così: se il primo byte letto L è minore di 128, i successivi L+1 byte vengono copiati in output così come sono, mentre se è maggiore di 128 il byte successivo viene ripetuto in uscita 257-L volte. Questo permette di tranne vantaggio dalla sequenza di byte ripetuti, ma al tempo stesso non raddoppiare la dimensione del file compresso se i byte sono tutti diversi tra loro. Sulla base di queste regole puoi ricavarti il compressore. Da notare che non esiste un modo univoco di comprimere, ma facendo un paio di considerazioni puoi arrivare a capire quale è quello più efficiente.

Viene usato da Adobe nei PSD e in altri formati grafici proprio perchè certe grafiche (es. uno screenshoot del tuo desktop) hanno molti pixel vicini dello stesso colore. Ma se provi a comprimerci una foto otterrai risultati insoddisfacenti. In quei casi, se si vuol restare nel campo loseless, bisogna creare algoritmi ad hoc basati sulla natura del segnale (vedi flac per l'audio).

Gli altri sistemi sono basati generalmente su due fatti: 1) la codifica di più byte assieme tramite dizionari, 2) la codifica entropica. Quest'ultima si basa sul fatto che, ad esempio, non tutti i simboli saranno presenti con la stessa frequenza sulla tua sorgente. Quindi, anzichè associare lo stesso numeri di bit a tutti i simboli, conviene associare codifiche più corte a quelli più probabili, e codifiche più lunghe a quelli meno. Cerca Huffman su google per avere qualche esempio o una miglior spiegazione. Se poi l'argomento ti appassiona leggiti qualcosa sui codificatori aritmetici, che sono anche piuttosto semplici da capire e più efficienti di Huffman.

Anni fa avevo provato a partecipare allo Hutter Prize, una specie di gara dove ti pagavano in proporzione a quanto riuscivi a migliorare la compressione di 100mb di Wikipedia. Ho imparato molte cose, ma è stato un bagno di sangue avvicinarsi ai risultati degli altri partecipanti
__________________
Canon EOS 5D3 | 16-35 f/4 L IS | 24-105 f/4 L IS | 70-200 f/4 L IS | 14 f/2.8 | 24 f/1.4 L | 35 f/1.4 | 135 f/2.0 L | Canon 430EX
Mirkolo è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2011, 17:59   #6
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Mirkolo Guarda i messaggi
La compressione RLE è forse la più semplice ed intuitiva, quindi parti pure con quella per farti le ossa L'implementazione più famosa penso sia la PackedBits di Apple, usata in molti campi. Ad esempio, il tanto famoso formato PSD di Adobe salva le righe delle immagini (solo con profondità a 8bit però) in PackedBits. L'algoritmo di decompressione funziona così: se il primo byte letto L è minore di 128, i successivi L+1 byte vengono copiati in output così come sono, mentre se è maggiore di 128 il byte successivo viene ripetuto in uscita 257-L volte. Questo permette di tranne vantaggio dalla sequenza di byte ripetuti, ma al tempo stesso non raddoppiare la dimensione del file compresso se i byte sono tutti diversi tra loro. Sulla base di queste regole puoi ricavarti il compressore. Da notare che non esiste un modo univoco di comprimere, ma facendo un paio di considerazioni puoi arrivare a capire quale è quello più efficiente.

Viene usato da Adobe nei PSD e in altri formati grafici proprio perchè certe grafiche (es. uno screenshoot del tuo desktop) hanno molti pixel vicini dello stesso colore. Ma se provi a comprimerci una foto otterrai risultati insoddisfacenti. In quei casi, se si vuol restare nel campo loseless, bisogna creare algoritmi ad hoc basati sulla natura del segnale (vedi flac per l'audio).

Gli altri sistemi sono basati generalmente su due fatti: 1) la codifica di più byte assieme tramite dizionari, 2) la codifica entropica. Quest'ultima si basa sul fatto che, ad esempio, non tutti i simboli saranno presenti con la stessa frequenza sulla tua sorgente. Quindi, anzichè associare lo stesso numeri di bit a tutti i simboli, conviene associare codifiche più corte a quelli più probabili, e codifiche più lunghe a quelli meno. Cerca Huffman su google per avere qualche esempio o una miglior spiegazione. Se poi l'argomento ti appassiona leggiti qualcosa sui codificatori aritmetici, che sono anche piuttosto semplici da capire e più efficienti di Huffman.

Anni fa avevo provato a partecipare allo Hutter Prize, una specie di gara dove ti pagavano in proporzione a quanto riuscivi a migliorare la compressione di 100mb di Wikipedia. Ho imparato molte cose, ma è stato un bagno di sangue avvicinarsi ai risultati degli altri partecipanti
wow che spiegazione grazie!!!!

si ho letto anche io che wikipedia organizzava gare del genere, ma ovviamente non ho le skills adatte...
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
8 smartphone Android in forte sconto su ...
Samsung House apre a Milano: la casa tec...
Broadcom esclude i cloud provider pi&ugr...
Allerta sicurezza per n8n: come protegge...
NIO raggiunge il primo storico profitto ...
Memorie DDR5 cinesi nel tuo prossimo PC?...
Volkswagen e Stellantis chiedono all'UE ...
Final Fantasy VII Remake Parte 3 potrebb...
Lo spettacolo pirotecnico della Xiaomi S...
Black Myth: Wukong potrebbe approdare su...
Aruba e Ducati: la Superbike come labora...
Qualcomm vola nei conti, ma l'industria ...
F1: The Movie, Apple e Formula 1 aprono ...
Amazon Seconda Mano: arriva il 10% extra...
Sysmon diventa nativo su Windows 11: com...
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: 15:14.


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