32... Examen ASD3 2020 Avec Solution
32... Examen ASD3 2020 Avec Solution
32... Examen ASD3 2020 Avec Solution
Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h30 26 Janvier 2020
Exo2 : (5pts) On considère l’algorithme de tri suivant (étrange et inefficace, appelé stooge sort) pour
un tableau T entre les indices i et j.
Tri(T,i,j) {
Si (T[i] > T[j]) alors { a T[i]; T[i] T[j]; T[j] a; }
Si (j > i+1) alors
{ k (j - i + 1)/3;
Tri(T, i, j-k); // On trie les deux premiers tiers
Tri(T, i+k, j); // On trie les deux derniers tiers
Tri(T, i, j-k); // On trie encore les deux premiers tiers
}
} // deux tiers = الثلثين
1. Dérouler l’algorithme sur le tableau T = [ 7 , 9 , 3 ] (L’appel se fait avec Tri(T,0,2)) en indiquant les
états intermédiaires de T.
2. Écrire l’équation de récurrence de sa complexité.
3. Evaluer sa complexité.
Exo3 : (5pts) Soit la liste d’entiers 𝒔 = 11, 15, 5, 2, 3, 9, 17, 21, 22, 13, 19, 4, 12.
1. Construire l’arbre binaire de recherche associé à la liste (en prenant les éléments dans l’ordre où ils sont
donnés). Que devient l’arbre après la suppression de 15 ?
2. En considérant que l’arbre est représenté de manière chaînée (Questions 2 et 3), donner la routine
C/C++ qui affiche la liste 𝑠 triée.
3. Ecrire la fonction C/C++ qui prend en entrée la racine de l’arbre et supprime le plus grand élément.
Exo4 : (7.5pts) Soit le graphe 𝐺 orienté valué (poids>0) représenté comme suit :
SuccPds (Succ = Successeur , Pds = Poids ou valeur de l’arc)
1 1 2 2 17 3 8 4 2 null
2 null
3 2 9 3 14 6 7 null
4 4 2 6 15 null
5 null
6 1 5 2 1 null
BAREME
Exo2 : (5pts) On considère l’algorithme de tri suivant (étrange et inefficace, appelé stooge sort) pour
un tableau T entre les indices i et j.
Tri(T,i,j) {
Si T[i] > T[j] alors { a T[i]; T[i] T[j]; T[j] a; }
Si j > i+1 alors
{ k (j - i + 1)/3;
Tri(T, i, j-k); // On trie les deux premiers tiers
Tri(T, i+k, j); // On trie les deux derniers tiers
Tri(T, i, j-k); // On trie encore les deux premiers tiers
}
}
1. Dérouler l’algorithme sur le tableau T = [ 7 , 9 , 3 ] (L’appel se fait avec Tri(T,0,2)) en indiquant les
états intermédiaires de T. 1.5pts (0.75 + 0.75)
[7,9,3][3,9,7][3,7,9]
2. Écrire l’équation de récurrence de sa complexité. 1.5pts (0.5 1ère ligne, 1pt 2ème ligne)
3. Evaluer sa complexité. 2pts (1pt développement, 1pt résultat final ; accepter le résultat final même si la base du
logarithme et les constantes ont été laissées)
2𝑛 4𝑛 8𝑛 2 𝑛 2 𝑛 3 −1
𝑇(𝑛) = 3𝑇 + 1 = 9𝑇 + 4 = 27𝑇 + 13 = ⋯ = 3 𝑇 + 3 =3 𝑇 +
3 3 27 3 3 2
Exo3 : (5pts) Soit la liste d’entiers 𝑠 = 11, 15, 5, 2, 3, 9, 17, 21, 22, 13, 19, 4, 12.
1. Construire l’arbre binaire de recherche associé à la liste (en prenant les éléments dans l’ordre où ils sont
donnés). Que devient l’arbre après la suppression de 15 ? 1pt (0.5+0.5)
11
5 15
2 9 13 17
3 12 21
4 19 22
11 11
5 13 5 17
5
2 9 12 17 2 9 13 21
3 21 3 12 19 22
4 19 22 4
2. En considérant que l’arbre est représenté de manière chaînée (Questions 2 et 3), donner la routine
C/C++ qui affiche la liste 𝑠 triée. 1pt
void parcoursInfixe(Noeud *racine)
{ if (racine!=NULL) {
parcoursInfixe(racine->filsGauche);
cout<<racine->element<<endl;
parcoursInfixe(racine->filsDroit); }
}
U.S.T.O. M.B. / Faculté des Mathématiques et Informatique / Dept. Informatique 2ème A. Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h30 26 Janvier 2020
3. Ecrire la fonction C/C++ qui prend en entrée la racine de l’arbre et supprime le plus grand élément. 3pts
Exo4 : (7.5pts) Soit le graphe orienté valué (poids>0) représenté comme suit :
1 1 2 2 17 3 8 4 2 null
2 null
3 2 9 3 14 6 7 null
4 4 2 6 15 null
5 null
6 1 5 2 1 null
2. Considérons le problème du plus court chemin du sommet 1 vers les autres sommets : (3.75=2.5+0.25+1)
a. Appliquer l’algorithme de Dijkstra. 2.5pts
1 2 3 4 5 6 Fix
0 ∞ ∞ ∞ ∞ ∞ 1 0.25
17 8 2 ∞ ∞ 4 0.25
17 8 ∞ 17 3 0.25
17 ∞ 15 6 0.25
16 ∞ 2 0.25
Arrêt car la valeur minimale est ∞ 0.25
Tableau P (Paths)
1 2 3 4 5 6
0 0/1/6 0/1 0/1 0 0/4/3 0.5
U.S.T.O. M.B. / Faculté des Mathématiques et Informatique / Dept. Informatique 2ème A. Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h30 26 Janvier 2020
Résultat final
Tableau V (Valeur de plus court chemin)
1 2 3 4 5 6
0 16 8 2 ∞ 15
Tableau P (Paths)
1 2 3 4 5 6
0 6 1 1 0 3
Acceptez le déroulement « façon THG » ; les itérations sont écrites l’une après l’autre, le tableau V est appelé
éventuellement 𝜋. Validez l’itération en vérifiant le Vmin (𝜋 ), le sommet marqué qui est stocké dans un ensemble
appelé M et aussi les mise à jours des valeurs 𝜋 des successeurs non marqué du sommet fixé.
b. Après exécution de l’algorithme de Dijkstra, que signifie un sommet non fixé (non marqué) ? 0.25pt
Il n’existe pas de chemin entre le sommet de départ et le sommet non fixé.
c. Citer le principal inconvénient de l’algorithme de Dijkstra. Donner sa complexité, et dire s’il est
possible de réduire cette complexité. Justifier. 1pt (0.25+0.25+0.5)
3. En considérant le graphe représenté sous forme de listes chainées d’adjacence, écrire une fonction
C/C++ qui permet de tester si un sommet donné en paramètre est isolé. 3pts
// Au cas où l’étudiant utilise la représentation chainée vue dans le dernier exercice de la fiche TD, acceptez et
appliquez le même barème.