Projet Les marmottes đčâïž
Crédits
Cette activitĂ© est adaptĂ©e du jeu "Les marmottes ont le sommeil lĂ©ger" de Marie Duflot Kremer, maĂźtre de confĂ©rences chez UniversitĂ© de Lorraine, LORIA & Inria Nancy Grand Est et dâune activitĂ© de lâIREM de Grenoble
Crédit de mise en forme : Rodrigo SCHWENCKE
1. Les marmottes ont le sommeil lĂ©ger đčâïž

Principe du Jeuâïž
Un groupe de marmottes au sommeil lĂ©ger (cĂ d qui se rĂ©veillent lorsque d'autres marmottes leur passent Ă cĂŽtĂ©, durant leur hibernation), moyennement satisfaites de leur terrier actuel, dĂ©cide de concevoir un nouveau terrier, et de le creuser avant lâhiver.
- Chaque marmotte doit dormir dans une Salle (de sommeil) de son terrier
- Chaque marmotte se réveille un certain nombre précis de fois (connu à l'avance) durant son hibernation en hiver
- Le but de jeu Ă©tant de gĂȘner/rĂ©veiller le moins possible les autres marmottes durant leur hibernation, car elles ont chacune le Sommeil LĂ©ger.
RĂšgles de Construction du Terrierâïž
Plus précisément, on déduit des rÚgles du jeu précédentes, que la contruction du terrier doit suivre les \(3\) rÚgles suivantes :
- RĂšgle de StabilitĂ© du Terrier : A partir de l'entrĂ©e, ou Ă partir de l'extrĂȘmitĂ© d'un couloir (appelĂ© un embranchement/
noeud ), on peut au maximum creuser deux couloirs, sinon la structure risque de s'effondrer. - RÚgle Individuelle de Sommeil Léger 1 : Pas de marmottes aux embranchements/noeuds.
Autrement dit, les Salles de Sommeil des marmottes sont forcément situées au fin fond d'une galerie.
En effet, si la salle de sommeil était sur un noeud (ou encore pire, au milieu d'un couloir) alors elle se ferait marcher dessus par d'autres marmottes habitant plus loin dans le terrier, et cela la réveillerait : elle a le sommeil léger. Les marmottes dorment donc uniquement au fond d'une galerie qui ne donne sur rien d'autre que sa salle. - RÚgle Globale de Sommeil Léger 2 : Minimisation du bruit total des déplacements
MĂȘme le simple dĂ©placement des marmottes qui se rĂ©veillent, Ă cause du bruit lointain de leurs petites pattes, gĂ©nĂšre des vibrations qui dĂ©rangent le groupe pendant leur sommeil : elles ont vraiment le sommeil lĂ©ger !! Du coup, comme on sait combien de fois chacune va se rĂ©veiller et sortir (et revenir) du terrier pendant l'hiver, l'objectif sera que la somme des dĂ©placements de toutes les marmottes soit la plus petite possible.. Par souci de simplicitĂ© (et parce que cela change pas le rĂ©sultat), on pourra ne compter que les sorties du terrier, inutile de compter les retours dans le terrier.
En Pratique : Comment compter les déplacements des marmottes ?
Voici deux exemples de comptage des déplacements des marmottes :
- Une marmotte dormant Ă \(4\) couloirs de lâentrĂ©e, et se rĂ©veillant \(5\) fois dans lâhiver va parcourir \(4\times 5=20\) couloirs aller (il faudrait aussi compter les \(20\) retours, mais pour simplifier on ne va compter que les allers).
- une marmotte qui se réveille \(6\) fois, et située à \(3\) couloirs de la sortie, devra parcourir \(6 \times 3 = 18\) couloirs aller (il faudrait aussi compter les \(18\) retours, mais pour avoir des chiffres moins gros on ne va compter que les allers). Si on la mettait à \(1\) couloir de la sortie, elle ne parcourrait plus que \(6 \times 1 = 6\) couloirs.
A vous de jouer đč
A l'aide du matériel distribué en classe, déterminer quel est le meilleur terrier pour ces marmottes.
Le meilleur terrier
Pour trouver le meilleur terrier, il y a une méthode infaillible, qui ne demande pas trop de calculs :
- on choisit les deux (ou deux parmi les) marmottes qui se lÚvent le moins souvent, et on les relie par un morceau de terrier. Sur le coude on note le nombre de fois que ce morceau est emprunté (donc la somme des valeurs des deux marmottes, par exemple 2 + 3 = 5)
- on recommence exactement la mĂȘme chose, mais les deux marmottes reliĂ©es Ă lâĂ©tape prĂ©cĂ©dente comptent maintenant pour une seule marmotte qui se rĂ©veillerait 5 fois
- on continue, jusquâĂ ce que toutes les marmottes soient reliĂ©es en un seul terrier.
- et comme on a noté des chiffres sur les coudes de terriers au fur et à mesure on a juste à faire la somme de ces chiffres pour compter le nombre de déplacements
2. Algorithme de compression de Huffmanâïž
Et quel est le lien avec l'informatique ?
L'algorithmme que nous venons d'appliquer pour trouver les meilleurs terriers, est utilisé dans le domaine de la compression de texte.
Le but de la compression de texte est ... de réduire le poids du texte. Les textes sont codés en binaire la plupart du temps.
Le code ASCII
Le but de la compression est de trouver un codage du texte, en binaire parce que dans un ordinateur tout est stockĂ© en binaire, qui soit le plus court possible, et qui soit facile Ă coder et dĂ©coder. En gĂ©nĂ©ral pour reprĂ©senter un texte non compressĂ©, on utilise le code ASCII ou lâune de ses extensions. Mais mĂȘme rien quâen ASCII on a 8 chiffres binaires (8 bits) pour stocker un caractĂšre. Si ce nâest pas grave que le code du "w" ou du "k" soient longs en français, par contre le "e" qui apparaĂźt plus souvent on aimerait bien que son code soit plus court, et câest prĂ©cisĂ©ment ce que fait le codage de Huffman : donner Ă chaque lettre un code binaire tel que si on met bout Ă bout le code de toutes les lettre du texte, on a une version codĂ©e la plus courte possible
â©ïž Retourner les terriers !
La structure que lâon obtient est celle dâun arbre, avec la racine en haut, les couloirs qui se nomment des branches, et les extrĂ©mitĂ©s des branches appelĂ©es feuilles. Et dans cet arbre une marmotte correspond Ă une lettre, et son nombre de rĂ©veils au nombre de fois que la lettre apparaĂźt dans un texte.
đ Essayons d'y voir plus clair
Les textes à envoyer via un canal de communication sont (la plupart du temps) codés en binaire.
Essayons avec BARBARA RASE BASILE LE BARBIER
On obtient la fréquence d'apparition de chaque lettre :
| Lettre | Fréquence |
|---|---|
| A | 6 |
| B | 5 |
| R | 5 |
| espace | 4 |
| E | 4 |
| S | 2 |
| I | 2 |
| L | 2 |
- Ecrire sur chaque feuille une lettre en commençant par assembler les lettres avec la fréquence d'apparition la plus faible. On additionne sur la racine la somme des fréquences.
- On poursuit la construction de l'arbre en appliquer les contraintes vues avec les marmottes.
- Ajouter sur chaque branche de gauche un \(0\) et sur chaque branche de droite un \(1\)
Sur notre structure de terrier on peut facilement lire le code de chaque lettre : on part de la racine
du terrier et on lit le bit Ă©crit sur chaque couloir que lâon emprunte. Par exemple si pour aller de lâentrĂ©e Ă la lettre A on prend Ă gauche puis Ă droite puis Ă droite, le code de A est 011
Codage Préfixe
Texte de Marie Duflot Kremer
Imaginez que je donne le code 0 Ă la lettre E, 01 Ă la lettre S et 10 Ă la lettre T.
Pour coder ce nâest pas difficile : ETES donne 0 puis 10 puis 0 puis 01 soit 010001.
Par contre pour dĂ©coder câest franchement plus difficile. Si je lis 10010001 je sais que ça commence par un T, et puis il me reste 010001 que je peux dĂ©coder en ETES ou SEES. Sur cet exemple je sais que TETES est un mot et TSEES pas, mais sur un long texte je vais au mieux perdre Ă©normĂ©ment de temps, au pire avoir plusieurs possibilitĂ©s et ne pas savoir comment dĂ©coder.
Le problĂšme est que 0 est Ă la fois le code de E et le dĂ©but du code de S, donc si je vois un 0 je ne sais pas si je peux dĂ©coder E tout de suite ou prendre le prochain bit et les dĂ©coder ensemble. Si au contraire on impose un codage prĂ©fixe, on interdit que le code dâune lettre soit le dĂ©but du code dâune autre. Du coup on va commencer Ă la racine, suivre les branches en fonction des 0 et 1 dans le texte compressĂ©, et dĂšs quâon arrive sur une lettre on la note (comme on ne peut pas continuer plus loin car la branche sâarrĂȘte lĂ , on est sĂ»r dâavoir lu le code de cette lettre) et on repart de la racine en continuant Ă lire les chiffres binaires. Le dĂ©codage/dĂ©compression se fait donc trĂšs rapidement et sans hĂ©sitation.
Et les codes qui ne sont pas prĂ©fixes, on peut les jeter ? Non, pas tous. Si on regarde le code Morse par exemple, on a le E (un point) qui est prĂ©fixe du I (deux points). La diffĂ©rence câest quâen Morse on fait une lĂ©gĂšre pause entre deux lettres qui permet de savoir quand une lettre sâarrĂȘte et ainsi diffĂ©rencier un double e dâun i. En informatique tous les 0 et les 1 sont rangĂ©s les uns Ă la suite des autres, sans pause, et câest pour cela quâon a besoin dâun codage prĂ©fixe.
đ„ Challenge đ„
- Mettez vous par binĂŽme.
- Choisissez un mot ou une phrase de 15 caractĂšres max
-
Compresser votre phrase
-
Fournissez Ă votre binĂŽme le code binaire obtenu, ainsi que l'arbre de compression.
đ„ Qui est le plus rapide Ă dĂ©compresser ?
Résumé Le codage de Huffman
Il a Ă©tĂ© prouvĂ© que lâalgorithme vu avec les marmottes est lâalgorithme optimal pour le codage de symboles uniques, câest-Ă -dire quâon ne peut pas faire plus court que ce codage. Cet algorithme a Ă©tĂ© inventĂ© par lâinformaticien amĂ©ricain David Albert Huffman, et publiĂ© en 1952.
Ătant optimal il est utilisĂ© dans de trĂšs nombreuses application de compression de donnĂ©es, comme le cĂ©lĂšbre format zip (ou rar). En fait il constitue souvent la derniĂšre Ă©tape de la compression (on effectue dâabord une premiĂšre compression qui dĂ©pend de la nature des donnĂ©es (son, image, texte, vidĂ©oâŠ) puis on stocke les donnĂ©es compressĂ©es avec lâalgorithme dâHuffman).
Le but de cette deuxiĂšme partie est dâĂ©crire un programme capable dâeffectuer la compression et la dĂ©compression dâun texte avec lâalgorithme de Huffman et dâestimer son efficacitĂ©.
La compression dâun texte avec lâalgorithme de Huffman se fait en quatre Ă©tapes :
- Analyse du texte et détermination des fréquences des différents symboles constituant le texte
- CrĂ©ation de lâarbre binaire de codage en suivant lâalgorithme vu avec les marmottes
- CrĂ©ation dâun dictionnaire de codage associant Ă chaque symbole son code binaire dans lâarbre
- Encodage du texte, caractĂšre par caractĂšre en utilisant le dictionnaire de codage