Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

VI La Complexité en Python 2

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

Analyse de la complexité en

python

1
2 Introduction

 Dans les chapitres précédents on s’est concentré sur l’écriture des scripts et des
fonctions python pour atteindre le bon résultat sans jamais se soucier de l’aspect
performance.
 La performance d’un script est d’une part l’espace mémoire utilisé et d’autre part
le temps mis par le processeur lors du calcul du résultat.
 On parle donc de complexité spatiale et de complexité temporelle.
 Dans ce chapitre, on se focalisera sur l’aspect complexité temporelle.
 Il ne s’agit pas de mesurer le temps d’exécution uniquement ( module time de
python) mais de décrire le comportement asymptotique d’un script lorsque la
taille des données augmente.
 On utilisera donc des fonctions pour décrire l’ordre de grandeur du temps
d’execution.
3
Calcul du coûts des fonctions python(1)
Instructions Désignation Notations Formule du calcul
du coût
Instructions simples Input, print, =, >,<, Une unité de temps d’éxecution 1
!= , ==, +,-,*,/,//,
%,**, break, return

Structures conditionnelles If cond : C1 : temps d’execution de la condition C1+max(C2,C3)


bloc1 C2:temps d’execution du bloc1
else: C3:temps d’execution du bloc2
bloc2
Boucle for for i in range(N): Ci: temps d’exécution du bloc1. N*Ci
Bloc1
4 Calcul du coûts des fonctions python(2)
Instructions Désignation Notations Formule du calcul
du coût
Boucle while while condition: C1: temps d’exécution de la condition.
Bloc1 C2: temps d’exécution du bloc1 M*max(C1,C2)
M: le nombre de boucles espérés
Calcul du coût du problème recherche du maximum d’une liste
5

def maximum(tab,n):
1
max=tab[0]……………………..
La coût de la fonction est:
for i in range (n):……………….
n
……………………………….
1
if tab[i]>max:…………… 2*n 2+2*n
…………………………………
max=tab[i]…………. .
1
1
return(max)…………………
6 Calcul du coût du test de primalité

def premier (n):


La coût de la fonction est:
n-2
for i in range (2,n): ……… ……………………………….
3*(n-2) 3*(n-2)+1
if n%i==0:1 reste
………………+ 1 comparaison …………………………………
.
return(False) 1…………
return
1 return
return(True) ………………
7 Calcul du coût de la puissance

def puissance(x,n):
La coût de la fonction est:
m=1…………. 1
……………………………….
n
for i in range (1,n+1):…………… 2*n 2*n+2
…………………………………
.
m=m*x………..
1+1
1
return(m)…………………………..
8 Mesure de la complexité
 Le calcul du coût d’une fonction renseigne sur le temps nécessaire à son exécution, mais il
suffit de changer de machine pour que le coût change même avec des données identiques.
 Il est donc plus réaliste de construire une fonction qui décrit le comportement du script
lorsque:
 La taille des données augmente: on parle de comportement asymptotique des
algorithmes ou scripts.
 Et le traitement nécessitant le maximum de temps: on parle de comportement
dans le pire des cas

 Il s’agit de la fonctions d’ordre de grandeur notées O qui permet de borner la fonction de


coût.
 Cette fonction s’appelle « complexité d’un script ou algorithme ».
9 Mesure de la complexité
Pour calculer la complexité d'un programme :
Soit le coût suivant g(n)=5n3-6n2+4
1) on calcule le coût de chaque partie du programme.
2) on combine ces coûts conformément aux règles vues 1/ On remplace les constantes
précédemment. multiplicatives par 1:
1n3-1n2+4
3) on simplifie le résultat grâce aux règles de
2/On annule les constantes additives
simplifications suivantes: Exemple
1n3-1n2=n3-n2
 On remplace les constantes multiplicatives par 1. 3/ On conserve le terme dominant:
 On annule les constantes additives . g(n)= n3

 On conserve le terme dominant.


La complexité : O(g(n))=O(n3)
Les fonctions O des structures algorithmiques usuelles
10

Instructions Notations Formule du calcul du coût


Instructions simples Input, print, =, >,<, != , ==, +,-,*,/,//,%,**, O(1)
break, return
Un bloc d’instructions On suppose que les complexités respectives O(max(f1(n), f2(n),….fk(n))
simples: de Inst1,Inst2…instk sont O(f1(n)),
Inst1 O(f2(n))…. O(fk(n))
Inst2
.
.
instk
Structures conditionnelles On suppose que les complexités respectives O(max(g(n), f1(n), f2(n))
If cond : de la condition , Bloc1 et bloc2 sont
bloc1 O(g(n)), O(f1(n))et O(f2(n))
else:
bloc2
11 Calcul du coûts des fonctions python(2)
Instructions Notations Formule du calcul du coût
Boucle for La complexité de Bloc1 est: O(f(n)) O(N*f(n))
for i in range(N):
Bloc1

Boucle while O(g(n)): complexité de la condition. O(M*max(O(f(n),O(g(n)))


while condition: O(f(n)): complexité du bloc1
Bloc1 M: le nombre de boucles espérés
12 Les classes de la complexité(1)
Par ordre de complexité croissant on a les classes suivantes:
 O(1) : complexité constante, pas d'augmentation du temps d'exécution quand le paramètre
croit exp: affectation, comparaison, …
 O(log(n)) : complexité logarithmique, augmentation très faible du temps d'exécution
quand le paramètre croit. Exp: conversion de la base décimale à la base binaire
 O(n) : complexité linéaire, augmentation linéaire du temps d'exécution quand le
paramètre croit (si le paramètre double, le temps double). Exp :somme des n premiers
entiers naturels
 O(n*log(n)) : complexité quasi-linéaire, augmentation un peu supérieure à O(n). Exp:
calcul la somme des chiffres des n premiers entiers naturels
13 Les classes de la complexité(2)
Par ordre de complexité croissant on a les classes suivantes:
 O(n2) : complexité quadratique, quand le paramètre double, le temps d'exécution est
multiplie par 4. exemple :Tri sélection,….

 O(ni) : complexité polynomiale, quand le paramètre double, le temps d'exécution est


multiplie par 2i.

 O(an) : complexité exponentielle, quand le paramètre double, le temps d'exécution est


élevé à la puissance 2.

 O(n!) : complexité factorielle, asymptotiquement équivalente à nn


14 Complexités des boucles multiplicatives (1)

 Certaines boucles partent d’une variable ayant une petite valeur et la multiplient par une constante
jusqu’à ce qu’elle deviennent grande.
 D’autres boucles partent d’une variable ayant une grande valeur et la divise jusqu’à arriver à une
petite valeur.
 La complexité de ce genre de boucle s’écrit comme suit:

O(log base du multiplicateur ou diviseur (n))


15 Complexités des boucles multiplicatives (2)

i=1 # une petite valeur initiale La complexité de la boucle


while i<=100: while est:
i=i*2 # on multiplie i par 2 ……………………………….
# la valeur du multiplicateur est 2 O(Log2(100))
…………………………………
.
16 Complexités des boucles multiplicatives (3)

for i in range(n):
La complexité de la boucle for
j=1
est:
n boucles
while j<=i%2: ……………………………….
O(Log2(n)) O(n *Log2(n))
…………………………………
j=j*2
.
17
Complexités de la fonction factorielle

def factorielle(n):
fact=1 O(1)
O(1)
i=2 O(1)
La complexité de la fonction est:
while(i<=n): O(n)
O(1)+O(1)*O(n)+O(1) =O(n)
fact=fact*I O(1) O(1)*O(n)
O(1)
i=i+1 O(1)
return(fact) O(1)
18 Exemples de calcul de complexité(1)
Exemples d’instructions Complexité
for i in range(n): O(n)
for i in range(1,n+1,2): O(n)
for i in range(1,n//2): O(n)
i=0 O(log2(n))
While (i<n):
……
i=i*2
While (n!=0): O(log2(n))
……
n=n//2
While (n!=0): O(log2(n))
……
n=n//10
19 Exemples de calcul de complexité(2)
Exemples d’instructions Complexité

for i in range(n): O(n2)


for j in range(n):

for i in range(n): O(n2)


for j in range(1,i+1):

for i in range(1,n+1): O(n log2(n))


j=i
while(j!=0):
....
j=j//2

Vous aimerez peut-être aussi

  • Cours-Esp Vect
    Cours-Esp Vect
    Document19 pages
    Cours-Esp Vect
    menyar menyar
    Pas encore d'évaluation
  • Exo Synchonisation
    Exo Synchonisation
    Document3 pages
    Exo Synchonisation
    menyar menyar
    Pas encore d'évaluation
  • Enoncé Projet Web
    Enoncé Projet Web
    Document2 pages
    Enoncé Projet Web
    menyar menyar
    Pas encore d'évaluation
  • Chap3 SE
    Chap3 SE
    Document26 pages
    Chap3 SE
    menyar menyar
    Pas encore d'évaluation