Licence Informatique ISTIC
Module ALG Date :
M´ethodes algorithmiques
TD 0
Cette s´eance de travaux dirig´es est consacr´ee `a la notion de complexit´e, `a l’´etude du com-
portement asymptotique des fonctions ´el´ementaires, et `a la correction et la complexit´e de
plusieurs algorithmes simples. Pour montrer qu’un algorithme est correct, on ´ecrit une pro-
pri´et´e qui est conserv´ee `a chaque ´etape de boucle que l’on appelle invariant de boucle.
Exercice 1 (Algorithmes de tri)
D´emontrer la correction des algorithmes Fusion (du Tri-fusion) et Partition (du Tri-
rapide) vues en cours.
Exercice 2 (Nombres d’op´erations de programmes ´el´ementaires)
Pour chacun des programmes suivants, dire en fonction de nquel est le nombre d’op´erations
op que le programme effectue.
1. pour i de 1 `a n faire op
2. pour i de 0 `a n faire op
3. pour i de 1 `a n-1 faire op
4. pour i de 1 `a n faire
op; op
5. pour i de 1 `a n faire
pour j de 1 `a n faire op
6. pour i de 1 `a n faire
pour j de 1 `a n faire
pour k de 1 `a n faire op
7. pour i de 1 `a n faire
op; op
pour j de 1 `a n faire
op
pour k de 1 `a n faire
op
8. pour i de 1 `a n faire
pour j de 1 `a i faire
op
9. tant que n >= 0 faire
op
n:=n/2
Exercice 3 (Manipulation des ordres de grandeurs)
Dans cet exercice f, g, h sont des fonctions positives.
1. Montrer que si fO(g) et gΘ(h) alors fO(h).
2. Montrer que si fΘ(g) et gO(h) alors fO(h).
3. Montrer par un contre-exemple que si fΘ(g) et gO(h) alors fn’est pas
n´ecessairement dans Θ(h).
M´ethodes algorithmiques
TD 0 2
Exercice 4 (Somme des entr´ees d’un tableau)
On consid`ere l’algorithme suivant :
Entr´ee : un tableau de nombres A de taille n
Sortie : un nombre s
1.s=0
2.i=0
3. tant que i < n faire
4. s = s + A[i]
5. i=i+1
6. retourner s
On veut montrer que l’algorithme calcule
n1
X
i=0
A[i].
1. On consid`ere une ´etape de boucle. On note set s0les valeurs de la variable savant et
apr`es l’´etape de la boucle, et iet i0les valeurs de la variable iavant et apr`es l’´etape de
la boucle. Montrer que si s=
i1
X
j=0
A[j] alors s0=
i01
X
j=0
A[j].
On appelle l’´enonc´e “`a la fin d’une ´etape de boucle, les variables set iv´erifient l’´egalit´e
s=
i1
X
j=0
A[j]” un invariant de boucle.
2. Montrer que avant la boucle l’invariant est v´erifi´e.
3. En d´eduire que `a la fin de la boucle s=Pn1
j=0 A[j].
4. Montrer que la complexit´e de cet algorithme est Θ(n).
Exercice 5 (Calcul du maximum d’un tableau)
1. En s’inspirant de l’exercice pr´ec´edent, ´ecrire un algorithme qui prend en param`etre un
entier net un tableau d’entiers Ade taille n, et qui retourne le maximum mdes entiers
du tableau et l’indice kd’une occurence de mdans le tableau.
2. Donner un ´enonc´e qui caract´erise le fait que met ksont corrects. Un tel ´enonc´e est
appel´e une sp´ecification1.
3. `
A l’aide de la sp´ecification, ´ecrire un invariant de boucle et montrer qu’il est correct,
c’est-`a-dire qu’il est vrai au d´ebut de la boucle et qu’il est conserv´e `a chaque ´etape de
boucle.
4. En d´eduire, que l’algorithme fonctionne.
5. Quelle est la complexit´e si l’on prend comme op´erations ´el´ementaires les comparaisons.
1C’est le contrat que l’utilisateur de l’algorithme passe avec le d´eveloppeur.
M´ethodes algorithmiques
TD 0 3
6. Quelle est la complexit´e si l’on prend comme op´erations ´el´ementaires les affectations.
7. Quelle est la complexit´e si l’on prend comme op´erations ´el´ementaires les comparaisons
et les affectations.
Exercice 6 (´
Ecriture d’un nombre en base 2)
1. D´ecrire deux m´ethodes pour convertir un nombre nen base 2.
On consid`ere l’algorithme suivant :
Entr´ee : un entier n et un tableau A allou´e.
Sortie : un tableau A et un entier i
1. m = n
2.i=0
3. tant que m > 0 faire
4. A[i] = m mod 2
5. m = m div 2
6. i = i + 1
7. retourner A, i
2. Montrer que pour tout i, `a la fin de la i-`eme ´etape de boucle n=m×2i+Pi1
j=0 A[j]×2j.
3. En d´eduire qu’`a la fin Acontient l’´ecriture de nen base 2 c`ad. n=Pi1
j=0 A[j]×2j.
Exercice 7 (Calcul de an)
1. ´
Ecrire un algorithme qui prend en param`etre un nombre aet un entier positif ou nul n
et qui retourne an.
2. `
A l’aide d’un invariant de boucle montrer que l’algorithme est correct.
3. Quelle est la complexit´e de cet algorithme ?
On consid`ere maintenant l’algorithme suivant :
Entr´ee : un nombre a et un entier positif n
Sortie : un nombre res
1. m = n
2.b=a
3. res = 1
4. tant que m > 0 faire
5. si m mod 2 == 1 alors
6. res = res*b
7. m = m div 2
8. b = b*b
9. return res
4. Quel est le nombre d’´etapes de boucle ?
M´ethodes algorithmiques
TD 0 4
5. Montrer que `a la fin de chaque ´etape de boucle, on a
an=res ×bm.
6. En d´eduire que l’algorithme retourne an.
Exercice 8 (Calcul de n!)
On consid`ere l’algorithme suivant :
Entr´ee: un entier n>0
Sortie: la factorielle n!
1. res = 1
2.m=n
3. tant que m>0 faire
4. res = res*m
5. m = m - 1
6. retourner res
1. Montrer que l’invariant
res =
n
Y
i=n2+1
i(1)
est vrai au d´epart de la boucle et conserv´e ensuite.
2. En d´eduire que le programme retourne n! (on rappelle que n! = Qn
i=1 i).
3. Quelle est la complexit´e de cet algorithme ?
1 / 4 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 !