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 :

Amélioration de l'algorithme de Huffman


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Amélioration de l'algorithme de Huffman
    Bonjour, j'ai besoin de conseil. je suis en train de créer une appli effectuant la compression à l'aide de l'algorithme de Huffman, j'aimerais réussir à diminuer la taille du fichier compressé en minimisant l'entête du fichier. J'utilise Eclipse 3.01.

    Merci!

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu ne peux pas améliorer Huffmann directement, c'est l'algorithme optimal pour ce qu'il fait. Shanon-Fano était uen version du même type,mais on construisait l'arbre différemment.
    Huffmann prend un caractère et le remplace par une séquence entière de bits, la plus petite possible selon l'entropie de ce caractère.
    Le codage arithmétique - sous brevet d'IBM, je crois -, remplace par une séquence non entière.
    Le codage par dictionnaire remplace une séquence de caractères par une autre séquence d'octet.
    Si tu veux optimiser - à quel sens ?? - la compression, change d'algo ou passe à de l'adaptatif.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    En fait ce n'est pas vraiment sur la diminution de l'algo mais plus seulement sur l'en tete, dans l'algo de Huffman, on sauvegarde la fréquence des lettres dans l'en tete pour la décompression mais en fait je veux trouver une maniere de sauver un peu d'espace sur l'en tete.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    A ce moment, regarde du côté de l'adaptatif, il crée l'arbre d'Huffman à la volée. Un peu moins optimal que l'Huffman pour la compression, mais pour les petits fichiers, sans doute meilleur.

  5. #5
    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 Miles
    A ce moment, regarde du côté de l'adaptatif, il crée l'arbre d'Huffman à la volée. Un peu moins optimal que l'Huffman pour la compression, mais pour les petits fichiers, sans doute meilleur.
    Un adaptatif qui "oublie" peut etre meilleur si le fichier a des zones avec des comportements differents et que l'algo d'oubli detecte bien ces zones.

    De toute maniere, si on cherche une bonne compression, on utilise des ordres superieurs (l'arbre a utiliser depend du symbole ou des symboles precedants: le u apres un q n'a pas la meme probabilite qu'un u apres un autre u) et alors la se passer de l'adaptatif est rapidement prohibitif.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca commence à être du dictionnaire, non ?

  7. #7
    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 Miles
    Ca commence à être du dictionnaire, non ?
    Il ne me semble pas. On encode pas des chaines, on continue a encoder des symboles. On tient juste compte du contexte (precedant:-)) pour choisir l'encodage.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ah oui, effectivement, je vois
    Pour plus de renseignement, je pense que le "Data Compression" de Salomon est pas mal du tout

  9. #9
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    En utilisant des codes de Huffman canoniques, il n'y a besoin que des caractères originaux + la taille des codes dans la table en tout début de fichier.

    Cf. il n'y a pas besoin de stocker les codes de Huffman dans l'entête lors de la sauvegarde, car ils peuvent être regénérés au tout début de la décompression à l'aide de la taille de chaque code, qui aura été sauvegardée en même temps que le caractère associé dans la table stockée en entête du fichier.

    A la rigueur, les tailles peuvent elles même être codées dans l'entête du fichier avec un codage de Golomb ou un truc du style pour y prendre moins de place.
    (mais pas sûr que ce soit rentable à moins qu'il n'y ai que très peu de caractères à coder/décoder)

    PS : on peut aussi utiliser des "mots" à la place des caractères
    (style "dé" "com" "pos" "er" "tous" "les" "mots" => ça ne fait déjà plus que 7 entités à gérer à la place des 13 lettres D E C O M P S R T U L E T dans cet exemple)


    @+
    Yannoo

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

Discussions similaires

  1. algorithme de huffman
    Par wahidred dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 24/04/2011, 00h46
  2. [Turbo Pascal] Compression par algorithme de Huffman
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 3
    Dernier message: 13/12/2010, 22h39
  3. Amélioration d'un algorithme
    Par soso78 dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/09/2008, 21h31
  4. Algorithme de Huffman
    Par mmuller57 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 15/05/2002, 11h47

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