L2-GLIN301- Algorithmique et Structures de Données – Examen Session 1 – Janvier 2013 1
Durée : 2 heures ; tous les documents sont autorisés.
1 Listes chaînées
Question 1. (1,5 points) Donnez un algorithme longueurListe qui calcule la longueur d’une liste chaînée. Vous
donnerez bien sûr les nom, type et mode de passage du(des) paramètre(s), ainsi que la complexité de l’algorithme
(exprimée en fonction du nombre nd’éléments de la liste).
Question 2. (3 points) Scinder une liste en 2 consiste à en extraire 2 sous-listes consécutives de même longueur
(à 1 près selon la parité du nombre d’éléments de la liste). .
Algorithme 1 : scinder(dr L1 : Liste, rL2 : Liste)
Données :L1est une liste simplement chaînée d’entiers contenant au moins 2 éléments.
Résultat :L1est la première moitié de la liste en donnée ; L2est la seconde moitié de cette liste ;
Si la longueur de la liste donnée est paire, les listes résultats L1et L2sont de même longueur, sinon L1a un
élément de moins que L2
L’opération scinder ne doit créer aucune nouvelle cellule, elle opère en modifiant les champs succ des
cellules existantes. Elle peut utiliser l’algorithme longueurListe. La figure ci–dessous illustre l’opération scinder.
5 46
5
2 8
L1
2 8
L1
46
L2
Quelle est la complexité de votre algorithme ?
Question 3. (4 points) On dispose de deux listes d’entiers simplement chaînées triées L1et L2. Il s’agit de
fusionner ces 2 listes pour obtenir une liste simplement chaînée triée contenant les éléments de L1et les éléments
de L2. Écrivez un algorithme pour cette opération illustrée par la figure ci-dessous :
Algorithme 2 : fusionner(dL1: Liste ; dL2: Liste) : Liste
Données :L1et L2sont 2 listes triées par ordre croissant
Résultat : Renvoie une liste triée par ordre croissant contenant les éléments de L1et les éléments de L2
8
9
2 986 5
2
L1
L2
5 6
Là encore on souhaite un algorithme qui modifie les champs successeurs des 2 listes sans recopier aucun
élément. Vous ne devez donc pas utiliser d’opération d’insertion, quelle qu’elle soit, ni l’opération créerListe. En
revanche, les chaînages des listes L1 et L2 peuvent (doivent) être modifiés.
Soient n1et n2les tailles respectives des listes L1et L2. Quel est le nombre maximum de comparaisons entre
éléments réalisées par votre algorithme ?
Question 4. (1,5 points) Utilisez les algorithmes longueurListe,scinder et fusionner pour réaliser le tri par
fusion d’une liste simplement chaînée :
Algorithme 3 : TriFusion(dr L: liste d’entier )
Données :Lune liste d’entier
Résultat :Lcontient les mêmes éléments qu’en entrée et est triée par ordre croissant.
Quel est l’ordre de grandeur du nombre de comparaisons exécutées par votre algorithme dans le pire des cas ?
L2-GLIN301- Algorithmique et Structures de Données – Examen Session 1 – Janvier 2013 2
5
8
6
7
1
9
3
Figure 1
2 Arbres
Question 5. (2 points) Écrivez un algorithme qui calcule la profondeur minimum des feuilles d’un arbre binaire
non vide. Par exemple, la profondeur minimum des feuilles de l’arbre de la figure 1 est 2.
Question 6. (3 points) Quelle est la liste des étiquettes obtenue par un parcours en ordre infixe de l’arbre de la
figure 1 ?
Complétez l’algorithme ordreInfixe calculant la liste des noeuds d’un arbre selon l’ordre infixe.
Algorithme 4 : ordreInfixe(dA : Arbre Binaire) : Liste
Données :Aest un arbre binaire
Résultat : Renvoie la liste simplement chaînée composée des étiquettes de Adans l’ordre infixe
Vous pouvez dans votre algorithme utiliser une opération de concaténation. Si c’est la cas, il est inutile de
réécrire l’algorithme de concaténation que vous utilisez. On vous demande par contre de donner ses spécifications.
3 Tableaux
On cherche à vérifier si un tableau d’entiers Tcontient au moins une valeur végale à la somme des valeurs
inférieures strictement à vcontenues dans T.
On supposera que tous les éléments du tableau ont des valeurs différentes.
Par exemple le tableau 982104718contient une telle valeur ; en effet 7 est égale à la somme
des éléments du tableau de valeur inférieure strictement à 7 : 2, 4 et 1.
Question 7. (2,5 points) Écrivez un algorithme pour ce problème dans le cas où le tableau n’est pas trié. Quelle
est la complexité de votre algorithme en fonction de la taille ndu tableau ?
Question 8. (2 points) Écrivez un second algorithme pour ce problème en considérant cette fois-ci que la donnée
est un tableau trié. Quelle est la complexité de votre algorithme en fonction de la taille ndu tableau ?
Question 9. (0,5 point) Est-il intéressant du point de vue de la complexité de trier le tableau pour traiter ce
problème ? Justifiez.
1 / 2 100%