Série d’exercices 2 : code de Huffman Problème 1
le canal en considérant le code de Huffman obtenu dans le problème 1 Problème 4 Considérons un alphabet composé des 26 lettres minuscules Traer l’arre de Huffman adaptatif après le traitement de la séquene [b b s e w b s l] Mettez à jour le code de chaque lettre après chaque lecture et générer la séquence binaire résultante
ExamendeTP:codagedeHuffman
Une fois l’arbre de Huffman construit, vous pouvez attaquer l’encodage et le décodage d’une chaîne de caractèresviacetarbre 5 3 1Décodage Le décodage est l’opération la plus simple Elle prend en paramètre l’adresse du nœud racine de l’arbre de
Cours/TD 3 Codage Huffman
1 2 Approximation de l’entropie par codage en blocs Limitations du codage de Huffman – Le codage de Huffman impose d’utiliser un nombre entier de bits pour un symbole source ⇒ codage Huffman sur des blocs de n symboles On montre alors qu’on peut s’approcher de facon plus fine de l’entropie
Codage de Huffman - projeteuorg
Le codage de Huffman est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet Le code de Huffman (1952) est un code de longueur variable optimal, c'est-à-dire tel que la longueur moyenne d'un texte codé soit minimale On observe ainsi des réductions de taille de l'ordre de 20 à 90
Corrigé : codage de Huffman Partie ICodage d’une suite de
option informatique Corrigé : codage de Huffman Partie I Codage d’une suite de caractères Question 1 a) Commençons par écrire une fonction assoc de type char >clef >code telle que assoc u c renvoie le codage du
CODAGE ET COMPRESSION D IMAGES SANS PERTES
Exercice 1 (Codage de Huffman) Dans cette exercice nous allons appliquer à l’image le codage de Huffman en considérant les couleurs comme l’alphabet de la source Pour toute lecture, l’image sera parcourue "ligne par ligne" en commençant par le coin en haut à gauche 1
Algo L3 Info Travaux dirigés, séance 101 Compression
Codage de longueur variable Construire avec l’algorithme de Huffman un codage de longueur variable pour A Donner l’arbre de codage correspondant et le tableau des codes Calculer la longueur moyenne du co-dage et commenter le résultat en une phrase Réponse 0 : Après avoir fait tourner Huffman (on peut avoir plusieurs solutions) on obtient
APMM TD correction - Fournier-Sniehotta
Ce codage n’est pas complet, car l’ensemble des mots de code est un sous-ensemble du codage complet de taille 5 : {0, 100, 101, 110, 111} Les codages {0, 10, 110, 111} et {00, 01, 10, 11} sont complets donc mieux adaptés 2 CODAGES COMPRESSIFS: SHANNON, FANO-SHANNON ET HUFFMAN
Cours/TD 4 Compression par transform´ee Codage JPEG
Codage JPEG 1 Compression par transform´ee : transform´ee, quanti-fication, codage pr`es de l’entropie 1 1 Transform´ees Bases orthogonales Definition Soit E
Examen Théorie de l’Information
I - Exercice codage de source (25 minutes) Une source binaire génère les symboles s1 et s2 avec les probabilité p(s1)=0,9 et p(s2)=0,1 Les deux symboles sont indépendants a) Calculer l’entropie de cette source binaire Î H(S) = 0,469 bit/symbole b) Calculer l’entropie de la source étendue, constituée de n=3 symboles de la source
[PDF] codage arithmétique algorithme
[PDF] représentation des nombres signés exercices corrigés
[PDF] exercice de systeme de numeration
[PDF] système binaire informatique
[PDF] calcul nombre binaire
[PDF] cours sur le calcul binaire pdf
[PDF] codage et représentation de l'information exercices corrigés
[PDF] le codage informatique
[PDF] exercice corrigé codage source
[PDF] combien d'information sont représentées par 15 bits
[PDF] virgule fixe et virgule flottant pdf
[PDF] virgule fixe exercices corrigés
[PDF] exercice corrigé codage virgule fixe
[PDF] virgule flottant ieee 754
![ExamendeTP:codagedeHuffman ExamendeTP:codagedeHuffman](https://pdfprof.com/Listes/17/32530-17tp_huffman.pdf.pdf.jpg)
Examen de TP : codage de Huffman
Durée : 3 heures.
1Co dagede Huffman
Le codage de Huffman est un procédé très utilisé en compression de données. Il sert à encoder un texte en
binaire, en utilisant pour chaque lettre un nombre de bits dépendant du nombre de fois où la lettre est présente :
plus la lettre apparaît, plus le nombre de bits est petit. Ainsi, le nombre total de bits utilisés pour encoder le
texte est réduit par rapport à un codage ASCII standard qui utilise huit bits pour chaque lettre.
1.1Arbres binaires
Le code binaire associé à chaque lettre est défini par un arbre binaire. Les feuilles de l"arbre correspondent aux
lettres de l"alphabet. Les noeuds interne ne contiennent pas d"information. Le chemin emprunté pour atteindre
une feuille depuis la racine définit le code de la lettre sur cette feuille : à gauche 0, à droite 1. Par exemple :a0
b0 p0 r111a!0 b!10 p!110 r!111 barbapapa!10011110011001100 1.2Optimisation du co de
Lorsque le texte à encoder est connu, il est possible d"optimiser l"arbre binaire utilisé pour raccourcir les codes
des lettres les plus fréquentes. C"est ce que fait l"algorithme de Huffman : il commence par compter dans le
texte le nombre d"apparitions de chaque caractère. Par exemple, dans la phrase : je veux et j"exige d"exquises excuses nous avons : e : 9 ␣ : 5s : 4 x : 4u : 3 i : 2j : 2 " : 2c : 1 d : 1g : 1 q : 1t : 1 v : 1 où " ␣ » est le caractère espace, et " " » est l"apostrophe.À partir de ces fréquences, l"algorithme initialise un arbre par caractère, avec comme poids le nombre d"ap-
paritions du caractère :9 e5 ␣4 s4 x3 u2 i2 j2 "1 c1 d1 g1 q1 t1 vDans la suite, nous indiquerons le poids d"un sous-arbre au niveau du noeud interne où il est enraciné.
À chaque itération, l"algorithme sélectionne les deux arbres ayant les poids les plus faibles, et les assemble
pour former les deux enfants d"un arbre binaire dont le poids est la somme des deux arbres. Lorsque plusieurs
arbres sont à égalité pour le poids le plus faible, l"arbre sélectionné parmi eux peut être n"importe lequel. Ainsi,
à la première itération, nous pourrions obtenir : 9 e5 ␣4 s4 x3 u2 i2 j2 "1 c1 d1 g1 q2 1 t1 v et après quatre itérations de plus : 9 e5 ␣4 s4 x3 u4 2 1 c1 d2 "4 2 i2 j2 1 g1 q2 1 t1 vLorsqu"il ne reste plus qu"un seul arbre, l"algorithme est terminé. Plus formellement, l"algorithme de Huffman
est le suivant : FonctionHuffman!arbredonnées :l"alphabet et les fréquences de chaque lettre résultat :l"arbre binaire du codage de HuffmanAlgorithmecréer une file à priorités
pour chaquecaractèrecde l"alphabetfairecréer un arbrea a.caractère c a.poids fréquence decajouteraà la file à prioritéstant quela file à priorités contient plus d"un arbrefairecréer un arbrea
a.gauche l"arbre de poids le plus faible de la file à priorités (que l"on retire de la file) a.droite l"arbre de poids le plus faible de la file à priorités (que l"on retire de la file) a.poids a.gauche.poids+a.droite.poidsajouteraà la file à prioritésretournerle seul arbre contenu dans la file à priorités2Base de co de
Nous vous fournissons une archive de base, munie de tous les fichiers à remplir, du Makefile pour les compiler.
Vous n"avez pas normalement besoin d"ajouter de fichiers supplémentaires. 3Mo dalitésde rendu
Votre code est a rendre sous la forme d"une archive via Tomusshttps://tomuss.univ-lyon1.fr. Le Makefile
dispose d"une règle pour générer l"archive pour vous :make archiveCette commande crée une archive avec votre nom d"utilisateur comme nom, et y intègre le Makefile ainsi
que tous les fichierscppethpp. 4Lib ertéd"action et conseils
Pour ce TP, vous êtes autorisés à utiliser toutes les fonctionnalités de la librairie standard. Vous êtes également
autorisés à consulter la documentation en ligne. Vous n"êtes par contre pas autorisés à communiquer entre vous,
oralement ou via votre poste de travail ou votre téléphone. Le code que vous produirez devra rester le votre.
Vous ne recevrez pas de points pour une implémentation tout prête récupérée en ligne. Cela ne vous empêche
pas de vous en inspirer, mais prenez garde à mentionner vos sources car ne pas le faire constitue un plagiat.
Nous sommes conscients que quel que soit le soin que nous mettons à la rédaction du sujet, il est probable
que certaines questions ne soient pas claires pour vous. N"hésitez donc pas à demander à votre encadrant de
clarifier une question pour vous. De même il est parfois difficile d"évaluer la difficulté et le temps nécessaire
pour répondre aux questions. Selon les rendus que nous recevrons, nous en tiendrons compte dans la notation
en notant éventuellement sur plus de 20.Ne jetez pas votre code s"il ne marche pas. Laissez le en commentaire et mentionnez dans vos commentaires
ce que vous avez fait pour essayer de trouver l"erreur, éventuellement les messages d"erreur qui vous semblent
significatifs et ce que vous en avez déduit. Le bonnes choses présentes dans ces commentaires pourront ainsi
éventuellement vous bénéficier.
5V otretra vail
5.1Structure de données de b ase
Pour représenter un arbre de Huffman, vous complèterez la structure présente dans le fichierhuffman.hpp.
La structureHArbrereprésente à la fois un noeud de l"arbre et l"arbre tout entier, donné par sa racine. Chaque
noeud comporte : l"adresse de son enfan tg auche; l"adresse de son enfan tdro it; un p oids; un caractère (q uin"est utilisé q uesi le noeud est une feuille). 5.2Initialisation d"un noeud
Le squelette de code fourni comporte trois fonctions d"initialisation des noeuds. Ces fonctions réalisent l"allo-
cation du nouveau noeud et renvoient son adresse. 5.2.1Initial isationà partir d"un caractère
Cette fonction est utilisée pour initialiser les feuilles de l"arbre. Le poids à fournir est le nombre de fois où le
caractère est apparu dans le texte à partir duquel l"arbre est créé. La fonction réalise l"allocation du noeud sur
le tas, initialise ses champs et renvoie l"adresse du noeud créé. 5.2.2Initial isationà partir des enfan ts
Cette fonction sert à construire l"arbre selon le principe de Huffman. À partir des deux sous-arbres à assembler,
un nouveau noeud est alloué pour leur servir de parent, et pour encoder le poids de l"arbre résultant. Ce
noeud ne représente pas de caractère particulier, seules les feuilles correspondent à un caractère. Comme pour
l"initialisation à partir d"un caractère, le nouveau noeud est alloué sur le tas et son adresse est renvoyée par la
fonction. 5.2.3 Initial isationà partir d"une c haînede caractèresCette fonction est celle qui construit réellement l"arbre via l"algorithme de Huffman. Elle prend en paramètre
la chaîne de caractères à encoder, calcule le nombre d"apparitions de chaque lettre, initialise les feuilles de
l"arbre, puis réalise la fusion progressive des arbres jusqu"à obtenir un arbre unique. C"est l"adresse du noeud
racine de cet arbre qui est renvoyée. Nous vous conseillons de procéder par étapes : lister l"ensem bledes caractères présen tsainsi que leur nom bred"apparitions ; initialiser les feuilles de l"arbre et les insérer dans la file a priorité ; réaliser la fusion progressiv edes arbres.Pour chacune de ces étapes, vérifiez bien que le résultat est correct avant de passer à la suivante.
La chaîne de caractères en entrée est fournie via le typestd::string. Ce type se comporte comme un tableau,
avec quelques outils en plus. Vous pouvez récupérer la taille de la chaîne de caractères viaint taille = s.size() ;
et vous pouvez accéder au ièmecaractère viachar c = s[i] ;
Notez que les caractères sont des nombres codés sur 8 bits, donc entre 0 et 255. Vous pouvez donc facilement
compter les caractères en initialisant un tableau de 256 zéros et en y accédant en utilisant le caractère. Par
exemple :tab["a"] = 12 ; //inscrire 12 dans la case du tableau correspondant au caractere aPour réaliser la fusion des arbres via la file a priorité, nous vous proposons une file a priorité dans les fichiers
huff_heap.[hc]pp. Si vous vous sentez plus à l"aise avec une autre structure de données, vous n"êtes pas
obligés de l"utiliser, mais nous vous le recommandons fortement. Pour que cette structure fonctionne, vous
devez avoir codé correctement la fonctionhuff_poids(HArbre* a). Cette fonction renvoie simplement le poids
du sous-arbre, selon la façon dont vous l"avez stockée dans votre arbre. 5.3Enco dageet déco dage
Une fois l"arbre de Huffman construit, vous pouvez attaquer l"encodage et le décodage d"une chaîne de
caractères via cet arbre. 5.3.1Déco dage
Le décodage est l"opération la plus simple. Elle prend en paramètre l"adresse du noeud racine de l"arbre de
Huffman ayant servi à encoder. Il prend également en paramètre le code à décoder, fourni sous la forme d"un
tableau de bits via le typestd::vector
Le dernier paramètre est la chaîne de caractères à remplir. Pour ajouter un caractère dans cette chaîne, vous
pouvez utilisers.push_back("a") ; //ajout du caractere a en fin de chaineL"algorithme pour le décodage consiste donc à utiliser les bits du code un par un dans l"ordre pour descendre
dans l"arbre à droite ou à gauche. Dès qu"une feuille est atteinte, le caractère de cette feuille est ajouté à la
chaîne de caractères de sortie, et le parcours de l"arbre redémarre de la racine. 5.3.2Enco dagesimple mais coûteux
L"encodage est un peu plus compliqué. Nous vous proposons tout d"abord une version simple. La fonction
d"encodage prend en paramètre l"adresse du noeud racine de l"arbre de Huffman à utiliser, la chaîne de caractères
à encoder, et le tableau dynamique de bits (booléens) à remplir.out.push_back(true) ; // ajout d"un 1
out.push_back(false) ; // ajout d"un 0Nous vous proposons de commencer par écrire une fonction qui prend en paramètre un noeud de Huffman
et un caractère, et qui renvoie un booléen indiquant si le caractère correspond à l"une des feuilles descendantes
du noeud. De cette manière, depuis la racine, vous pouvez déterminer le premier bit du code d"un caractère
en regardant s"il se trouve dans le sous-arbre de gauche ou de droite. Une fois le premier bit déterminé, vous
pouvez descendre dans le sous-arbre correspondant et recommencer pour déterminer le second bit, jusqu"à vous
trouver sur la feuille correspondant au caractère. 5.3.3Enco dageamélio ré
L"algorithme précédent calcule de multiples fois la même chose en lançant de multiples recherches d"un
caractère. De plus chaque recherche va potentiellement explorer tous les noeuds du sous-arbre sur lequel elle
est lancée. Pour améliorer l"algorithme précédent, vous pouvez commencer par lister les feuilles de l"arbre, leurs
caractères, et les code associés. Comme lors de la construction de l"arbre, vous pouvez vous aider d"un tableau
de taille 256 pour associer des informations à des caractères.quotesdbs_dbs29.pdfusesText_35