ExamASD3 2021
ExamASD3 2021
ExamASD3 2021
EXERCICE 2 : (4.5pts)
1. Quelle est la complexité de l’algorithme de recherche du minimum d’un tableau de N entiers ?
2. L’algorithme de tri par sélection appliqué à un tableau A de N entiers s’écrit de manière récursive comme suit :
void triSelection(int *A, int deb, int fin)
{ if (deb<fin) {
int min = chercherMinimum(A , deb , fin);
int aux = A[deb]; A[deb] = A[min]; A[min] = aux;
triSelection(A , deb+1 , fin);
}
}
a. Définir la complexité du tri par sélection récursif à l’aide d’une formule de récurrence.
b. A partir de cette formule de récurrence, déterminer la complexité de cet algorithme de tri.
EXERCICE 3 : (7pts)
Partie 1 :
a. Donner l’arbre binaire de recherche contenant les clés : 8,27,13,15,32,50,29,12,30,14,31 en respectant cet ordre.
b. Donner l’arbre après suppression des clés 29 et 27, dans cet ordre.
Partie 2 : (L’arbre binaire de recherche est représenté de manière dynamique)
a. Ecrire une fonction récursive qui affiche l’élément maximal d’un arbre binaire de recherche non vide.
b. Ecrire une fonction récursive abrEquals(Noeud *t1, Noeud *t2) comparant 2 arbres binaires de
recherche de racines respectives t1 et t2. La fonction retourne true si les 2 arbres sont égaux et false sinon.
EXERCICE 4 : (5pts) Un sommet source est un sommet qui n’a pas de prédécesseurs. Etant donné un graphe
orienté de N sommets et M arcs représenté en listes chaînées d’adjacence (voir exemple ci-dessous), écrire une
fonction booléenne permettant de tester si un sommet donné en paramètre est un sommet source. Donner les
instructions de déclaration et analyser la complexité de votre fonction.
Tete
2 1 2 3 NULL
2 3 NULL
3 3 NULL
1 Bon courage…
U.S.T.O. M.B. / Faculté des Mathématiques et Informatique / Dept. Informatique 2ème Année Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h15’ 28 Mars 2021
BAREME DETAILLE
Exercice 1 : Répondre par Vrai ou Faux. (3.5pts : 0.25pt pour chaque question)
Une fonction récursive est un cas spécial d'appel de fonction où la fonction appelée est elle-même 1 Vrai
Pour résoudre un problème, l'utilisation d'une fonction récursive implique forcément une complexité plus faible 2 Faux
La complexité d'un algorithme ne peut être valide que si elle est mesurée indépendamment de la configuration
3 Vrai
matérielle et logicielle
Le pire cas indique la complexité dans le cas idéal, et le meilleur cas la complexité dans le cas défavorable 4 Faux
Deux algorithmes de tri de complexité similaire dans le pire cas ont aussi la même complexité dans le meilleur cas 5 Faux
Un tas est soit un max-tas, un min-tas ou les deux en même temps 10 Faux
La structure en tableau adopté pour les Tas permet des allers retours très faciles entre ancêtres et descendants 11 Vrai
Lorsqu'on supprime un nœud dans un max-tas, il est indirectement remplacé par le maximum de ces 2 fils s'il ∃ 12 Vrai
Plus il y a d'arcs dans un graphe orienté, plus sa densité est faible. 13 Faux
La représentation en listes contigües d'un graphe orienté valué occupe bien moins de cases mémoire qu'une
14 Faux
représentation en matrice d'adjacence quand le graphe a une densité élevée (plus de 80% par exemple).
U.S.T.O. M.B. / Faculté des Mathématiques et Informatique / Dept. Informatique 2ème Année Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h15’ 28 Mars 2021
Exercice 2 : (4.5pts)
2. L’algorithme de tri par sélection appliqué à un tableau A de N entiers s’écrit de manière récursive comme suit :
void triSelection(int *A, int deb, int fin)
{ if (deb<fin) {
int min = chercherMinimum(A , deb , fin);
int aux = A[deb]; A[deb]=A[min]; A[min]=aux;
triSelection(A , deb+1 , fin);
}
}
a. Définir la complexité du tri par sélection récursif à l’aide d’une formule de récurrence.
= T(N–p) + pN – p(p-1)/2
Exercice 3 : (7pts)
31
b. Donner l’arbre après suppression des clés 29 et 27, dans cet ordre.
8 8
15 30
13 32 ou bien 13 32
12 14 30 50 12 15 31 50
31 14
b. Ecrire une fonction récursive abrEquals (Noeud *t1, Noeud *t2) comparant 2 arbres binaires de recherche de
racines respectives t1 et t2. La fonction retourne true si les 2 arbres sont égaux et false sinon.
bool abrEquals(Noeud *t1, Noeud *t2){
if (t1==NULL && t2==NULL) return true; ………………………0.75pt
else if (t1==NULL || t2==NULL) return false; ………………………0.75pt
else if (t1->val==t2->val && abrEquals(t1->filsG,t2->filsG) && abrEquals(t1->filsD, t2->filsD))
0.5pt 0.5pt 0.5pt
return true; ……………0.25pt
else return false; ……………0.25pt
}
U.S.T.O. M.B. / Faculté des Mathématiques et Informatique / Dept. Informatique 2ème Année Licence
Semestre S3 EXAMEN ALGORITHMIQUES ET STRUCTURES DE DONNEES ASD3
Durée : 1h15’ 28 Mars 2021
Exercice 4 : (5pts)
Un sommet source est un sommet qui n’a pas de prédécesseurs. Etant donné un graphe orienté de N sommets et
M arcs représenté en listes chaînées d’adjacence (voir exemple ci-dessous), écrire une fonction booléenne
permettant de tester si un sommet donné en paramètre est un sommet source. Donner les instructions de
déclaration et analyser la complexité de votre fonction.
struct Graphe {
Bloc *Tete[mxNode];
int N,M;
};
Boucle interne :
parcours à chaque itération des successeurs d’un sommet. Au pire cas, les successeurs de tous les sommets
seront parcourus ; soit ∑ 𝑑 = 𝑀 0.75pt