Merge branches 'dev' and 'dev' of https://grond.iut-fbleau.fr/dialloa/SAE32_2025 into dev

This commit is contained in:
AlgaLaptop
2026-01-04 18:13:25 +01:00
29 changed files with 1826 additions and 1551 deletions
@@ -1,72 +1,61 @@
package fr.iutfbleau.sae.mhuffman;
import java.util.*;
public class CanonicalCode{
//private Map<Integer, String> codeLengths = new HashMap<>();
//private Map<Integer, String> canonicalCodes = new HashMap<>();
public Map<Integer,String> generateCodes(Map<Integer,String> codesHuffman){
// 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<Map.Entry<Integer, String>> liste = new ArrayList<>(codesHuffman.entrySet());
// ici on comparer par longueur de la valeur ou sinon par la clé
// =============== ATTENTION CLASSE ANONYME !!!!!!! ================
Collections.sort(liste, new Comparator<Map.Entry<Integer, String>>() {
@Override
public int compare(Map.Entry<Integer, String> arg1 ,Map.Entry<Integer, String> arg2) {
int length1 = arg1.getValue().length();
int length2 = arg2.getValue().length();
if (length1 != length2) {
return length1 - length2;
}
return arg1.getKey() - arg2.getKey();
}
});
Map<Integer,String> canonicalCodes = new HashMap<>();
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<Integer, String> entree : liste ) {
int valeur = entree.getKey(); // symbole actuel
int longueur = entree.getValue().length(); // longueur du code actuel
code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente
String codeBinaire = Integer.toBinaryString(code);
// permet d'ajouter des zeros si nécessaire !!!
while (codeBinaire.length() < longueur) {
codeBinaire = "0" + codeBinaire;
}
canonicalCodes.put(valeur,codeBinaire); // ajout dans le dictionnaire
code++; // incrémentation pour la valeur qui suit
temp = longueur; // mise à jour de la longueur précedente
}
return canonicalCodes;
}
public String getCode(Map<Integer,String> canonicalCodes,int value){
return canonicalCodes.get(value);
}
public int getLength(Map<Integer,String> codesH,int value){
return codesH.get(value).length();
}
}
package fr.iutfbleau.sae.mhuffman;
import java.util.*;
public class CanonicalCode{
//private Map<Integer, String> codeLengths = new HashMap<>();
//private Map<Integer, String> canonicalCodes = new HashMap<>();
public Map<Integer,String> generateCodes(Map<Integer,String> codesHuffman){
// 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<Map.Entry<Integer, String>> liste = new ArrayList<>(codesHuffman.entrySet());
// ici on comparer par longueur de la valeur ou sinon par la clé
Collections.sort(liste, new ComparateurCanonique());
Map<Integer,String> canonicalCodes = new HashMap<>();
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<Integer, String> entree : liste ) {
int valeur = entree.getKey(); // symbole actuel
int longueur = entree.getValue().length(); // longueur du code actuel
code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente
String codeBinaire = Integer.toBinaryString(code);
// permet d'ajouter des zeros si nécessaire !!!
while (codeBinaire.length() < longueur) {
codeBinaire = "0" + codeBinaire;
}
canonicalCodes.put(valeur,codeBinaire); // ajout dans le dictionnaire
code++; // incrémentation pour la valeur qui suit
temp = longueur; // mise à jour de la longueur précedente
}
return canonicalCodes;
}
public String getCode(Map<Integer,String> canonicalCodes,int value){
return canonicalCodes.get(value);
}
public int getLength(Map<Integer,String> codesH,int value){
return codesH.get(value).length();
}
}
@@ -0,0 +1,19 @@
package fr.iutfbleau.sae.mhuffman;
import java.util.Comparator;
import java.util.Map;
public class ComparateurCanonique implements Comparator<Map.Entry<Integer, String>> {
@Override
public int compare(Map.Entry<Integer, String> entree1,Map.Entry<Integer, String> entree2) {
int longueur1 = entree1.getValue().length();
int longueur2 = entree2.getValue().length();
if (longueur1 != longueur2) {
return longueur1 - longueur2;
}
return entree1.getKey() - entree2.getKey();
}
}