Terminal S ARBRES et CODAGES Informatique et Systèmes Numériques LES ARBRES INTRODUCTON (récupérée sur le Web) : Les arbres sont principalement la structure de donnée utilisés pour stocker des données ordonnées et, d’après Knuth, la plus importante structure non-linéaire intervenant dans l’informatique. Ils sont très utilisés dans tous les domaines, parce que bien adaptés à la représentation naturelle d’information organisée homogène, et d’une grande rapidité et commodité de manipulation. On trouve cette structure dans tous les domaines de l’informatique, que ce soit par exemple en compilation (arbres syntaxiques pour représenter les expressions ou productions possibles d’un langage), en imagerie (les arbres quaternaires), en algorithmique (par exemple, elle est le support de méthodes de tris ou de gestion d’information en tables) ou encore dans les domaines de l’intelligence artificielle (arbres de jeux, arbres de décisions, de résolution, etc.). Les réponses de ce TP sont à rédiger sur une feuille de copie Depuis tout temps, on sait représenter un arbre… Il est constitué de racines, d’un tronc, de branches et de feuilles. Dessinez donc sur votre feuille de copie, et en introduction de ce TP, votre plus bel arbre. En informatique, nous utiliserons ces désignations pour représenter un arbre mais la représentation sera inversée : la racine sera placé en haut, il n’y aura pas de tronc mais des nœuds pour faire partir des branches puis aux extrémités des branches, les feuilles (en bas donc). Exemple : Le nombre de branches par nœuds peut être quelconque et l’arbre peut ne pas être « équilibré » et / ou « complet ». Pour ce TP, nous nous intéresserons uniquement aux arbres binaires : une ou deux branches par nœud. Au niveau le plus élevé, il y a donc un nœud racine. Au niveau directement inférieur, il y a au plus deux nœuds fils. En continuant à descendre aux niveaux inférieurs, on peut en avoir quatre, puis huit, seize, etc. c'est-à-dire la suite des puissances de deux. Un nœud n'ayant aucun fils est appelé feuille. Le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine, est appelé hauteur de l'arbre. Le niveau d'un nœud est appelé profondeur. Revenons à notre premier exercice de cette année : « le nombre mystérieux » : découvrir un nombre entre 0 et 100. Nous avons évoqué, pour trouver la solution avec le moins de coup possible, la formulation suivante : « Diviser pour mieux régner ». 1- Avec les indications ci-dessous, vous allez représentez l’arbre binaire qui permet de représenter le nombre de coup pour trouver un nombre mystérieux. Pour faire simple, vous ne développerez que la branche de gauche de chaque nœud. Le premier coup étant 50 ( (100 + 0) / 2, diviser pour mieux régner ), la racine de notre arbre sera le nombre 50, de profondeur 1. Ensuite, chaque nœud fils sera défini suivant les équations ci-dessous: fils gauche arrondi [ père - ( père / 2 ) ] et fils droite arrondi [ père + ( père / 2 ) ] 2- Avec cette représentation, il est donc possible de définir la hauteur de l’arbre qui permet de trouver le nombre de coup maximum pour la recherche du nombre mystérieux. Quelle est la hauteur de cet arbre ? Terminal S ARBRES et CODAGES Informatique et Systèmes Numériques 3- Quel est donc le nombre de coup pour trouver les valeurs : 6 ; 75 ; 32 ; 3 . 4- Ici notre arbre n’est pas complet. Donner la valeur de la borne maxi de notre arbre, tout en gardant la même profondeur. Le nombre maximum de coup peut être défini par l’équation suivante : Pour obtenir log2 n : Nombre de coup maxi entre 0 et n = log2 n 𝑙𝑜𝑔2 𝑛 = . Mais nous en avons déjà parlé ln 𝑛 ln 2 Passons aux choses sérieuses maintenant. Le code Morse L’alphabet Morse ou code Morse, est un code permettant de transmettre un texte à l’aide de séries d’impulsions courtes et longues, qu’elles soient produites par des signes, des impulsions sonores, de la lumière ou des gestes. Inventé en 1832 pour la télégraphie, ce codage de caractères assigne à chaque lettre, chiffre et signe de ponctuation une combinaison unique de signaux intermittents. Le code Morse est considéré comme le précurseur des communications numériques. 5- Représentez le code Morse à l’aide d’un arbre binaire. La racine sera représentée par un carré (sans valeur), chaque branche portera la valeur point (▄) à gauche et trait (▄▄▄) à droite et chaque nœud (ou feuille) représentera une lettres de l’alphabet suivant son code (ne représentez pas les chiffres dans l’arbre). 6- Quel est la profondeur de l’arbre ? 7- Quel est le nombre de feuille libre à la plus grande profondeur ? 8- Par le calcul, peut-on retrouvez cette valeur et comment ? Ouaouuu, c’est trop fort le code Morse !! CODAGE et DECODAGE de l’information 9- A l’aide du code Morse, codez la séquence « BONJOUR » : 10- Décodez la séquence suivante : ▄▄▄ ▄ ▄▄▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄ ▄ 11- Quelles remarques pouvez-vous faire ? 12- Que manque-t-il à notre séquence pour être décodé ? 13- Décodez maintenant cette séquence : ▄▄▄ ▄ ▄▄▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄ ▄ Terminal S ARBRES et CODAGES Informatique et Systèmes Numériques Sans intermittence, nous pouvons dire que ce code est ambigu car non-décodable Il y a des explications un peu plus loin. Maintenant, définissons un alphabet A tel que : A = { a ; b ; c ; d } Pour chaque lettre de cet alphabet, il est possible de définir un code binaire tel que : a=00 b=01 c=10 et d=11 14- Représenter l’arbre binaire pour cet alphabet : 15- Décoder la séquence suivante : 00110010011110011100100110 16- Par rapport à la question 10, pourquoi pouvez-vous décoder cette séquence ? Notre alphabet A s’enrichi de trois nouvelles lettres : e ; f ; g tel que : A’ = { a ; b ; c ; d ; e ; f ; g } 17- Représenter deux arbres binaires pour cet alphabet : - l’un en gardant le même code pour les lettres {a ; b ; c ; d } : Arbre 1 - l’autre en redéfinissant le code binaire de chaque lettre sur 3 bits : Arbre 2 18- Après avoir analysé le codage et décodage du code Morse et de l’alphabet A, quel est l’arbre (1 ou 2) que vous allez privilégier pour cet alphabet A’ et pourquoi ? 19- Pour un ensemble E "alphanumérique" constitué de chiffres (10) et de lettres minuscules et majuscules (2 x 26). Quelle est la profondeur de l’arbre, chaque lettre ayant le même nombre de bit ? 20- Sur combien de bit sera codé cet ensemble E : La transmission de l’information peut-être représenté par le graphe suivant : Terminal S ARBRES et CODAGES Informatique et Systèmes Numériques Quelque soit la technologie utilisée (électrique, électronique, fibre optique, etc.) le canal ne laisse passer que de l’information binaire (des 0 et des 1). Si nous souhaitons transférer l’ensemble des caractères de la table ASCII (255 caractères) nous devrons coder chaque caractère sur 8 bits (log2 (255)). Ce n’est pas très satisfaisant car dans les mots de notre langue française, il y a des lettres qui sont plus utilisées que d’autres, par exemple le « e » et le « z ». Démarche certainement étudiée par messieurs Samuel Morse et Alfred Vail en 1832. Nous avons vue précédemment que l’on peut coder un alphabet sur un nombre de bit bien défini. Nous avons vue aussi que si le nombre de bit varie pour un alphabet, le codage est possible mais le décodage est impossible, on a évoqué alors que le code est ambigu. Ah !!! Les explications arrivent. Définition du code ambigu : considérons la source composée des trois symboles a, b et c. Ses messages peuvent être n'importe quelle séquence de ces symboles ; par exemple, «aabca» est un message de cette source. Le codage de cette source est le suivant : a 1b 00 c 11 Le codage est ambigu parce ce que, une fois codés, il n'y a aucun moyen de distinguer le message «aaaa» du message «cc». En effet, tous deux sont codés «1111». Pour améliorer la transmission, ne serai-t-il pas judicieux de trouver un code dont la longueur des bits du codage soit inversement proportionnel aux nombres d’utilisation et que ce codage soit non ambigu ? Définition du code non-ambigu : On dit que le code d'une source est non-ambigu si et seulement si chaque séquence (de longueur finie) de mots de code ne correspond qu'à un seul message de la source. Le codage de cette source est le suivant : a 10 b 0c 11 On peut montrer que ce code est non-ambigu. Par exemple, la séquence «101100» se décode «acbb» et la séquence «1101011» se décode «cbac». Dans ce cas, il faut que la séquence soit de longueur finie. 21- représentez l’arbre binaire de cette source non ambigu : Pour ce dernier exercice, vous allez concevoir un arbre binaire pour l’alphabet A’ = { a ; b ; c ; d ; e ; f ; g } tel que le décodage soit non ambigu pour une longueur de séquence finie. Remarque : nous ne tiendrons pas compte ici de la probabilité de sortie de chaque lettre. 22- Ecrivez un arbre binaire non ambigu pour l’alphabet A’ : Remarque : cet arbre n’est pas équilibré (c'est-à-dire non centré sur la racine) et de plus, il est incomplet (il y a des feuilles à chaque profondeur). Il est bien évidement possible de coder et décoder un alphabet avec des longueurs de bit variables et des séquences non finies ……. mais cela est une autre histoire.