Info306 TD 2
Info306 TD 2
Info306 TD 2
Fiche de TD #2
3. Ecrire des algorithmes suivants et donner leur complexité en temps, pour chaque algorithme
appliquer le sur l’arbre ci-dessus :
a. calculer le degré de l’arbre
b. Afficher le chemin d'un nœud partant de la racine
c. Calculer la hauteur ou profondeur d'un arbre
d. Calculer la taille d'un arbre
e. Calculer le nombre de feuilles d’un arbre binaire
f. Vérifier qu’un arbre n’est pas dégénéré
g. Recherche une valeur dans un arbre binaire
1 sur 2
1. Pour le codage à longueur à fixe, l’arbre ne peut pas être construit. Il suffit de trouver une
configuration binaire pour chaque caractère. Ecrire un algorithme qui prend en entrée une chaine de
caractères et met en sortie le codage (Huffman) des caractères de cette chaine. Quels sont les codes
des caractères de CH ?
2. Pour le codage à longueur variable, il faut construire l’arbre de Huffman par une technique
gloutonne.
a. Ecrire une procédure qui prend en entrée une chaine de caractères, et construit l’arbre de
Huffman pour le codage de ses caractères. Appliquer cet algorithme pour construire l’arbre de
codage de la chaine CH.
NB : utiliser les opérations écrites pour la file de priorité
b. Ecrire une procédure qui prend en entrée un arbre de Huffman, et affiche le code de chaque
caractère. Donner le code de chaque caractère de CH.
c. Donner la formule permettant de calculer la taille de l’espace occupé par le code de Huffman
d’une chaine de caractères
d. Le codage de Huffman est préfixe, écrire l’algorithme qui permet faire l’inverse du codage (à
partir du code binaire de Huffman de la chaine et du code de chaque caractère)
3. Comparer les deux approches (à longueur fixe et à longueur variable) en temps de construction du
code et en espace mémoire.
Exercice 6
On donne une expression arithmétique, en notation préfixée rangée dans une chaine de caractères, et
terminée par le caractère #. L’expression est supposée syntaxiquement correcte. Donner un
algorithme permettant de construire l’arbre représentant une expression.
Ecrire une fonction qui recherche un élément dans un arbre et retourne le pointeur sur cet élément.
Supposer que l’arbre est ordonné.
Exercice 7
On peut construire un vecteur d’enregistrement pour représenter un ABR.
1. Proposer une structure de données.
Pour chacune des procédures à écrire, calculer la complexité.
2. Ecrire la procédure permettant de créer un arbre avec cette structure.
3. Ecrire la procédure permettant de vérifier si une valeur est dans l’arbre
4. Proposer une procédure permettant de parcourir l’arbre et afficher ses éléments triés.
Exercice 8
Proposer un algorithme de tri ayant une complexité en O(nlogn) permettant de trier un vecteur
d’éléments. Indication : Utiliser un ABR dans la procédure.
Exercice 9
Donner sous forme d’un tableau la complexité des opérations suivantes sur les listes simples
linéaires, listes circulaires, listes doublement chainées.
1. Insérer un élément dans une liste
2. Supprimer un élément dans une liste
3. Inverser une liste
4. Concaténer deux listes
2 sur 2