Ennoncé - LAMSADE

publicité
MI2E - 2 E A NNÉE
A LGORITHMIQUE G ÉNÉRALE
V. Mousseau
A LGORITHMIQUE G ÉNÉRALE
Partiel - 23/11/2005 - 2 heures
aucun document autorisé
N˚ carte étudiant : ................................
Exercice 1 : La décomposition en facteurs premiers d’un nombre entier strictement positif consiste à
représenter cet entier de la manière suivante : n = ab11 ab22 ...abkk où les ai sont des nombres premiers tels
que ai < aj pour i < j et les bj sont des entiers strictement positifs. Par exemple, 84 = 22 × 31 × 71 .
La décomposition en facteurs premiers d’un entier est unique.
a) Un entier n peut donc être représenté par tableau à double entrée T stockant les ai et les bi :
T [i, 1] contenant ai et T [i, 2] contenant bi . Par exemple 84 est représenté par ,
2 3 7
2 1 1
Donnez la représentation des entiers 72 et 270.
Soient T1 et T2 les tableaux représentant deux entiers n1 et n2 . On note T aille1 et T aille2 les tailles
des tableaux T1 et T2 . Soit la fonction PGCD suivante :
fonction PGCD(T1 , T2 : tableau) → entier
pgcd, p1 , p2 : entier
pgcd ← 1
p1 ← 1
p2 ← 1
tant que (p1 ≤ T aille1 ) et (p2 ≤ T aille2 ) faire
si T1 [p1 ,1] = T2 [p2 ,1]
alors m ← min(T1 [p1 ,2], T2 [p2 ,2])
pgcd ← pgcd × T1 [p1 ,1]m
p1 ← p1 + 1
p2 ← p2 + 1
sinon
si T1 [p1 ,1] < T2 [p2 ,1]
alors p1 ← p1 + 1
sinon p2 ← p2 + 1
fin si
fin si
fin tant que
retourner(pgcd)
b) Faire tourner à la main la fonction PGCD pour les entiers 72 et 84. On prendra soin de noter
les valeurs successives des variables pgcd, p1 , p2 ainsi que la valeur du test de la boucle tant que.
c) Prouver que la fonction PGCD se termine en un temps fini.
d) Déterminer la complexité de la fonction PGCD
.
2
Exercice 2 : On considère deux matrices carrées (d’entiers)
P d’ordre n, A et B. Le produit de A par
B est une matrice carrée C d’ordre n définie par ci,j =
n
k=1 ai,k bk,j .
Donner un algorithme PROD(A,B) calculant le produit de deux matrices représentées sous forme
d’un tableau à deux dimensions. Calculer la complexité de cet algorithme. Doit-on préciser dans quels
cas (pire cas, meilleur des cas, cas moyen) cette complexité est obtenue ?
Exercice 3 : On considère un type de données abstrait pour manipuler les polynômes. Cet exercice
propose d’implémenter certaines opérations de base concernant les polynômes à coefficients entiers
sur une variable. Soit E l’ensemble des polynômes à coefficients entiers sur une variable entière x. On
considère les trois opérations sur E :
– la dérivation : p(x) ∈ E → p′ (x)
– l’addition : p(x), q(x) ∈ E → p(x) + q(x)
– l’évaluation : p(x) ∈ E, a ∈ Z → p(a)
On notera ces opérations Dériv(p), Somme(p, q) et Eval(p, a). Pour les implémenter, on choisit de
représenter un polynôme de E par une liste chaînée p = (M1 , ..., Mk ) de monômes, ordonnée par
degré croissant, où chaque monôme Mj = (aj , dj ) est caractérisé par son degré dj ∈ N et son coeffiP
cient aj ∈ Z∗ . Le polynôme associé à la liste p est alors p(x) = ki=1 ai xdi . Le polynôme nul, noté
polynul, est représenté par M0 = (0, 0).
On utilise alors la structure suivante :
lien=↑cell
cell=Enreg.
deg,coef :entier
suiv :lien
FinEnreg.
Ainsi 3x2 + 4x + 7 est représenté par p
3
p
•
0 7 •
1 4 •
a) Écrire un algorithme implémentant Dériv.
4
2 3
b) Écrire un algorithme récursif implémentant Somme. Quelle est sa complexité au pire-cas ?
c) Soit a ∈ Z et n ∈ N. On suppose que le nombre d’opérations pour calculer an est en Θ(n). Soit
p ∈ E. Quelle est la complexité de l’algorithme naïf d’évaluation de p en a, qui évalue d’abord
chacun des monômes de p en a et fait la somme des valeurs trouvées ?
P
d) Soit p(x) = ni=1 ai xi un polynôme de E de degré n écrit sous sa forme conventionnelle où
chaque coefficient aj est négatif, nul ou positif. On considère la suite H0 , ..., Hn de polynômes
associés à p : H0 (x) = an , H1 (x) = H0 (x) × x + an−l , ..., Hn (x) = Hn−1 (x) × x + a0
La suite (H0 , ..., Hn ) est la liste des polynômes du schéma de Horner et l’on a formellement
p(x) = Hn (x). Déduire du schéma de Horner un algorithme efficace, utilisant une liste doublement chaînée dont vous donnerez la définition, pour évaluer p en x. Quelle est la complexité de
cet algorithme ?
5
Exercice 4 : On considère les déclarations et l’algorithme suivants :
pt-entier=↑entier
lien=↑cell
cell=Enreg.
ele :entier
suiv :lien
FinEnreg.
L1,L2 :lien
p :pt-entier
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
Allouer(p)
p↑←10
Allouer(L1), L1↑.ele←1
L2←L1, L2↑.suiv←Null
Répéter
Allouer(L2)
L2↑.suiv←L1
L2↑.ele←L1↑.ele*2
L1←L2
Jusqu’à L1↑.ele>p↑
Décrire l’état de la mémoire après l’exécution de l’instruction [2]
Décrire l’état de la mémoire après l’exécution de l’instruction [4]
Décrire l’état de la mémoire à l’issue de chaque itération
6
itération 1
itération 2
itération 3
itération 4
itération 5
itération 6
7
Téléchargement