Académique Documents
Professionnel Documents
Culture Documents
IMT Nord-Europe
jose.mennesson@imt-nord-europe.fr
17 août 2023
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 1 / 39
Retour sur le cours/TP de la semaine dernière
Des questions ?
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 2 / 39
Motivations
Besoin de
comparer les algorithmes
identifier les cas favorables, moyens, défavorables
avoir un ordre de grandeur
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 3 / 39
La complexité algorithmique
Définition :
L’analyse de la complexité d’un algorithme consiste en l’étude formelle de
la quantité de ressources nécessaire à l’exécution de cet algorithme.
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 4 / 39
La complexité algorithmique
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 5 / 39
Les opérations/instructions élémentaires
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 6 / 39
1ère approche : décompte des opérations
Tester l’existence d’un élément dans un tableau
Algorithme 1 : Teste l’existence d’un élément dans un tableau.
1 fonction existe(e : Élément, t : Tableau) : Booléen
entrée : e : élément recherché
t : tableau dans lequel on recherche l’élément
sortie : existe : vrai si l’élément existe dans le tableau t, faux sinon
2 existe ← Faux
3 pour i de 0 à (longueur(t) - 1) faire
4 si t[i] = e alors
5 existe ← Vrai
6 fin
7 fin
8 retourner existe
9 fin
Opération élémentaire : comparaison logique de la ligne 4
T(n) = n comparaisons (avec n la taille du tableau)
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 7 / 39
1ère approche : décompte des opérations
Recherche des elts distincts dans un tableau - version naı̈ve
Algorithme 2 : Liste les éléments distincts d’un tableau.
1 fonction uniques(t : Tableau) : Tableau
entrée : t : tableau dont on cherche les éléments distincts
sortie : distincts : tableau contenant les éléments distincts de t
2 nb distincts ← 0
3 pour i de 0 à (longueur(t) - 1) faire
4 si non existe(t[i], distincts) alors
5 distincts[nb distincts] ← t[i]
6 nb distincts ← nb distincts + 1
7 fin
8 fin
9 retourner distincts
10 fin
Opération élémentaire : appel de la fonction existe de la ligne 4
T(n) = n fois existe sur un tableau de taille k̂ (pour simplifier)
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 8 / 39
1ère approche : décompte des opérations
Algorithme 3 : Teste l’existence d’une valeur dans un tableau.
1 fonction existe sentinelle(e : Élément, t : Tableau) : Booléen
entrée : e : élément recherché
t : tableau dans lequel on recherche l’élément e
sortie : elt existe : vrai si l’élément e existe dans t, faux sinon
2 elt existe ← Faux, i ← 0
3 tant que i < (longueur(t)) et non elt existe faire
4 si t[i] = e alors
5 elt existe ← Vrai
6 fin
7 i←i+1
8 fin
9 retourner elt existe
10 fin
Opération élémentaire : comparaison logique de la ligne 4
Meilleur cas → T(n) = 1, cas moyen → T(n) = n/2, pire cas → T(n) = n
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 9 / 39
1ère approche : décompte des opérations
Algorithme 4 : Liste les éléments distincts d’un tableau par tri.
1 fonction uniques rapide(t : Tableau) : Tableau
entrée : t : tableau dont on cherche les éléments distincts
sortie : distincts : tableau contenant les éléments distincts de t
2 nb distincts ← 0
3 trier(t) // De l’ordre de n.log (n) pour les meilleurs algos
4 distincts[0] ← t[0]
5 pour i de 1 à (longueur(t) - 1) faire
6 si t[i] ̸= t[i-1] alors
7 distincts[nb distincts] ← t[i]
8 nb distincts ← nb distincts + 1
9 fin
10 fin
11 retourner distincts
12 fin
T(n) = Ttrier (n)+Tboucle (n)= n.log (n) + (n − 1) comparaisons
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 10 / 39
1ère approche : décompte des opérations
Les petits n ne sont pas un problème : les différences entre algos se font
voir pour de grands n.
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 11 / 39
2ème approche : analyse asymptotique
La notation de Landau :
O(g(n))→ l’ensemble des fonctions qui croissent au plus aussi vite que g.
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 12 / 39
2ème approche : analyse asymptotique
Ω(g(n))→ l’ensemble des fonctions qui croissent au moins aussi vite que g.
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 13 / 39
2ème approche : analyse asymptotique
Théorème : f (n) = Θ(g (n)) ⇐⇒ f (n) = O(g (n)) et f (n) = Ω(g (n))
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 14 / 39
2ème approche : analyse asymptotique
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 15 / 39
Abus de notation
Notation correcte : f (n) ∈ Θ(g (n))
Notation employée : f (n) = Θ(g (n)) → permet de mettre les
notations dans des équations
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 16 / 39
Classes de complexité
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 17 / 39
Ordre de grandeur des temps d’exécution de quelques
classes de complexité
→ une instruction en 10−8 secondes.
La Table ci-dessous donne les temps d’exécution estimés pour des
algorithmes des principales classes de complexité, en ignorant les facteurs
constants (qui multiplieraient en pratique les temps d’exécution par une
constante).
n Θ(1) Θ(log2 (n)) Θ(n) Θ(n. log2 (n)) Θ(n2 ) Θ(n3 ) Θ(2n )
10 10−8 3, 32.10−8 10−7 3, 32.10−7 10−6 10−5 10−5
103 10−8 9, 97.10−8 10−5 9, 97.10−5 10−2 10 1, 07.10293
106 10−8 1, 99.10−7 10−2 0, 199 104 1010 N/A
109 10−8 2, 99.10−7 10 298, 97 1010 1019 N/A
(a) (b)
Figure – Croissance comparée de quelques classes de complexité. Les échelles de
(a) et (b) varient.
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 19 / 39
Application aux exemples
existe : Θ(n)
uniques : Θ(n2 ), en posant k = α.n, 0 < α < 1 et par applications
des facteurs de la définition
uniques rapide : Θ(n.log2 (n)), en appliquant
Θ(n. log2 (n)) + Θ(n) = Θ(n. log2 (n))
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 20 / 39
Complexité au meilleur cas, en moyenne, au pire cas
Algorithme 5 : Teste l’existence d’une valeur dans un tableau.
1 fonction existe sentinelle(e : Élément, t : Tableau) : Booléen
entrée : e : élément recherché
t : tableau dans lequel on recherche l’élément e
sortie : existe : vrai si l’élément e existe dans le tableau t, faux
sinon
2 existe ← Faux
3 i←0
4 tant que i < (longueur(t) - 1) et non existe faire
5 si t[i] = e alors
// Élément trouvé
6 existe ← Vrai
7 fin
8 fin
9 retourner existe
10 fin
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 21 / 39
Complexité au meilleur cas, en moyenne, au pire cas
Définitions :
Complexité au meilleur cas : complexité quand les conditions qui
minimisent le nombre d’instructions exécutées = borne inférieure de
complexité
Complexité au pire cas : complexité dans les conditions qui
maximisent le nombre d’instructions exécutées = borne supérieure de
complexité
Complexité au cas moyen : complexité dans les conditions
“moyennes”, rencontrées en général
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 22 / 39
Notes
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 23 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas :
▶ cas moyen :
▶ pire cas :
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 24 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas : Θ(1)
▶ cas moyen : Θ(n)
▶ pire cas : Θ(n)
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 25 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas : Θ(1)
▶ cas moyen : Θ(n)
▶ pire cas : Θ(n)
uniques :
▶ meilleur cas :
▶ cas moyen :
▶ pire cas :
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 26 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas : Θ(1)
▶ cas moyen : Θ(n)
▶ pire cas : Θ(n)
uniques :
▶ meilleur cas : Θ(n)
▶ cas moyen : Θ(n2 )
▶ pire cas : Θ(n2 )
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 27 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas : Θ(1)
▶ cas moyen : Θ(n)
▶ pire cas : Θ(n)
uniques :
▶ meilleur cas : Θ(n)
▶ cas moyen : Θ(n2 )
▶ pire cas : Θ(n2 )
uniques rapide
▶ meilleur cas :
▶ cas moyen :
▶ pire cas :
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 28 / 39
Retour sur les exemples
existe sentinelle :
▶ meilleur cas : Θ(1)
▶ cas moyen : Θ(n)
▶ pire cas : Θ(n)
uniques :
▶ meilleur cas : Θ(n)
▶ cas moyen : Θ(n2 )
▶ pire cas : Θ(n2 )
uniques rapide (dépend en fait de l’algorithme de tri employé) :
▶ meilleur cas : Θ(n. log2 (n))
▶ cas moyen : Θ(n. log2 (n))
▶ pire cas : Θ(n. log2 (n))
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 29 / 39
Processus de calcul de complexité pour un algorithme
Complexité en temps :
Choisir une (ou plusieurs) instruction(s) représentative(s) = la (ou
les) plus exécutée(s) → on sait qu’asymptotiquement les autres
seront non significatives
Compter le nombre de fois que l’instruction s’exécute au meilleur cas,
au cas moyen et au pire cas
Se rapprocher de l’expression d’une complexité standard
▶ Identifier les variables qui peuvent s’exprimer en fonction d’autres
▶ Éliminer les termes asymptotiquement non significatifs / non dominants
▶ Au besoin, démontrer à partir des définitions des notations
Complexité en espace :
Identique mais identifier les variables les plus représentées et l’espace
mémoire qu’elles consomment
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 30 / 39
Pièges
Chercher des bornes “au plus juste” (e.g., tout algo est en Ω(1) mais
ça ne nous apprend rien. . .)
Abus de notation courant : O(g (n)) utilisé pour signifier Θ(g (n))
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 31 / 39
Introduction au TP suivant : organisation
1 créneaux d’1h30
Lecture des codes fournis
Calcul des temps d’exécutions
Écriture d’algorithme sur papier
Programmation Python d’algorithmes
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 32 / 39
Introduction au TP suivant : organisation
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 33 / 39
Introduction au TP suivant : le calcul des temps
d’exécution
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 34 / 39
Introduction au TP suivant : exemple
import time
def f(n):
for i in range(n):
print(‘Bip’)
t1 = time.time()
f(500)
t2 = time.time()
texec=t2-t1
print(‘Temps d\’exécution :’, texec,‘ secondes’)
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 35 / 39
Introduction au TP suivant : le tracé de courbes
Pour évaluer correctement la complexité des algorithmes, il faut calculer
les temps d’exécution des programmes avec plusieurs valeurs de n,
permettant de voir si la courbe se rapproche d’une classe de complexité
connue (n, n2 , log(n), exp(n), etc.).
plt.plot(x,y)
plt.show()
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 36 / 39
Introduction au TP suivant : exemple complet
x = range(50)
y1 = numpy.cos(x)
y2 = numpy.sin(x)
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 37 / 39
Introduction au TP suivant : réflexions
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 38 / 39
Des questions ?
Module INF301 - IMT Nord Europe (IMT NE) CP2 - Algorithmique 17 août 2023 39 / 39