Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compression Huffman fichiers binaires

Sujet résolu
    28 mars 2017 à 14:36:56

    Bonjour, je dois réaliser un programme de compression de fichiers basé sur l'algorithme d'Huffman.

    J'ai implémenté l'algo mais je me retrouve avec un petit problème : le programme a des taux de compression quasi nuls pour tout ce qui n'est pas fichier texte. J'ai par exemple un taux de compression de près de 50% pour le dictionnaire français en fichier texte, mais dès que je compresse un fichier binaire (genre .docx, .jpg) ça ne compresse quasi rien voire rien. Selon le principe de l'algo, plus certains symboles sont présents, plus la place qu'ils prendront sera faible. Seulement, quand je stocke les occurrences des symboles d'un fichier binaire dans un tableau et que je l'affiche, l'occurrence des différents symboles est assez homogène, ce qui rend la compression inefficace. 

    Du coup je me dis qu'il doit y avoir un problème dans la manière dont je lis les symboles de mes fichiers, mais je vois pas vraiment quoi... Voilà le code : 

    FILE* fichierACompress = NULL;
    unsigned char c=0;
    int i=0;
    
    fichierACompress = fopen("fichiers/dico.docx", "rb");
    
    while (fread(&c, sizeof(char), 1, fichierACompress) != 0)
    {
       tab[c].occur++;
    }
    
    for (i=0;i<256;i++)
    {
       printf("%d : %d\n", i, tab[i].occur); /*on affiche le tableau */
    }

    Ou alors c'est un problème inhérent à la structure des fichiers binaires, où les différents symboles ont une distribution assez proche... 

    Bref je suis bloqué, donc si quelqu'un aurait une idée ce serait cool :)

    • Partager sur Facebook
    • Partager sur Twitter
      28 mars 2017 à 14:53:08

      Bonjour,

      ce n'est pas un problème, c'est dû à la fréquence quasi identique des octets dans un fichier binaire.

      • Partager sur Facebook
      • Partager sur Twitter
      First solve the problem. Then, write the code. ~ John Johnson
        28 mars 2017 à 15:06:07

        Dans ce cas, Huffman n'est pas adapté pour la compression de fichiers binaires ? Même avec des images .jpeg ayant des couleurs homogènes du genre ciel bleu la compression ne devrait pas être efficace ?
        • Partager sur Facebook
        • Partager sur Twitter
          28 mars 2017 à 15:35:52

          huffman n'est efficace uniquement dans le cas où les fréquences ne sont pas uniformes. Une image jpeg est déjà compressée et donc huffman n'apportera rien, au contraire. Si tu parle d'une image en général, cela pourrait être le cas, mais avec une photo 32 bits peu de chance car il y a trop de nuances .

          huffman ne peut dépasser la limite des 50% de compression et est surtout adapté aux données qui contiennent déjà de la redondance (grande entropie) et permet de l'éliminer en partie (d'où la compression). C'est le cas de la majorité des langues naturelles qui sont très redondantes une fois écrites, mais ce n'est pas le cas de fichiers binaires (programmes sur matériel CISC, un peu mieux en RISC) et pas du tout sur les fichiers déjà compressés (pas assez de redondance).

          • Partager sur Facebook
          • Partager sur Twitter
          First solve the problem. Then, write the code. ~ John Johnson
            28 mars 2017 à 15:50:10

            Ok merci bien c'est ce que je voulais savoir !
            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2017 à 1:35:42

              youptralala21 , le codage de huffman vient d'en bas en haut ,

              moi je l'es fait et le code marche bien , mais pourquoi tu utilise pas un algorithme qui va de haut en bas et de gauche a droite , tu pourrait compresser la taille double de tes fichier !

              • Partager sur Facebook
              • Partager sur Twitter

              Compression Huffman fichiers binaires

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown