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

Resume 10

Ce document présente différents exemples de calculs de complexité de fonctions en Python. Il introduit les notions de complexité en temps et en espace, et distingue complexité dans le meilleur et le pire cas. Des exemples illustrent les ordres de grandeur O(n), O(n^2) et O(log(n)).
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)
75 vues2 pages

Resume 10

Ce document présente différents exemples de calculs de complexité de fonctions en Python. Il introduit les notions de complexité en temps et en espace, et distingue complexité dans le meilleur et le pire cas. Des exemples illustrent les ordres de grandeur O(n), O(n^2) et O(log(n)).
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

Calculs de complexité

10
⋄ Étudier la complexité (en temps) d’une fonction f , c’est déterminer son temps d’exécu-
tion T f en fonction de la taille des données. En pratique :
• Ce temps d’exécution est compté en nombre d’opérations élémentaires (à préciser
suivant les cas) ;
• La taille des données est également à préciser, pour une liste L c’est sa longueur ;
• On se contente d’un ordre de grandeur en utilisant la notation O.
On obtient souvent des relations du type T f (n) = O(n), T f (n) = O(n ln(n)), etc.

Exemple Python. Déterminer le maxi- def maximum(L):


mum des éléments d’une liste L non vide de m=L[0]
taille n. Complexité : for i in range(1,len(L)):
if L[i]>m:
Tmaximum (n) = O(n)
m=L[i]
return m
Exemple Python. Le nombre d’apparitions d’un élé- def nocc(x,L):
ment x dans une liste L de taille n. Complexité : n=0
for y in L:
Tnocc (n) = O(n)
if x==y:
n=n+1
return n
Exemple Python. Recherche d’un élément def majoritaire(L):
majoritaire dans une liste L de taille n. Com- xmaj=L[0]
plexité : nmaj=nocc(xmaj,L)
for i in range(1,len(L)):
Tmajoritaire (n) = O(n 2 )
if nocc(L[i],L)>nmaj:
xmaj=L[i]
nmaj=nocc(L[i],L)
return xmaj
⋄ On distingue parfois la complexité dans le meilleur cas et dans le pire cas. Il existe égale-
ment une notion de complexité en moyenne.

Exemple Python. Rechercher si un élément def present(x,L):


x est présent dans une liste L de taille n. Com- for y in L:
plexité : if x==y:
return True
Tpresent (n) = O(n) (pire cas)
return False
= O(1) (meilleur cas)

Exemple Python. Construire la liste [u 0 , . . . , u n ] contenant les n +1 premiers termes de la


suite (u n ) définie par u 0 = 1 et u n+1 = 1 − 2u n . On donne deux versions.

def u(n): def liste_u(n):


u=1 u=1
for i in range(n): L=[u]
u=1-2*u for i in range(n):
return u u=1-2*u
def liste_u(n): L.append(u)
L=[] return L
for i in range(n+1): def u(n):
L.append(u(i)) L=liste_u(n)
return L return L[-1]
Ici : Tu (n) = O(n) et Tliste_u (n) = O(n 2 ). Ici : Tliste_u (n) = O(n) et Tu (n) = O(n).

Exemple Python. Calcul rapide de A N . def puiss_rapide(A,N):


• Terminaison : n est entier, positif et stricte- (x,y,n)=(A,1,N)
ment décroissant à chaque tour de boucle ; while n>0:
• Correction : if n%2==1:
y=y*x
y × xn = AN
x=x**2
est un invariant de boucle ;
n=n/2
• Complexité :
return y
print puiss_rapide(4,3)
Tpuiss_rapide (N ) = O(log(N ))
64

Exemple. On dispose de n objets numérotés de 0 à n − 1, l’objet i a une masse M[i ] et


une valeur V [i ]. On a une masse maximale fixée m > 0 et on cherche à déterminer un
sous-ensemble d’objets dont la masse totale est inférieure à m et dont la valeur totale est
maximale. Algorithme : tester toutes les possibilités, c’est à dire tous les sous-ensembles de
‚0, n − 1ƒ. Complexité : T(n) = O(2n )

⋄ Dans certain cas, on étudie aussi la complexité en espace (notation E f (n)).

Vous aimerez peut-être aussi