31.07.2015 Views

Janvier 2003

Janvier 2003

Janvier 2003

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5. On veut maintenant implanter le décodage. Etant donnés un message codé et un arbrecodeil s'agit de retrouver le message de caractères. Pour cela on désire écrire une fonctiondecode- message: int List * arbre -+ char List.Le principe consiste à parcourir simultanément la liste de 0 et de 1 représentant lemessage à décoder et l'arbre-code. L'algorithme peut se résumer de la facgn suivante.- Si l'on est sur une feuille de l'arbre, c'est que on a alors reconnu le caractère correspondantà cette feuille, il faut alors le sauvegarder dans le résultat- si le message (suite de 0 et 1) est vide, c'est que l'on a décodé tout le message,- sinon il faut alors continuer le parcours de la liste pour reconnaître les caractèressuivants en utilisant l'arbre-code.- Si l'on n'est pas sur une feuille de l'arbre,- si le premier caractère du message est 0 il faut "descendre" à gauche dansl'arbre-code en considérant le sous-arbre gauche.- sinon (le premier caractère est 1), on "descend" à droite dans l'arbre-code enconsidérant le sous-arbre droit.La fonction g locale à la fonction decode_message réalise cet algorithme. Compléter lafonction decode_message suivante en donnant des expressions pour «VI», «V2», «V3»,«V4» et «V5»let decode_message = function (mess, arbre_code) ->let rec g = function ([J,Feuille car) -> «Vi»1 (message, Feuille car) -> «V2»1 (O::reste_message, Bin(ag,_)) ->1 (i: :reste_message, Bin(_,ad)) ->in «V5» ;;«V3»«V4»Remarque:on ne cherchera pas à écrire une fonction g récursive terminale.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!