Université Hassan 2 de Casablanca
Faculté des Sciences et Techniques de Mohammedia
DEPARTEMENT GENIE ELECTRIQUE
Deuxième année de Cycle d’ingénieur :
Génie Electrique et Télécommunications
Codage Huffman
Rédacteur : Enseignant :
Mohammad Amin OUEDRAOGO Pr I.ELMOURABIT
Année académique 2024-2025
Université Hassan 2 de Casablanca
Faculté des Sciences et Techniques de Mohammedia
Mise en contexte
Dans l'ère moderne des télécommunications et du traitement de l'information,
l'optimisation de la transmission des données est cruciale. Les méthodes de compression de
données jouent un rôle vital en permettant de réduire la quantité de données nécessaires
pour représenter l'information sans compromettre sa qualité. Parmi ces méthodes, le
codage de Huffman se distingue comme une technique de compression sans perte
particulièrement efficace.
Le codage de Huffman, développé par David A. Huffman en 1952, est un algorithme de
codage basé sur les fréquences des symboles dans un ensemble de données. En attribuant
des codes plus courts aux symboles les plus fréquents et des codes plus longs aux symboles
moins fréquents, il permet une compression significative des données. Cette technique est
largement utilisée dans divers domaines, allant de la compression des fichiers texte et des
images à la transmission de données dans les systèmes de communication.
Ce rapport explore en détail le codage Huffman sur Matlab.
Principe
function simpleHuffmanCoding()
% Saisie des symboles et probabilités
n = input('Entrez le nombre de symboles : ');
lettres = cell(1, n);
probas = zeros(1, n);
% Saisie des lettres
for i = 1:n
lettres{i} = input(['Entrez le symbole ', num2str(i), ' : '], 's');
end
% Saisie des probabilités
for i = 1:n
probas(i) = input(['Entrez la probabilité du symbole ', lettres{i}, ' :
']);
end
% Vérification des probabilités
if abs(sum(probas) - 1) > 1e-6
error('La somme des probabilités doit être égale à 1.');
end
% Génération des codes Huffman
codes = construireCodes(lettres, probas);
% Affichage des résultats
disp('=== Résultats du Codage de Huffman ===');
for i = 1:n
Université Hassan 2 de Casablanca
Faculté des Sciences et Techniques de Mohammedia
fprintf('Symbole: %s, Probabilité: %.2f, Code: %s\n', lettres{i},
probas(i), codes(lettres{i}));
end
end
function codes = construireCodes(lettres, probas)
% Création des noeuds de l'arbre
noeuds = [lettres(:), num2cell(probas(:))];
% Construction de l'arbre
while size(noeuds, 1) > 1
% Tri des noeuds par probabilité croissante
noeuds = sortrows(noeuds, 2);
% Fusion des deux noeuds de plus faible probabilité
gauche = noeuds(1, :);
droite = noeuds(2, :);
newNode = {strcat(gauche{1}, droite{1}), gauche{2} + droite{2}};
noeuds = [noeuds(3:end, :); newNode];
end
% Génération des codes
codes = assignerCodes(noeuds{1, 1}, lettres, '');
end
function codes = assignerCodes(arbre, lettres, codeCourant)
% Génération récursive des codes
codes = containers.Map();
if ismember(arbre, lettres)
codes(arbre) = codeCourant;
else
gauche = arbre(1:floor(end/2));
droite = arbre(floor(end/2)+1:end);
% Ajout des codes '0' pour gauche, '1' pour droite
gaucheCodes = assignerCodes(gauche, lettres, strcat(codeCourant, '0'));
droiteCodes = assignerCodes(droite, lettres, strcat(codeCourant, '1'));
% Fusionner les codes
codes = [gaucheCodes; droiteCodes];
end
end
Dans la page suivante nous présentons les résultats d’exécution de ce code.
Université Hassan 2 de Casablanca
Faculté des Sciences et Techniques de Mohammedia
Résultats avec somme des probabilités > 1
Pour la sommes des probabilités étant égale à 1
Université Hassan 2 de Casablanca
Faculté des Sciences et Techniques de Mohammedia
Conclusion
En somme, le codage Huffman joue un rôle crucial dans l'amélioration de la
gestion et du transfert des données. Sa capacité à fournir une compression
optimale sans perte en fait une solution indispensable dans le paysage actuel
des technologies de l'information. À mesure que les besoins en stockage et en
transmission de données continuent de croître, des techniques comme le
codage Huffman resteront des outils essentiels pour répondre à ces défis.