Codes HUFFMAN + Canoniques : OKKKKKK git add --allgit add --all
This commit is contained in:
@@ -1,22 +1,38 @@
|
||||
package fr.iutfbleau.sae.mhuffman;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class CanonicalCode{
|
||||
private Map<Integer,Integer> codeLenghts = HuffmanNode.getDictionnary();
|
||||
private Map<Integer,Integer> codeLengths = HuffmanTree.getDictionnary();
|
||||
private Map<Integer,Integer> canonicalCodes = new HashMap<>();
|
||||
|
||||
|
||||
public void generateCodes(){
|
||||
// 1- Premiere chose à faire : trier les codes initiaux par longueur du code :
|
||||
public Map<Integer,Integer> 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<Integer> 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<Map.Entry<Integer, Integer>> 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.<Map.Entry<Integer,Integer>>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<Integer, Integer> 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public class HuffmanTree {
|
||||
/**
|
||||
* Dictionnaire pour enregistrer les codes Huffman
|
||||
*/
|
||||
private Map<Integer,String> codes;
|
||||
private static Map<Integer,Integer> 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<Integer,String> generateCodes(){
|
||||
public Map<Integer,Integer> 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<Integer,String> getDictionnary(){
|
||||
return this.codes;
|
||||
public static Map<Integer,Integer> getDictionnary(){
|
||||
return codes;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package fr.iutfbleau.sae;
|
||||
package fr.iutfbleau.sae.mimage;
|
||||
|
||||
public class Pixel{
|
||||
private int r;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package fr.iutfbleau.sae;
|
||||
package fr.iutfbleau.sae.mimage;
|
||||
|
||||
public class RGBImage {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user