Université Mohammed Premier Année Universitaire
Faculté des Sciences 2023/2024
Département d’Informatique Filières Info
Oujda – MAROC Semestre 2
Module : Alg. II
Série de TD N°3
Exercice 1:
Écrire un sous-algorithme qui teste si un nombre passé en paramètre est
premier et qui retourne vrai s'il l'est et faux sinon. Calculer sa complexité.
Réponse 1 :
Fonction Test_premier( n : Entier) : Booléen
Variable
i : Entier
DébutFonction
Pour i allant de 2 à sqrt(n) Faire
Si (n mod i=0) Alors
Retourner Faux
FinSi
FinPour
Retourner Vrai
FinFonction
Donc la complexité est en O(sqrt(n)).
Exercice 2:
Écrire un algorithme qui permet de trier un tableau en utilisant le tri par
sélection puis calculer sa complexité. Le tri par sélection est très simple : il
consiste à sélectionner dans le tableau la plus petite valeur et de la permuter
avec le premier élément du tableau, puis la deuxième plus petite valeur (hors
premier élément) et de la permuter avec le deuxième élément du tableau et ainsi
de suite, et cela pour tous les éléments du tableau.
Réponse 2 :
Fonction indice_val_min (T:tableau[ ] d’entiers, taille
: Entier, k : Entier) : Entier
Variable
i, imin, min : Entier
DébutFonction
min ← T[k]
imin ← k
Pour i allant de k+1 à taille-1 Faire
Si ( T[i]<min) Alors
min ← T[i]
imin ← i
FinSi
1
FinPour
Retourne imin
FinFonction
Procédure Tri_croissant (T : tableau[ ] d’entiers,
taille : Entier) :
Variable
imin, temp,k : Entier
DébutProcédure
Pour k allant de 0 à taille-2 Faire
imin ← indice_val_min(T,taille,k)
temp ← T[k]
T[k] ← T[imin]
T[imin] ] ← temp
FinPour
FinProcédure
Algorithme Programme_Pricipal
Constante n ← 6
Variable
i: Entier
T : tableau[ 0..n-1] d’entiers
Début
Pour i allant de 0 à n-1 Faire
DébutPour
Lire (T[i])
FinPour
Tri_croissant (T,n)
Pour i allant de 0 à n-1 Faire
Afficher (T[i])
FinPour
Fin
Exercice 3 :
En utilisant la définition suivante :
x0 = 1;
xn = xn/2 * xn/2, si n est pair;
xn = x*xn/2 * xn/2 si n est impair (n/2=n div 2).
Ecrire un sous-algorithme qui calcule xn, avec x est un nombre réel et n est un
entier.
Réponse 3 :
Fonction Puissance2(x : Réel, n : Entier) : Réel
Variable p : Réel
DébutFonction
Si (n=0) Alors Retourner 1 FinSi
p ← Puissance2(x,n/2)
p ← p*p
Si (n%2==0) Alors
Retourner p
2
Sinon
Retourner x*p
FinSi
FinFonction
Donc la complexité de cette méthode est en O(log2(n)).
Exercice 4 :
On désire calculer 2n, en utilisant, 2n =2n-1 +2n-1 , avec n est un entier.
Écrire une fonction qui traduit cet algorithme.
Donner la complexité en temps de cet algorithme.
Réponse 4 :
Fonction Puissance2n(n : Entier) : Entier
DébutFonction
Variable
p : Entier
DébutFonction
Si (n=0) Alors Retourner 1 FinSi
p ← Puissance2n(n-1)
Retourne p+p
FinFonction
Donc la complexité de cette méthode est en O(n).
Exercice 5 :
En utilisant la boucle "Pour", écrire un sous-algorithme qui permet de calculer
la suite de Fibonacci. Calculer sa complexité.
Réponse 5 :
Fonction Fib_iter ( n : Entier ) : Entier
Variable a, b, c, i : Entier
DébutFonction
Si ( n = 0) ou ( n = 1) Alors
Retourne 1
FinSi
a ← 1
b ← 1
Pour i allant de 2 jusqu’à n Faire
c ← a+b
a ← b
b ← c
FinPour
Retourne c
FinFonction
La complexité de cette fonction est linéaire.
Exercice 6 :
Écrivez un algorithme récursif naïf calculant la suite de Fibonacci.
3
Écrire un autre algorithme récursif terminal qui calcule la suite de
Fibonacci , pour n > 0, dont sa complexité est linéaire.
Réponse 6 :
Fonction Fib (n : Entier) : Entier
DébutFonction
Si (n=0) ou (n=1) Alors
Retourne 1
Sinon
Retourne Fib(n-1)+Fib(n-2)
Finsi
FinFonction
Fonction Fib_T (n: Entier,a : Entier, b : Entier): Entier
DébutFonction
Si ( n = 0) Alors
Retourne a
Sinon
Retourne Fib_T(n-1,b,a+b)
Finsi
FinFonction
/* Appel initial est Fib_T(n,1,1) */