0% ont trouvé ce document utile (0 vote)
109 vues2 pages

Corrigé TD1 Complexite

Le document présente des exercices sur la complexité algorithmique, abordant différents types de boucles et leur impact sur la complexité. Il détaille les calculs de complexité pour des programmes utilisant des boucles for et while, ainsi que des fonctions pour déterminer des propriétés de listes et de chaînes de caractères. Les résultats incluent des notations de complexité telles que O(n) et log2(n).

Transféré par

oussama azoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
109 vues2 pages

Corrigé TD1 Complexite

Le document présente des exercices sur la complexité algorithmique, abordant différents types de boucles et leur impact sur la complexité. Il détaille les calculs de complexité pour des programmes utilisant des boucles for et while, ainsi que des fonctions pour déterminer des propriétés de listes et de chaînes de caractères. Les résultats incluent des notations de complexité telles que O(n) et log2(n).

Transféré par

oussama azoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Correction TD 1 : Complexité

Exercice 1 :
1. Cout≤ max(1,3)+1= 4
2. Cout= 5*2= 10
3. for i in range(0,n):
Ce programme contient deux boucles :
for j in range(i,n):
 Boucle i allant de 0 à (n-1) : s'exécute n fois
print("salut")  Boucle j qui s'exécute en fonction de i

Pour i=0 la boucle j s'exécute de 0 à n-1  n fois


Pour i=1 la boucle j s'exécute de 1 à n-1  (n-1) fois

Pour i=n-1 la boucle j s'exécute de 0 à n-1  1 fois
𝒏(𝒏+𝟏)
Au total nous avons : n+(n-1)+(n-2)+…+2+1 = 𝟐

On peut calculer la complexité par une autre méthode :


Soit C(n) la complexité de ce programme, nous avons :
∑ ∑ =∑ = n+(n-1)+ … + 1 =

4.
Ce programme contient une seule boucle while dont le
i=1
compteur i est multiplié chaque fois par 2. On
while i<= n :
print('Salut') commence par le calcul nombre de répétition de la
i = 2* i boucle pour déduire la complexité :

 Au début de la première exécution de la boucle i = 1 = 20


 Au début de la deuxième exécution de la boucle i = 2 = 21
 Au début de la troisième exécution de la boucle i = 4 = 22
 Au début de la Kème exécution de la boucle i = 2k-1
La dernière exécution de la boucle sera quand 2t-1 = n avec t le nombre d’itérations de la boucle, donc
t= log2(n) + 1
C(n)=( log2(n) + 1)*(3+1)+1+1=4*log2(n) + 6
5.
Ici nous avons la boucle for qui s'exécute n fois et la
i=1
boucle while log2(n)+1 fois (c'est la même que celle
while i<= n :
du programme précédent).la complexité dans ce cas
for j in range(0,n) :
print('Salut') est : C(n)= t*(n+2+1)+1+1=n* log2(n)+n+ 3*log2(n)+5
i = 2* i

6. (DL)

1
Exercice 2 :
def grands(L, x):
# initialiser le décompte (nb) avec 0
nb = 0
# Puis on compare x à chaque élément de la liste
for i in L:
# Si un élément est supérieur à x, incrémentez nb par 1
if i > x:
nb += 1
return nb

T(n)= 3*n+2 (avec n la taille de la liste L)

Exercice 3 :
def is_palindrome(a):
for i in range(len(a)//2):
if a[i] != a[-i-1]:
return 0
return 1

Dans cette fonction :


 on parcourt la moitié de la chaîne de caractères “a”. Ici, len(a) désigne la longueur de la chaîne, et len(a)//2
représente le quotient de la division euclidienne de cette longueur par 2. Ainsi, si “a” a une longueur impaire, on
s’arrête au caractère juste avant celui du milieu;
 dans la boucle for, on teste si le caractère d’indice i est différent du caractère d’indice -i-1. Il faut ici faire
attention au fait que, par exemple, a[0] représente le 1er caractère alors que a[-1] représente le dernier, d’où le
décalage : on ne marque pas a[-i] mais a[-i-1]. Si les caractères sont différents alors la chaîne n’est pas un
palindrome. On retourne donc 0, ce qui stoppe la boucle;
 on finit par retourner 1 si 0 n’a pas été retourné.
Opérations élémentaires de la boucle for : deux lecture a[i] et a[-i-1], un teste et return répéter len(a)//2 fois
T(n) ≤ 4*n/2+1=2*n+1 = O(n) avec n=len(a)
Exercice 4 :
def prefixe1(M,S): def prefixe2(M,S):
n=len(M) if S[:len(M)]== M:
for i in range(n): return True
if M[i]!=S[i]: return False
return False
return True

T(n)=1+n*(2+1+1)+1+O(1) =O(n) T(n)=n+2=O(n)


Au pire des cas S et M seront identique donc n
Avec O(1) la complexité de len(L) comparaisons pour S[:len(M)]==M

Exercice 5 : DL

Vous aimerez peut-être aussi