Petit logiciel de compression, besoin d'aide pour structurer méthode

Petit logiciel de compression, besoin d'aide pour structurer méthode - Algo - Programmation

Marsh Posté le 16-03-2004 à 13:57:30    

Bonjour tlm, je développe en VB un petit programme de compression (je ne poste pas dans VB car ma question n'est pas reliée à ca)
 
Pour l'instant, ce que je fais c'est que j'ouvre le fichier, et je place chaque octet dans un tableau, ce qui ressemble à ça :

Code :
  1. 102 | 17 | 28 | 189 | 102 | 17 | 65 | 90 | etc.


 
Après ça, je forme des combinaisons de 2 octets en comptant les répétitions :

Code :
  1. Combi  | Nb
  2. 102,17 | 2
  3. 17,28  | 1
  4. 28,189 | 1


 
Maintenant, je suis rendu à reparcourir mon tableau des répétitions pour tester si la 2e colonne > 1. Si oui, je reparcoure mon tableau original pour changer (dans cet exemple) tous les 102 par un autre chiffre qui va représenter que ca a été compressé [ici je bloque], et je supprime les 17 du tableau.
 
Donc, mon fichier ressemblera à :
1=bo
1njour j'ai 11 à la jambe.
 
Mon problème c'est que c'est supra-lent et que je ne sais pas si je suis la bonne méthode.  
 
Merci de me dire si ya qqch qui cloche !!  :hello:

Reply

Marsh Posté le 16-03-2004 à 13:57:30   

Reply

Marsh Posté le 16-03-2004 à 14:15:53    

ce que tu decrit la ressemble assez fort a la compression RLE (Run Length Encoding) ca marche pas mal mais ca reste assez limité qd meme
 
si tu veux aller plus loin huffman est ton ami  :D
 
tu na pas precisé non plus si tu voulais compresser avec ou sans destruction


Message édité par red faction le 16-03-2004 à 14:18:29
Reply

Marsh Posté le 16-03-2004 à 14:17:08    

Monochrome a écrit :

Bonjour tlm, je développe en VB un petit programme de compression  
 
Mon problème c'est que c'est supra-lent et que je ne sais pas si je suis la bonne méthode.  
 


 
 :heink: bizarre qd meme
 
 
 [:yamusha]


Message édité par red faction le 16-03-2004 à 14:18:41
Reply

Marsh Posté le 16-03-2004 à 14:19:29    

red faction a écrit :

ce que tu decrit la ressemble assez fort a la compression RLE (Run Length Encoding) ca marche pas mal mais ca reste assez limité qd meme
 
si tu veux aller plus loin huffman est ton ami  :D
 
tu na pas precisé non plus si tu voulais compresser avec ou sans destruction  


C'est pas du tout du RLE ce qu'il décrit.
 

red faction a écrit :


 
 :heink: bizarre qd meme
 
 
 [:yamusha]  


Les trolls c'est le vendredi.


Message édité par skeye le 16-03-2004 à 14:20:10
Reply

Marsh Posté le 16-03-2004 à 14:20:36    

skeye a écrit :


C'est pas du tout du RLE ce qu'il décrit.
 
 
Les trolls c'est le vendredi.


 
ait pas fait attention sorry

Reply

Marsh Posté le 16-03-2004 à 22:37:14    

red faction a écrit :

ce que tu decrit la ressemble assez fort a la compression RLE (Run Length Encoding) ca marche pas mal mais ca reste assez limité qd meme
 
si tu veux aller plus loin huffman est ton ami  :D
 
tu na pas precisé non plus si tu voulais compresser avec ou sans destruction  


 
Ça consiste en quoi avec destruction ? Si je compresse mon fichier, j'espère quand même qu'il fonctionnera toujours à la décompression :p

Reply

Marsh Posté le 17-03-2004 à 03:18:09    

Ben jpeg, mpeg, vorbis... Tout les trucs qui compressent beaucoup et où tu t'en fout de perdre un peu d'info.

Reply

Marsh Posté le 17-03-2004 à 03:48:57    

Ce genre de trucs (compression), ça fait pas mal appel à des opérations binaires, et pour ça VB c'est pas top.
Je verrais les choses ainsi :
1° parcours des données sources pour en extraire les stats :
- tu créés un tableau de 64 Ko initialisé à 0
  chaque indique du tableau représente les stats d'un couple :
    - i0 => couple 0-0
    - i1 => couple 0-1
    - i256 => couple 1-0
- tu parcours les données selon une fenêtre de 2 octets = tu lis 1° et 2° octet, puis 2° et 3°, 3° et 4° ...
- tu calcules l'indice du tableau de stat associé à ce coupe (octet1 * 256 + octet2) et tu incrémentes ce qui s'y trouve
 
2° parcours : tu compresses:
- Tu lis un couple (octet1 octet2)
- tu tests sa valeur dans le tableau de stats (à l'indice octet1 * 256 + octet2)
- si = 1 tu écris octets 1 et passe au coupe (octet2 octet3)
- sinon tu écris ce que tu veux
 
Tu as construit ton buffer compressé.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed