From 58f6c7476172fd211aeae26a319b1a994f079bb3 Mon Sep 17 00:00:00 2001 From: Ayoub ANHDIRE Date: Sat, 20 Dec 2025 14:01:36 +0100 Subject: [PATCH] Codes HUFFMAN + Canoniques : OKKKKKK git add --allgit add --all --- .../iutfbleau/sae/mhuffman/CanonicalCode.java | 32 ++++++++++++++----- .../iutfbleau/sae/mhuffman/HuffmanTree.java | 10 +++--- src/fr/iutfbleau/sae/mimage/Pixel.java | 2 +- src/fr/iutfbleau/sae/mimage/RGBImage.java | 2 +- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java index e556f52..a57b8e1 100644 --- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java +++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java @@ -1,22 +1,38 @@ package fr.iutfbleau.sae.mhuffman; - import java.util.*; public class CanonicalCode{ - private Map codeLenghts = HuffmanNode.getDictionnary(); + private Map codeLengths = HuffmanTree.getDictionnary(); private Map canonicalCodes = new HashMap<>(); - public void generateCodes(){ - // 1- Premiere chose à faire : trier les codes initiaux par longueur du code : + public Map generateCodes(){ + // 1 ere chose à faire : on regarde uniquement la longueur des codes initiaux(Huffman) + // 2eme chose à faire : remettre dans l'ordre des longueurs : si meme taille ==> regarder valeur + // 3eme chose à faire : ecriture des codes canoniques : - List codes = new ArrayList<>(); - codes = codeLenghts.keySet(); - int[] tab = code.toArray(new Integer[0]); - Arrays.sort(tab); + // on recupere les entrées des codes Huffman pour pouvoir les triés + List> liste = new ArrayList<>(codeLengths.entrySet()); + // ici on comparer par longueur de la valeur ou sinon par la clé + // type générique pour éviter les erreurs de compilation !!! + liste.sort(Comparator.>comparingInt(Map.Entry::getValue) + .thenComparing(Map.Entry::getKey)); + int code = 0; // code canonique à attribuer + int temp = 0; //garde la longueur du code précedent , pour gérer le décalage + for (Map.Entry entree : liste ) { + int valeur = entree.getKey(); // symbole actuel + int longueur = entree.getValue(); // longueur du code actuel + + code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente + canonicalCodes.put(valeur,code); // ajout dans le dictionnaire + code++; // incrémentation pour la valeur qui suit + temp = longueur; // mise à jour de la longueur précedente + } + + return canonicalCodes; } diff --git a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java index b4faec9..5081ede 100644 --- a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java +++ b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java @@ -57,7 +57,7 @@ public class HuffmanTree { /** * Dictionnaire pour enregistrer les codes Huffman */ - private Map codes; + private static Map codes; /** * Chaine de caracteres qui va nous permettre de sauvegader le code Huffman @@ -151,7 +151,7 @@ public class HuffmanTree { * @return Map on stockera les codes Huffman sous forme de dictionnaire */ - public Map generateCodes(){ + public Map generateCodes(){ /** * Le but de cette méthode est de pouvoir generer les codes Huffman à partir de l'arbre : * Les branches prendront comme valeur 1 ou 0 selon differents cas : @@ -164,7 +164,7 @@ public class HuffmanTree { this.chaineCarac = new String(); if(root.isLeaf()){ - codes.put(root.getValue(),chaineCarac); + codes.put(root.getValue(),Integer.parseInt(chaineCarac)); return codes; } @@ -192,8 +192,8 @@ public class HuffmanTree { } - public static Map getDictionnary(){ - return this.codes; + public static Map getDictionnary(){ + return codes; } diff --git a/src/fr/iutfbleau/sae/mimage/Pixel.java b/src/fr/iutfbleau/sae/mimage/Pixel.java index f4f37e1..54c3a98 100644 --- a/src/fr/iutfbleau/sae/mimage/Pixel.java +++ b/src/fr/iutfbleau/sae/mimage/Pixel.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.sae; +package fr.iutfbleau.sae.mimage; public class Pixel{ private int r; diff --git a/src/fr/iutfbleau/sae/mimage/RGBImage.java b/src/fr/iutfbleau/sae/mimage/RGBImage.java index a0b99e4..3fc89e0 100644 --- a/src/fr/iutfbleau/sae/mimage/RGBImage.java +++ b/src/fr/iutfbleau/sae/mimage/RGBImage.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.sae; +package fr.iutfbleau.sae.mimage; public class RGBImage {