Files
SAE32_2025/src/fr/iutfbleau/sae/mhuffman/ComparateurCanonique.java
T

41 lines
1.4 KiB
Java
Raw Normal View History

2026-01-03 13:08:16 +01:00
package fr.iutfbleau.sae.mhuffman;
2026-01-07 19:27:03 +01:00
2026-01-03 13:08:16 +01:00
import java.util.Comparator;
import java.util.Map;
2026-01-07 19:27:03 +01:00
/**
*
* Comparateur utilisé lors de la génération des codes canoniques.
* Il permet de trier des couples (symbole, code Huffman sous forme de chaîne).
*
* Le tri se fait dans cet ordre :
* 1. Par longueur du code (du plus court au plus long)
* 2. En cas d'égalité, par ordre croissant des symboles
*/
2026-01-03 13:08:16 +01:00
public class ComparateurCanonique implements Comparator<Map.Entry<Integer, String>> {
2026-01-07 19:27:03 +01:00
/**
* Compare deux entrées contenant un symbole et son code Huffman.
*
* @param entree1 première entrée à comparer
* @param entree2 deuxième entrée à comparer
* @return un entier négatif si entree1 doit venir avant entree2,
* positif si elle doit venir après,
* et zéro si elles sont équivalentes selon le tri.
*/
2026-01-03 13:08:16 +01:00
@Override
2026-01-07 19:27:03 +01:00
public int compare(Map.Entry<Integer, String> entree1, Map.Entry<Integer, String> entree2) {
2026-01-03 13:08:16 +01:00
int longueur1 = entree1.getValue().length();
int longueur2 = entree2.getValue().length();
2026-01-07 19:27:03 +01:00
// On compare d'abord la longueur des codes
2026-01-03 13:08:16 +01:00
if (longueur1 != longueur2) {
return longueur1 - longueur2;
}
2026-01-07 19:27:03 +01:00
// Si les longueurs sont identiques, on trie par symbole
2026-01-03 13:08:16 +01:00
return entree1.getKey() - entree2.getKey();
}
2026-01-07 19:27:03 +01:00
}