Vous êtes sur la page 1sur 5

Université Yahia Fares de Médéa Dimanche 14 Janvier 2018

1ère année MATSER (L.M.D) 10 :30 -12 :00


Option : ISTW Algorithmiques Avancés Durée : 01h :30min
et Complexité
EFS 1er Semestre
Documents non autorisés

Exercice 01: (04 : 02+02 pts) Tri gnome


Dans le tri gnome, on commence par le début du tableau, on compare deux éléments
consécutifs (i, i+1): s’ils sont dans l’ordre on se déplace d’un pas vers la fin du
tableau (incrémente) ou on s’arrête si la fin est atteinte; sinon, on les permute et on se
déplace d’un pas vers le début du tableau (décrémente) ou si on est au début du tableau
alors on se déplace d’un pas vers la fin (incrémente).

1. Ecrire un algorithme effectuant le tri gnome.


2. Donnez la complexité du tri gnome au meilleur cas et au pire cas? Justifiez votre
réponse.

1. T[1..Taille] d'entiers
3. d'entiers
void Tri_Gnome(Tableau* T, Entier Taille) //Tri croissant
croissant
Debut
Entier i = 1;
TantQue(i < Taille) faire
Si (T[i] < T[i+1]) alors
i++;
Sinon
la case
Permuter(T, i, i+1); //permuter le contenu de la case d'indice
d'indice ii avec
avec celle
celle d'indice
d'indice i+1
i+1
Si (i>1) alors i--
Sinon i++;
FinSi
FinSi
Fin.
FinTantQue
Fin.
4. Complexité au meilleur cas est C(n) = O(n); elle correspond le cas ou le tableau est déjà trié d'une
manière croissante.
2. Complexité au meilleur cas est C(n) = O(n); elle correspond le cas ou le tableau est déjà trié d'une
Complexité
manière au pire cas est C(n) = O(n2); elle correspond le cas ou le tableau est trié d'une
croissante.
au pire cas est C(n) = O(n2); elle correspond le cas ou le tableau est trié d'une
manière décroissante.
Complexité
manière décroissante.

Exercice 02: (04.5 : 03 + 01.5 pts )


Soit T un tableau de n entiers strictement positifs. Nous voulons retourner l'élément qui a
le plus grand nombre d'occurrences dans le tableau T.
1. Ecrire une fonction récursive pour ce problème. Puis, calculer sa complexité.
2. Ecrire une seconde fonction de type "diviser pour régner" qui résout le même
problème décrit précédemment. Puis, calculer sa complexité.

Département Mathématiques et Informatique Page | 1/5 Faculté des Sciences


Université Yahia Fares de Médéa Dimanche 14 Janvier 2018
1ère année MATSER (L.M.D) 10 :30 -12 :00
Option : ISTW Algorithmiques Avancés Durée : 01h :30min
et Complexité
EFS 1er Semestre

Dans cette exercice, nous allons utiliser la fonction int nbOcc(Tableau T, Entier d,f, Entier x) qui
permet de retourner le nombre d'occurrences de x dans l'intervalle d'indices [d, f] du tableau T.
Cette fonction est de complexité O(f-d+1).
3. La fonction suivante retourne l'élément qui a le plus grand nombre d'occurrences dans T ainsi
que son nombre d'occurrences.
(Entier, Entier) PlusGrandOcc(Tableau T, Entier d,f) //d : premier indice, f : dernier indice
Debut
Si d==f alors retourner (T[d], 1) FinSi;
(x, nbx )= PlusGrandOcc(T, d+1, f);
Si T[d]==x alors retourner (x, nbx+1) FinSi.
nbo = nbOcc(T, d , f, T[d]) ;
Si nbx  nbo alors retourner (x, nbx) FinSi
retourner (T[d], nbo);
Fin.
Appel de la fonction : PlusGrandOcc(T, 1, n).
Complexité : C(n) = C(n-1) + an + cste. => C(n)= O(n2)

4. Diviser pour régner.


(Entier, Entier) PlusGrandOcc2(Tableau T, Entier d,f)
Debut
Si d==f alors retourner (T[d], 1) FinSi;
Enier m = Partitionner(T,d,f); //Partitionner le tableau en deux moities selon le pivot T[f].
//Elle est la fonction utilisée par le Tri rapide (Quick Sort).
// Complexité de cette fonction est : O(n)
(x, nbx )= PlusGrandOcc2(T, d, m);
(y, nby )= PlusGrandOcc2(T, m+1, f);

Si (nbx)  nby) alors


retourner (x, nbx)
Sinon
retourner (y, nby)
FinSi
Fin

Complexité au meilleur des cas :C(n) = 2C(n/2) + an + cste. => C(n)= O(n*log2(n)).
Complexité au pire des cas : C(n) = C(n-1) + an + cste. => C(n)= O(n2)

Département Mathématiques et Informatique Page | 2/5 Faculté des Sciences


Université Yahia Fares de Médéa Dimanche 14 Janvier 2018
1ère année MATSER (L.M.D) 10 :30 -12 :00
Option : ISTW Algorithmiques Avancés Durée : 01h :30min
et Complexité
EFS 1er Semestre

Exercice 03: (08.5 pts : 02.5 + 02.5 + 03.5 ) Recherche de pics


Soit T[0..n-1] un tableau de n entiers. On dit que T[i] est un pic si est seulement si
: T[i-1] T[i]  T[i+1]. On suppose que : T[-1] = T[n] = -. Le but de
cet exercice est de trouver un pic dans un tableau (n'importe lequel).

Exemple : 1 2 11 9 8 7 3 5 1

 T[2]=11 et T[7]=5 sont des pics.


1. En remarquant qu'il existe toujours un pic. Ecrire une fonction permettant de
retourner un pic d'un tableau T. Puis calculer sa complexité.
2. Supposons que T[k+1]>T[k] et pourtant T[k] n'est pas un pic, avec
0< k < n-1. Montrer qu'il existe un pic dans l'intervalle [k+1, n-1] du tableau
T.
3. En déduire un algorithme de type "diviser pour régner" qui retourne un pic d'un
tableau T. Puis, calculer sa complexité.

1. T[0..n-1] d'entiers
Entier Pic(Tableau T, Entier n)
Début
T[-1] = - ; T[n] = - ;
Pour(i=0; i<n; i++) faire
Si (T[i] T[i-1] && T[i] T[i+1]) alors retourner i FinSi
FinPour
retourner -1;
Fin
Complexité : C(n)= O(n)

2. Utilisant la démonstration par l'absurde


Supposons qu'il n'existe pas un pic dans l'intervalle [k+1, n-1] du tableau T
Nous avons T[k+1]>T[k]alors T[k] n'est plus un pic.
Donc, nous devons avoir T[k+2]>T[k+1] sinon, T[k+1] serait un pic
De même, nous devons avoir T[k+3]>T[k+2] sinon, T[k+2] serait un pic
...
De même, nous devons avoir T[n-1]>T[n-2] sinon, T[n-2] serait un pic
Comme T[n-1]>T[n] alors T[n-1] est un pic (Contradiction).

Département Mathématiques et Informatique Page | 3/5 Faculté des Sciences


Université Yahia Fares de Médéa Dimanche 14 Janvier 2018
1ère année MATSER (L.M.D) 10 :30 -12 :00
Option : ISTW Algorithmiques Avancés Durée : 01h :30min
et Complexité
EFS 1er Semestre

5. Diviser pour régner.


Entier Pic2(Tableau T, Entier d, f)
Debut
Si d==f alors retourner d FinSi
Entier m =[(d+f)/2]
Si (T[m] T[m-1] && T[m] T[m+1]) alors retourner m FinSi
Si(T[m+1] T[m]) alors retourner Pic2(T, m+1, f) FinSi
retourner Pic2(T, d, m-1)
Fin

Complexité : C(n) = C(n/2) + Cste => C(n)= O(log2(n))

Exercice 04: (03 pts ) Le diamètre d'un arbre binaire


Soient A un arbre binaire et x,y deux nœuds de A. A
On définit la distance DIST(x,y) comme étant la n1
longueur du plus court chemin de x à y (i.e. la plus
n2 n3
petite suite finie d'arcs consécutifs, reliant x à y).
Exemple: n4 n5 n6

La suite d'arcs reliant n4 à n5 est : (n4, n2),


n7 n8
(n2, n1), (n1, n3) et (n3, n5)
=> DIST(n4, n5) = 4.
On définit le diamètre de A comme étant la distance maximale dans l'arbre, i.e.
DIAM(A)= max DIST(x,y) où x,y sont deux nœuds de l'arbre A.
Exemple:
DIAM(A) = DIST(n7, n8) = 6
1. Proposez une fonction récursive qui permet de calculer le diamètre d'un arbre binaire.
Remarque : FG(x) (respectivement. FD(x)) retourne le fils gauche (respectivement le
fils droit) pour le nœud x.

Département Mathématiques et Informatique Page | 4/5 Faculté des Sciences


Université Yahia Fares de Médéa Dimanche 14 Janvier 2018
1ère année MATSER (L.M.D) 10 :30 -12 :00
Option : ISTW Algorithmiques Avancés Durée : 01h :30min
et Complexité
EFS 1er Semestre

Pour un chemin dans A il y a trois possibilités :


1. Le chemin se trouve entièrement dans FG(A),
2. Le chemin se trouve entièrement dans FD(A),
3. Le chemin passe par (ou se termine à) la racine A. Donc, le chemin qui mène
de x vers y est de la forme suivante :
x ->... -> A -> ...-> y
Hauteur(FG(A)) Hauteur(FD(A))

Entier DIAM (Arbre A)


Debut
Si A==NULL ou Feuille(A) alors retourner 0 FinSi
Dfg = DIAM (FG(A)) ;
Dfd = DIAM (FD(A)) ;
retourner Maximum3(Dfg, Dfd, Hauteur(FG(A))+Hauteur(FD(A))+2);
Fin

Département Mathématiques et Informatique Page | 5/5 Faculté des Sciences

Vous aimerez peut-être aussi