IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

[Huffman|JAR] Compression de Huffman dans un jar => Ca sert à rien !


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut [Huffman|JAR] Compression de Huffman dans un jar => Ca sert à rien !
    Bonjour à tous, bon j'avoue que l'intitulé ne doit pas être très parlant mais je vais vous expliquer en détail mon problème.

    Je développe une application sur téléphone portable en java. J'ai plusieurs fichiers textes dans mon projet. Et je souhaite tout simplement les compresser pour gagner un maximum de place dans mon JAR (exécutable java).
    Je décide donc d'implémenter l'algorithme de Huffman pour compresser/décompresser mes fichiers texte. Après implémentation, ça fonctionne bien, mes fichiers sont compressés, je réduis leur taille de 35%.
    Seulement voilà, une fois buildé, je m'aperçois que le jar n'est pas plus petit que lorsque je n'utilisais pas Huffman, il est même plus gros!!!

    Explication:
    Taille JAR avec compression au préalable de huffman: 206043 octets
    Taille JAR sans compression au préalable de huffman: 204938 octets

    Taille original du fichier texte: 5054 octets
    Taille avec compression de Huffman du fichier texte: 3293 octets
    Taille original du fichier texte dans JAR: 2079 octets
    Taille avec compression de Huffman du fichier texte dans JAR: 3184 octets

    Donc, les algorithmes de compression utilisés par le JAR ne compressent quasiment pas mon fichier compressé par huffman 3293 =>3184 . Mais compressent super bien mon fichier original 5054 => 2079 .

    Au final, sans toucher à rien, la taille finale de mon fichier fait 2079 , contre 3184 avec huffman.

    Je me suis donc dis que huffman faisait partie des algorithmes du JAR car il n'arrive pas à compressé mon fichier "huffmanifié" (oui, je sais j'invente des mots, c'est quand je suis énervé ).
    Après un petite recherche, il se trouve que ce n'est pas le cas:
    JAR == ZIP => Pre-processing + LZMA + LZ77 + BWT
    Je ne sais pas du tout ce que sont ces algo, mais il n'y a pas de huffman là dedans. (contrairement au RAR soit dit en passant)

    Donc voilà où j'en suis. Voici donc mes questions:
    #1 Quel est l'explication cela ?
    #2 Est-il possible de réaliser une compression des données qui soit ensuite bien compressé par le jar ou est-ce peine perdue ?
    #3 Quelqu'un à t-il un doliprane, j'ai mal à la tête

    Merci par avance pour vos réponses éclairées.

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par ryosnake Voir le message
    Après un petite recherche, il se trouve que ce n'est pas le cas:
    JAR == ZIP => Pre-processing + LZMA + LZ77 + BWT
    Je ne sais pas du tout ce que sont ces algo, mais il n'y a pas de huffman là dedans.
    Classiquement, un algorithme de compression, c'est
    - un preprocessing (BWT en est un) pour mettre sous forme plus facilement compressible
    - une compression a dictionnaire (LZ77)
    - une compression entropique (Huffman, codage arithmetique)

    Une recherche rapide sur LZMA me donne l'impression qu'il s'agit bien d'un LZ77 suivit d'un codage arithmetique.

    Pour info, on peut considerer Huffman comme une version entiere du codage arithmetique.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par ryosnake Voir le message
    JAR == ZIP => Pre-processing + LZMA + LZ77 + BWT
    ?

    Ça ne serait pas plutôt:

    JAR = ZIP => (Deflate) => LZ77 + Huffman
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Ça ne serait pas plutôt:

    JAR = ZIP => (Deflate) => LZ77 + Huffman
    Non, apparemment là tu parles du format RAR:
    RAR => Pre-processing + LZ77 + Huffman
    Enfin, d'après le lien sur lequel j'étais tombé.

    Classiquement, un algorithme de compression, c'est
    - un preprocessing (BWT en est un) pour mettre sous forme plus facilement compressible
    - une compression a dictionnaire (LZ77)
    - une compression entropique (Huffman, codage arithmetique)

    Une recherche rapide sur LZMA me donne l'impression qu'il s'agit bien d'un LZ77 suivit d'un codage arithmetique.

    Pour info, on peut considerer Huffman comme une version entiere du codage arithmetique.
    Ok, donc ça répond à ma première question j'imagine.
    Concernant ma deuxième question, dois-je considérer qu'il n'y a rien à faire pour avoir une meilleure compression de mes données?

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par ryosnake Voir le message
    Non, apparemment là tu parles du format RAR:
    RAR => Pre-processing + LZ77 + Huffman
    Enfin, d'après le lien sur lequel j'étais tombé.
    Et bien moi, d'après la javadoc de SUN, la spécification d'un fichier JAR c'est une compression ZIP telle que décrite dans le RFC 1951:

    http://www.isi.edu/in-notes/rfc1951.txt

    DEFLATE Compressed Data Format Specification version 1.3

    (...)

    Abstract

    This specification defines a lossless compressed data format that
    compresses data using a combination of the LZ77 algorithm and Huffman
    coding
    , with efficiency comparable to the best currently available
    general-purpose compression methods.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Ok, autant pour moi. Ca m'apprendra à pas aller voir les docs officielles. Merci

    En tout cas, je pense que je peux considérer avoir eu les réponses à mon problème. Je laisse donc tomber ma veine tentative et je peux jeter mon implémentation de Huffman à la poubelle... C'est rageant. Quoique, ça peux toujours servir ultérieurement. Et au moins, j'ai appris pleins de trucs dans le domaine de la compression de données, domaine ou j'étais un parfait débutant.

    Merci à vous deux.

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tu peux toujours écrire ton propre class-loader qui décompressera les fichiers dans le format qui te fait plaisir.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Oui mais bon, la décompression, je m'en fou un peu étant donné que ma compression donne de moins bons résultats.
    Et puis je ne souhaite pas compresser mon code, mais mes fichiers TXT.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML et JAR]Utiliser des XML dans un JAR
    Par fguitch dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/09/2006, 14h45
  2. Réponses: 3
    Dernier message: 18/07/2006, 10h32
  3. [JAR]Modification de fichier dans un jar
    Par vberetti dans le forum Général Java
    Réponses: 14
    Dernier message: 13/06/2005, 17h56
  4. [JAR] lire un fichier dans un jar OU hors d'un jar
    Par yveslamand dans le forum Général Java
    Réponses: 13
    Dernier message: 25/04/2005, 14h38
  5. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo