Vous êtes sur la page 1sur 4

Université Yahia Fares de Médéa Mardi 14 Mars 2017

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


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

Exercice 01: (03 pts) Fonction XXX(T : Tableau , d,f : entier)


Var I,V : reel ;
Soit T un tableau de m réels. Debut
Si(f>d+1) alors
On considère la fonction XXX I = (f-d+1)/3 ;
XXX(T, d, f-I);
suivante : XXX(T, d+I, f);
XXX(T, d, f-I);
Question : Sinon
Si (f=d+1) alors
1. Que fait cette fonction ? Si (T[d]< T[f]) alors
(la fonction peut s’appeler V = T[d];
Fct(A, 1, m)) T[d] = T[f];
2. Quelle est sa complexité ? T[f] = V;
(Il faut trouver l'équation FinSi
de récurrence) FinSi
FinSi
Fin.
Solution :

1. La fonction trie un tableau en ordre décroissant.


2n
C (n )  3*C ( ) d
3
2. Equation de récurrence :
n
C (n )  3*C ( ) d
(3 / 2)
log3/2 (3)
=> Complexité C (n )  n  O (n log 2 (3) ) (Théorème n°2 )

Exercice 02: (05 pts ) Commentaire [K1]: Annales.pdf


Soit T une liste de n (n est puissance de 2) éléments rangés dans un tableau numéroté de 1
à n. On suppose que la seule opération qu’on sait effectuer sur les éléments est de vérifier
si deux éléments sont égaux ou non. On dit qu’un élément x ϵ T est majoritaire si T
contient strictement plus de n/2 occurrences de x.
Question : Ecrire un programme «diviser pour régner » qui vérifié si la liste T contient
un élément majoritaire.

Département Mathématiques et Informatique Page | 1/2 ‫ﺎﻟﺘﻮﻓﯿﻖ‬ ‫ﺑ‬


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

(Booleen, Entier) Majoritaire (T : Tableau, d,f : Entier)


Debut
Si d==f alors return (vrai, T[i]) FinSi;
Entier m = [(d+f)/2];
(bx, x) = Majoritaire(T, d, m) ;
(by, y) = Majoritaire(T, m+1, f) ;
Si bx== faux && by== faux alors return (faux, 0) FinSi;
Si bx==vrai && by==vrai alors
Si x==y alors return (vrai, x)
Sinon
ox = Ocurrences(T, d, f, x) ;
oy = Ocurrences(T, d, f, y) ;
Si (ox > m/2) alors return (vrai, x) ;
Sinon
Si (oy > m/2) alors return (vrai, y) ;
Sinon
return (faux, 0) ;
FinSi
FinSi
FinSi
Sinon
Si bx==vrai alors
Si (ox > m/2) alors return (vrai, x) ;
Sinon
return (faux, 0) ;
FinSi
Sinon
Si by==vrai alors
Si (oy > m/2) alors return (vrai, y) ;
Sinon
return (faux, 0) ;
FinSi
FinSi
FinSi
Fin
n
Equation de récurrence : C (n )  2*C ( )  c * n
2
=> Complexité C (n )  n log(n ) (Théorème n°1 )

Département Mathématiques et Informatique Page | 2/2 ‫ﺎﻟﺘﻮﻓﯿﻖ‬ ‫ﺑ‬


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

Exercice 03: (06 pts ) Commentaire [K2]: série de TD n°2


Dans cet exercice, nous considérons des ensembles représentés par des tableaux.
Nous voulons écrire une fonction récursive Intersection(A, B) qui nous renvoie
l'intersection des deux ensembles qui lui sont passés en argument.
1. Cas des ensembles non triés : Ecrire un tel algorithme et calculer sa complexité.
2. Cas des ensembles triés (dans l'ordre croissant) : Ecrire un tel algorithme et
calculer sa complexité.
1. Cas des ensembles non triés
Appel initial de la fonction : Intersection(A, B, 1, R,0)
Intersection(A, B, rangB, R, rangR)
Debut
Si Recherche(A,1,B[rang])== vrai alors
rangR = rangR + 1 ;
R[rangR] = B[rangB] ;
FinSi
Intersection(A, B, rangB+1, R, rangR);
Fin
//Recherche : Appel initial de la fonction : Recherche(A,1,elt)
Boolean Recherche (A, rangA, elt)
Debut
Si rangA > longueur(A) alors return faux; FinSi
Si A[rangA]== elt alors return vrai; FinSi

return Recherche (A, rangA+1, elt);


Fin
Complexité : C (m )  C (m  1)  c * n  C (n )  O (n * m )
2. Cas des ensembles triés (dans l'ordre croissant)
Appel initial de la fonction : Intersection(A,1, B, 1, R,0)
Intersection(A, rangA, B, rangB, R, rangR)
Debut
Si rangA <= longueur(A) et rangB <= longueur(B) alors
Si A[rangA]== B[rangB] alors
rangR = rangR + 1 ;
R[rangR] = A[rangA] ;
return Intersection(A, rangA+1, B, rangB+1, R, rangR);
Sinon
Si B[rangB]>A[rangA] alors
return Intersection(A, rangA+1, B, rangB, R, rangR);
Sinon
return Intersection(A, rangA, B, rangB+1, R, rangR);
FinSi
FinSi
FinSiMathématiques et Informatique
Département Page | 3/2 ‫ﺎﻟﺘﻮﻓﯿﻖ‬ ‫ﺑ‬
Fin
Complexité : C (n  m )  C (n  m  1)  c  C (n )  O (n  m )
Exercice 04: (05 pts ) Commentaire [K3]: PC1.corrige.pdf
n
Soit un polynôme de degré n , P ( x )  a i * x i où ai sont des coefficients.
i 0
Question : Proposer un algorithme de complexité O(n) qui permet de calculer la valeur du
polynôme P ( x ) pour une valeur x 0 donnée.
NB : Vous devez proposer une structure de données adéquate pour représenter le polynôme
P (x ) et ensuite écrire l'algorithme proposé.
Exemple :
P (x )  1* x 0  3* x 2  6 * x 3  4* x 5 un polynôme de degré n  5
Soit x 0  1
L'algorithme doit retourner P ( x 0  1)  2

Astuce :
Le polynôme P (x )  1* x 0  3* x 2  6 * x 3  4* x 5 peut être s'écrit sous la forme
suivante : P (x )  1  x (0  x (3  x ( 6  x (0  x (4))))) . Cette forme de ne pas calculer
les puissances de x à chaque fois.
Le polynôme P (x ) de degré n peut être représenté par un tableau A de ses coefficients
de taille n  1 .
Exemple : A :
4 0 -6 3 0 1

D'où la fonction d'évaluation


//lo = n+1 : taille du tableau
reel Eval_Polynome(A : Tableau, lo : entier, x0:reel)
Debut
réel eval = A[lo] ;
Pour i=lo-1 à 1 faire
eval = A[i] + eval * x ;

retrun eval;
Fin.
Complexité : O(lo)=> O(n)

Département Mathématiques et Informatique Page | 4/2 ‫ﺎﻟﺘﻮﻓﯿﻖ‬ ‫ﺑ‬

Vous aimerez peut-être aussi