Série D Exercices D Algorithmique II
Série D Exercices D Algorithmique II
Série D Exercices D Algorithmique II
Exercice 2
Ecrire un algorithme qui calcule à une valeur approchée μ donnée la racine carrée d'un
nombre a > 0 sachant que la suite :
X1 = a
Xn = (a/Xn-1 + Xn-1 ) / 2
converge vers la racine carrée de a.
Exercice 3
Considérons un tableau T de N nombres entiers ( N > 1). On veut écrire un seul algorithme
qui répond aux questions suivantes :
- déterminer le troisième nombre premier s'il existe,
- déterminer le deuxième carré parfait s'il existe,
- déterminer le nombre de diviseurs du premier nombre pair et du dernier nombre impair.
Pour cela, créer et utiliser les fonctions suivantes :
- prem( nombre ) de type booléen qui est égal à vrai si nombre est premier, faux sinon.
- carré (nombre) de type booléen qui est égal à vrai si nombre est carré parfait, faux sinon.
- nbdiv(nombre) de type entier qui donne le nombre de diviseurs de nombre.
Exercice 1
Soit les fonctions f donnée par :
Fonction f(n: entier, Var cmpt : entier): entier
Debut
cmpt cmpt + 1
Si n < 2 Alors
Retourner n
Sinon
Retourner f(n-1, cmpt) + f(n-2, cmpt)
Fin Si
Fin
On fait appel à la fonction f avec n=3 et cmpt=0. Quelle est la valeur retournée par cet appel ?
Quelles sont les valeurs de n et de cmpt après l’exécution de cet appel ?
Exercice 2
On considère la procédure suivante :
1
Série d’exercices à traiter en TD
2
Série d’exercices à traiter en TD
Exercice 2
Trouver l’ordre de grandeur des fonctions suivantes:
1. n2 + 2n; log n2
2. log 3n; n + 1/n
3. n + log n
Exercice 3
Parmi les relations suivantes, quelles sont celles qui sont correctes.
1. O(1) = O(10); O(1) = 10; n+1 = O(n), étant une constante
2. (n + 1)! = O(n!) ; 2n = O(n!), ; n! = O(2n); log nn = O(log n!); nn = O(n!)
Exercice 4
Quelle est la valeur de k à la sortie de la boucle de la portion d’algorithme ci-dessous:
k1
Tant que (k <= n) Faire
kk*2
Fin tant que
En déduire la complexité temporelle de cette portion d’algorithme
Exercice 5
Calculer les complexités temporelles en fonction de la variable n des portions d’algorithme
ci-dessous.
Algorithme 1
d 1
Tant que (d*d <= n) Faire
d d * 2
Fin Tant que
Algorithme 2
d1
Tant que (d*d <= n) Faire
dd*2+1
Fin tant que
Algorithme 3
Pour (i0; i<n; ii+1) Faire
Pour (j0; j<n; jj+1) Faire
ss+1
Fin Pour
Fin Pour
Exercice 6
Que font les fonctions récursives suivantes:
3
Série d’exercices à traiter en TD
Début
SI (n = 0) Alors
retourner 0
Fin Si
Retourner (mystere1(n-1) + n*n)
Fin
2. Fonction mystere2(b : Reel, n: Entier): Reel
Début
SI (n = 0) Alors
retourner 1
Fin Si
retourner (1+ b*mystere1(b,n-1))
Fin
Exercice 7
Déterminer pour chacune de ces fonctions récursives leur complexité temporelle.
Exercice 9
On considère un ensemble T de n ≥ 2 entiers distincts stockés dans un tableau (T n’est pas
supposé trié). Résoudre les questions suivantes :
1 - Proposer un algorithme en O(n) pour trouver deux éléments x et y de T tels que |x − y|≥|u − v|
pour tout u, v T.
2 - Proposer un algorithme en O(n log n) pour trouver deux éléments x et y de T tels que x y et
|x− y| |u − v| pour tout u, v T, u v.
3 - Soit m un entier arbitraire (pas nécessairement dans T), proposer un algorithme en O(n log n)
pour déterminer s’il existe deux éléments x et y de T tels que x + y = m.
4
Série d’exercices à traiter en TD
1. Faites la trace de l'exécution de f1(4) en indiquant sous forme d'un tableau les valeurs des
variables R, V et i à chaque itération.
2. Montrer que R = 2i -1 et V = 2(i-1) sont 2 propriétés invariantes pour l'algorithme f1.
3. Quelle est la valeur retournée par la fonction f1 ?
Exercice 2
FONCTION g(n : Entier) : Entier
//Données : un entier n appartenant à IN
VAR m, I, R: Entier
DEBUT
R0
mn
TANT QUE m > 0 FAIRE
POUR i 1 à m FAIRE
5
Série d’exercices à traiter en TD
RR+1
FIN POUR
POUR i m à n FAIRE
RR+1
FIN POUR
mm-1
FIN TANT QUE
Retourner R
FIN
a) Exprimez en fonction de la donnée n, le nombre de fois que la fonction g exécute les
affectations des lignes 1 et 2. Vous donnerez l'expression exacte de ce nombre ainsi que les
étapes de son calcul.
b) Donnez, en fonction de n, l'ordre de grandeur du nombre d'affectations exécutées par la
fonction g.
c) Quelle est la valeur renvoyée par g(n) ?
Exercice 3
Montrer la correction de l’algorithme de tri par insertion vu à la fin du dernier cours :
on prouvera un invariant pour chaque boucle. Donner le pire et le meilleur cas pour la complexité
et évaluer cette complexité dans les deux cas.
Exercice 4
On se donne un tableau S d’entiers triés par ordre croissant et un entier cible x. Proposer
un algorithme linéaire pour trouver s’il existe deux éléments de S dont la somme vaut x. Prouver
que la boucle termine (quelle quantité décroît à chaque itération ?) et que votre algorithme est
correct (en montrant un invariant).