package fr.iutfbleau.sae.mhuffman; import java.util.*; public class CanonicalCode{ private Map codeLengths = HuffmanTree.getDictionnary(); private Map canonicalCodes = new HashMap<>(); 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 : // 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 !!! // referencement de méthode : passer une méthode déja existante 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; } public int getCode(){ return 0; } public int getLength(){ return 0; } public Map getCanonicalCodes(){ return this.canonicalCodes; } }