Ch4 Complexité
Ch4 Complexité
Ch4 Complexité
Algorithmique 2/Python
Chapitre 4: Complexité algorithmique
1
Objectifs du cours
2
Organisation du cours
3
Plan du chapitre
❑Introduction et définitions
4
Introduction et définitions
5
Introduction
• Exercice
6
Introduction
• Plusieurs Solutions possibles
7
Introduction
• Exercice
• Ecrire en python une fonction qui prend en argument une chaîne de
caractères et détermine si le caractère 'a' est présent dans la chaîne (on
retourne soit 𝑇𝑟𝑢𝑒 soit 𝐹𝑎𝑙𝑠𝑒).
• Cette mesure est basée sur une estimation du nombre d'opérations de base
effectuées par l'algorithme en fonction de la taille des données en entrée de
l'algorithme.
• Remarque:
• Le coût de la mémoire étant aujourd’hui relativement faible, on cherche en
général à améliorer la complexité en temps plutôt que la complexité en
mémoire.
12
Complexité temporelle d’un algorithme
• Définition:
• Réaliser un calcul de complexité en temps revient à compter le nombre
d’opérations élémentaires (affectation, calcul arithmétique ou logique,
comparaison…) effectuées par l’algorithme.
13
Complexité temporelle d’un algorithme
• Comment calculer la complexité temporelle?
• Pour simplicité, on fera l’hypothèse que toutes les opérations
élémentaires sont à égalité de coût, soit 1 « unité » de temps.
14
Complexité temporelle
• Comment calculer la complexité temporelle?
• La fonction 𝑇(𝑛) qui est le coût (en temps) d'un algorithme est l'ordre de
grandeur du nombre d'opérations élémentaires que doit effectuer un algorithme
pour résoudre le problème auquel il est destiné.
15
Complexité temporelle
17
Complexité temporelle
• Comment calculer le coût des instructions composées?
𝑪𝒐û𝒕 𝑩
= 𝑪𝒐û𝒕 𝒕𝒆𝒔𝒕 + 𝒎𝒂𝒙 𝑪𝒐û𝒕 𝒂𝒇𝒇𝒆𝒄𝒕𝒂𝒕𝒊𝒐𝒏 + 𝒅𝒊𝒗𝒊𝒔𝒊𝒐𝒏 , 𝑪𝒐û𝒕 𝒂𝒇𝒇𝒆𝒄𝒕𝒂𝒕𝒊𝒐𝒏 + 𝒂𝒅𝒅𝒊𝒕𝒊𝒐𝒏 + 𝒂𝒇𝒇𝒆𝒄𝒕𝒂𝒕𝒊𝒐𝒏 + 𝒅𝒊𝒗𝒊𝒔𝒊𝒐𝒏
= 𝟏 + 𝟏 + 𝐦𝐚𝐱 𝟐, 𝟒 = 𝟏 + 𝟒 = 𝟓
Le coût de l’algorithme B est un coût constant
18
Complexité temporelle
• Comment calculer le coût des instructions composées?
𝐶𝑜û𝑡(𝐶) = ∑
20
Complexité temporelle
• Comment calculer la complexité d’un algorithme?
• La fonction 𝑇(𝑛) qui est le coût (en temps) d'un algorithme est l'ordre de
grandeur de la des opérations élémentaires et composées que doit effectuer un
algorithme pour résoudre le problème auquel il est destiné.
• On parlera de :
• coût linéaire s'il est une fonction linéaire qui dépend de n c-à-d d'ordre 𝑛: 𝑂(𝑛)
23
Complexité temporelle
• Exemple de la complexité d’une boucle d’affichage simple
24
Complexité temporelle
• Exemple de calcul de la complexité d’un algorithme itératif
×𝒏
× 𝟐𝒏
× (𝟓𝒏 − 𝟏 − 𝒏 + 𝟏)
𝐓 𝒏 = 𝑶(𝒏𝟑 )
25
Complexité temporelle
• Exemple de calcul de la complexité de la fonction factorielle
affectation+addition:2
retour: 1
27
Complexité temporelle
• Exemple de calcul de la complexité d’une fonction qui calcule
• Version 2
28
Complexité temporelle
• Exemple de calcul de la complexité de 2 fonctions qui calculent
!
29
Complexité de quelques opérations
sur les listes
30
Exercices
1. Calcul de la complexité de la fonction append dans une liste
31
Exercices
2. Calcul de la complexité de la fonction insert dans une liste
32
Exercices
3. Calcul de la complexité d’une fonction de saisie d’un tableau
33
Exercices
4. Calcul de la complexité d’une fonction de saisie d’une matrice
34
Exercices
5. Calcul de la complexité du produit matriciel
35
Exercices
6. Calcul de la complexité de la procédure de Tri par sélection
36
Exercices
6. Calcul de la complexité de la procédure de Tri par sélection
Principe
• Le tri par sélection d’un tableau
consiste à rechercher le plus
petit élément et à le placer en
0, le second plus petit élément
et à le placer en 1, etc.
37
Exercices
6. Calcul de la complexité de la procédure de Tri par sélection
38
Exercices
6. Calcul de la complexité de la procédure de Tri par sélection
× (𝒏 − 𝟏)
𝟏 𝒏−𝟐 𝒏−𝟐 𝒏−𝟏
× (𝒏 − 𝟏 − 𝒊) 𝑪ô𝒖𝒕 𝑻𝒓𝒊𝑺𝒆𝒍𝒆𝒄𝒕𝒊𝒐𝒏 = 𝟑 + 𝟐
𝒊=𝟎 𝒊=𝟎 𝒋=𝒊+𝟏
𝟏+𝟏 𝑪ô𝒖𝒕 𝑻𝒓𝒊𝑺𝒆𝒍𝒆𝒄𝒕𝒊𝒐𝒏 = 𝟑 𝒏 − 𝟏 + 𝒏 𝒏 − 𝟏
𝑪ô𝒖𝒕 𝑻𝒓𝒊𝑺𝒆𝒍𝒆𝒄𝒕𝒊𝒐𝒏 = 𝒏𝟐 + 𝟐𝒏 − 𝟑
𝑪ô𝒖𝒕 𝑻𝒓𝒊𝑺𝒆𝒍𝒆𝒄𝒕𝒊𝒐𝒏 = 𝑶(𝒏𝟐 )
𝟏+𝟏
39
Exercices
7. Calcul de la complexité de la procédure de recherche séquentielle
𝑪ô𝒖𝒕 𝑹𝒆𝒄𝒉𝒆𝒓𝒄𝒉𝒆_𝑺𝒆𝒒 = 𝟏 + 𝒏 × 𝟏 + 𝟏 + 𝟏 + 𝟐
𝑪ô𝒖𝒕 𝑹𝒆𝒄𝒉𝒆𝒓𝒄𝒉𝒆_𝑺𝒆𝒒 = 𝟑 + 𝟑𝒏
𝑪ô𝒖𝒕 𝑹𝒆𝒄𝒉𝒆𝒓𝒄𝒉𝒆_𝑺𝒆𝒒 = 𝑶(𝒏)
40
Exercices
8. Calcul de la complexité de la recherche dichotomique
41
Exercices
8. Calcul de la complexité de la recherche dichotomique
Principe
• On cherche dans un tableau 𝑳 une valeur 𝒗 . Un pointeur 𝒎 est initialisé
au « milieu » du tableau . On a alors 3 cas :
• Si 𝒗 > 𝑳[𝒎] , cela signifie qu’elle se trouve à un indice entre 𝒎 et
celui de la dernière valeur du tableau : soit « après » 𝒎 .
• Si 𝒗 < 𝑳[𝒎] , cela signifie que la valeur recherché se trouve « avant »
𝒎.
• On recommence la même opération avec la « moitié » du tableau qui
est sensée contenir la valeur recherchée, jusqu’à ce qu’elle soit
trouvée, ou que la liste ne comporte plus qu’un seul élément.
• Si la valeur recherchée et égale à la valeur 𝑳[𝒎] , c’est qu’on l’a
trouvée !!
42
Exercices
8. Calcul de la complexité de la recherche dichotomique
𝑺𝒐𝒊𝒕 𝑳 𝒖𝒏𝒆 𝒍𝒊𝒔𝒕𝒆 𝒕𝒓𝒊é𝒆 𝒅𝒆 𝟏𝟕 é𝒍𝒆𝒎𝒆𝒏𝒕𝒔, 𝒐𝒏 𝒗𝒆𝒖𝒕 𝒄𝒉𝒆𝒓𝒄𝒉𝒆𝒓 𝒍𝒂 𝒗𝒂𝒍𝒆𝒖𝒓 𝟑𝟏
𝒎 43
Exercices
8. Calcul de la complexité de la recherche dichotomique
𝑶(𝟏)
Quel
est
le nombre
d’itérations
de la
Boucle
𝐰𝐡𝐢𝐥𝐞?
𝑶(𝟏) 44
Exercices
8. Calcul de la complexité de la recherche dichotomique
45