Correction TD Serie 3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

Université Mohammed Premier Année Universitaire

Faculté des Sciences 2020/2021


Département d’Informatique Filières SMI
Oujda – MAROC Semestre 3
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) */

Vous aimerez peut-être aussi