Universit´e de Provence
Master GSI 2004-2005
Algorithmique. TD1
Recherches squentielles
1. Donner les algorithmes de recherche s´equentielle d’un ´el´ement xdans une liste d’´el´ements de
eme type dans chacun des cas suivants:
L’ordre des ´el´ements est quelconque
La liste est ordonn´ee.
On utilise une sentinelle.
2. Evaluer en fonction du nombre d’´el´ements de la liste le nombre de comparaisons n´ecessit´ees
par chacune des recherches ci-dessus, dans le pire des cas et en moyenne. Que peut-on dire
des ordres de grandeur asymptotiques?
Fusion
Donner l’algorithme de fusion de deux tableaux tri´es. Estimer, en fonction de la taille des tableaux,
le comportement asymptotique de l’algorithme.
Sin x
1. Donner un algorithme de calcul de sin(x) `a l’aide de la formule :
sin(3x) = 3 sin(x)4sin3(x)
et en approximant sin(x) par xau voisinage de 0 (donner une solution r´ecursive et it´erative).
2. Prouver la correction de ces deux algorithmes.
3. Calculer leur complexit´e.
Puissance ´egyptienne
On se propose de comparer deux algorithmes calculant la puissance ni`eme d’un nombre r´eel x.
L’algorithme 1 consiste `a faire une multiplication de nfacteurs ´egaux `a x.
L’algorithme 2 repose sur le fait que pour tout entier nstrictement positif:
(R)xn= (x2)n/2si n est pair
xn=x.xn1si n est impair
1. Ecrire l’algorithme 1.
2. Donner une version r´ecursive de l’algorithme 2 reposant sur les relations (R).
3. Donner une version it´erative de l’algorithme 2 et prouver sa correction.
On se propose maintenant de comparer l’efficacit´e de ces trois versions. Pour les complexit´es
en temps, la taille de la donn´ee est mesur´ee par le nombre net les op´erations fondamentales
sont les divisions et les multiplications.
4. Comparer l’encombrement m´emoire de l’algorithme 1 et des deux versions de l’algorithme 2.
5. Calculer la complexit´e en temps de l’algorithme 1.
6. Montrer, sans chercher `a les calculer, que les complexit´es en temps des deux versions de
l’algorithme 2 sont identiques.
7. Evaluer le comportement asymptotique de la complexit´e en temps de l’algorithme 2.
Coefficients binˆomiaux
Pour tout couple d’entiers (n,p) tels que 0 pn, on note Cp
nle nombre de combinaisons `a p
´el´ements dans un ensemble `a n´el´ements. Ces nombres Cp
nsont aussi appel´es coefficients binˆomiaux
car ils interviennent dans la formule du binˆome. On rappelle les formules suivantes qui permettent
de calculer tout coefficient binˆomial:
(F)Cn
n= 1 et C0
n= 1
Cp
n=Cp1
n1+Cp
n1pour tout couple (n, p) tel que 1 p(n1)
On se propose d’´ecrire de deux mani`eres diff´erentes un algorithme qui ´etant donn´es deux nombres
entiers pet nsuppos´es valides, calcule le nombre Cp
n.
1. Donner l’algorithme r´ecursif induit par les formules (F).
2. On note t(n, p) le nombre d’additions n´ecessaires au calcul de Cp
npar la m´ethode pr´ec´edente
(les d´ecr´ementations d’indices ne seront pas compt´ees comme additions: seules seront prises
en compte les sommes de coefficients binˆomiaux). Montrer que t(n, p) = Cp
n1. En
d´eduire, pour un entier ndonn´e, le nombre moyen pour 0 pn, d’additions n´ecessaires
au calcul de Cp
n.
3. Cet algorithme est-il efficace? Pouvait-on s’en douter? Justifier.
On peut aussi utiliser les formules (F) pour donner un algorithme it´eratif. On emploie
pour cela la m´ethode du triangle de Pascal: c’est une matrice dont les lignes et les colonnes
sont nuerot´ees `a partir de 0 et dans laquelle Cp
nse trouve `a l’intersection de la ligne num´ero
net de la colonne num´ero p. Cette matrice est triangulaire inf´erieure puisque pn. De plus
toute ligne de la matrice peut-ˆetre d´eduite de la ligne pr´ec´edente et des formules (F).
4. Donner les six premi`eres lignes du triangle de Pascal.
5. Donner un algorithme it´eratif pour calculer Cp
n.
6. Evaluer en fonction de nla complexit´e de l’algorithme en nombre d’additions pour le calcul
de Cp
n. Que peut-on dire de l’espace occup´e par cet algorithme?
7. Cet algorithme peut-il ˆetre consid´er´e comme efficace? Comparer avec l’algorithme r´ecursif.
Pouvait-on se douter du r´esultat? Pourquoi?
Suite de Fibonacci
La suite de Fibonacci (Fn) est d´efinie par:
(F)
F0= 1
F1= 1
Fn=Fn1+Fn2pour tout n2
1. Donner l’algorithme r´ecursif induit par les formules (F).
2. Calculer, en fonction de nle nombre d’additions n´ecessaires pour le calcul de Fn. Quel est
son comportement asymptotique? Quel est l’espace occup´e?
3. Donner un algorithme it´eratif de calcul de Fn.
4. epondre `a la question 2 dans le cas de cet algorithme.
Recherche Dichotomique
Soit une liste d’´el´ements tous distincts d’un ensemble ordonn´e E, class´es par ordre croissant et
rang´es dans un tableau Tnum´erot´e de 0 `a n1. Soit xun ´el´ement de E. Consid´erons l’algorithme
suivant, o`u ebut,f in et milieu d´esignent des indices du tableau, et (d´ebut+fin)/2 le quotient entier
de (d´ebut+fin) par 2.
ebut := 0
fin := n-1
tant que ebut fin faire
milieu := (d´ebut+fin)/2
si xT[milieu] alors fin := milieu - 1
si xT[milieu] alors ebut := milieu + 1
trouv´e := (d´ebut = fin + 2)
rang := fin + 1
1. On peut sans changer le probl`eme, supposer que le tableau commence et se termine par
deux case fictives; la premi`ere, T[1] contiendrait un ´el´ement strictement inf´erieur `a tous les
´el´ements de E, not´e par exemple −∞; la seconde T[n] contiendrait un ´el´ement strictement
sup´erieur `a tous les ´el´ements de E, not´e +. Montrer que la proposition
T[d´ebut-1] <x<T[fin +1] ou (x = T[d´ebut-1]=T[fin+1] et d´ebut = fin + 2)
est un invariant de la boucle.
2. Montrer que cet algorithme est correct pour la sp´ecification suivante : xTtrouv´e =
vrai.
Montrer de plus que si xT,rang contient le rang de xdans T, sinon rang contient l’indice
du tableau o`u xdoit ˆetre ins´er´e pour que le tableau reste tri´e.
3. Calculer sa complexit´e.
4. Comparer avec les algorithmes de recherche s´equentielle.
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !