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 n d’é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, r L2 : Liste) Données : L1 est une liste simplement chaînée d’entiers contenant au moins 2 éléments. Résultat : L1 est la première moitié de la liste en donnée ; L2 est la seconde moitié de cette liste ; Si la longueur de la liste donnée est paire, les listes résultats L1 et L2 sont de même longueur, sinon L1 a 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. L1 2 8 6 5 4 L2 L1 2 8 5 6 4 Quelle est la complexité de votre algorithme ? Question 3. (4 points) On dispose de deux listes d’entiers simplement chaînées triées L1 et L2 . Il s’agit de fusionner ces 2 listes pour obtenir une liste simplement chaînée triée contenant les éléments de L1 et les éléments de L2 . Écrivez un algorithme pour cette opération illustrée par la figure ci-dessous : Algorithme 2 : fusionner(d L1 : Liste ; d L2 : Liste) : Liste Données : L1 et L2 sont 2 listes triées par ordre croissant Résultat : Renvoie une liste triée par ordre croissant contenant les éléments de L1 et les éléments de L2 L1 2 8 2 L2 5 6 5 6 8 9 9 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 n1 et n2 les tailles respectives des listes L1 et 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 : L une liste d’entier Résultat : L contient 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 8 6 3 9 1 7 5 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(d A : Arbre Binaire) : Liste Données : A est un arbre binaire Résultat : Renvoie la liste simplement chaînée composée des étiquettes de A dans 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 T contient au moins une valeur v égale à la somme des valeurs inférieures strictement à v contenues dans T . On supposera que tous les éléments du tableau ont des valeurs différentes. Par exemple le tableau 9 8 2 10 4 7 1 8 contient 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 n du 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 n du 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.