1 Listes chaînées

publicité
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.
Téléchargement