Vous êtes sur la page 1sur 12

Algorithmique

Leçon 2 : Complexité

2021/2022 Algorithmique - Alain Silovy 1


Complexité ≠ Efficacité
• Nous voulons évaluer « l’efficacité » d’un algorithme (consommation de
temps et/ou d’espace)
• Le temps d’exécution ne caractéristique pas seulement l’algorithme

• La complexité d’un algorithme est la façon dont le temps (ou


l’espace) consommé par l’algorithme dépend de la taille des
données fournies
• La représentation des données est (presque) sans importance
• Complexité en pire cas (plus simple)

2021/2022 Algorithmique - Alain Silovy 2


Complexité ↔ Puissance machine
Les nombres de Fibonacci : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55…
f0 = 0
f1 = 1
fn = fn - 1 + fn - 2 pour n  2

Algorithme 1 (évident) :

def fib1(n):
if n < 2:
return n
else:
return fib1(n - 1) + fib1(n - 2)

Très inefficace car recalcule plusieurs fois la même chose

2021/2022 Algorithmique - Alain Silovy 3


Complexité ↔ Puissance machine
Temps d’exécution (en langage C) de l’algorithme 1 chronométré sur un vieil
ordinateur de 1990. Un ordinateur actuel est beaucoup (20 fois ?) plus rapide:

n TAlgo1(n)
20 1 msec

40 15 sec

50 30 min

100 1,5 millions d’années

120 > l’âge de l’univers


2021/2022 Algorithmique - Alain Silovy 4
Complexité ↔ Puissance machine
Les nombres de Fibonacci

Algorithme 2. Mémoriser les valeurs déjà calculées :

def fib2(n):
f1, f2 = 0, 1
for k in range(n):
f1, f2 = f2, f1 + f2
return f1

Remarque : Dépassement de capacité ?

2021/2022 Algorithmique - Alain Silovy 5


Complexité ↔ Puissance machine
Temps d’exécution comparés des algorithme 1 et 2 :

n TAlgo1(n) TAlgo2(n)
20 1 msec 0,1 µsec
40 15 sec 0,2 µsec
50 30 min 0,25 µsec
100 1,5 millions d’années 0,5 µsec
120 > l’âge de l’univers 0,6 µsec
1000000 ??? 5 msec
1000000000 ??? 5 sec

2021/2022 Algorithmique - Alain Silovy 6


Complexité ↔ Puissance machine
Les nombres de Fibonacci. Algorithme 3 :
def fib3(n):
i, j, k, h = 1, 0, 0, 1
while n > 0:
if n % 2 == 1:
t = j * h
j = i * h + j * k + t
i = i * k + t
t = h * h Temps non mesurables !
h = 2 * k * h + t
k = k * k + t
n //= 2 n TAlgo2(n) TAlgo3(n)
return j 1.000.000.000 5 sec 0 msec
1.000.000.000.000.000.000 160 ans 0 msec

2021/2022 Algorithmique - Alain Silovy 7


Discussion
Avez-vous réfléchi au problème du kème plus petit élément d’un tableau ?
Par exemple si le tableau est [7, 4, 5, 4, 2], alors :
• Le 0ème plus petit est 2 (le plus petit ou le minimum)
• Le 1ème plus petit est 4 (ainsi que le 2ème plus petit)
• Le 4ème plus petit est 7 (le plus grand ou maximum)

Bien sûr, trier le tableau et renvoyer tab[k] donne le résultat. Mais est-ce
vraiment nécessaire de tout trier ?
Pouvez-vous faire mieux ?

2021/2022 Algorithmique - Alain Silovy 8


Exercices

1. Ecrivez, dans le langage de programmation de votre choix, 3 fonctions qui


implémentent les 3 algorithmes de calcul des nombres de Fibonacci.
2. Ecrivez une fonction de test qui vérifie que pour les quelques premières
valeurs de n, vos 3 fonctions renvoient bien les mêmes résultats.
3. Ecrivez un programme qui chronomètre les temps pris par vos fonctions.
Attention, n’essayez pas, par exemple, de chronométrer fib1(100) ☺

2021/2022 Algorithmique - Alain Silovy 9


Exercices

4. Ecrivez une fonction qui regroupe les éléments d’un tableau composé
exclusivement des entiers -1, 0 et 1 de façon à ce que tous les -1 soient
au début, suivis des 0 et, finalement des 1. Par exemple, le tableau
[0, -1, 0, 0, 1, 1, -1, 0, -1, -1, -1, -1, 1]
donnerait
[-1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1]
Bien sûr, trier le tableau donne le résultat. Mais est-ce vraiment
nécessaire de trier ?

2021/2022 Algorithmique - Alain Silovy 10


Exercices
5. Ecrivez une fonction qui regroupe les éléments d’un tableau d’entiers de
façon à ce que tous les négatifs soient au début (dans un ordre
quelconque), suivis des 0 et, finalement des positifs. Le tableau :
[0, -7, 0, 0, 5, 9, -4, 0, -2, -9, -4, -8, 2]
pourrait donner par exemple :
[-7, -8, -4, -4, -2, -9, 0, 0, 0, 0, 9, 2, 5]
Est-ce le même algorithme que pour l’exercice précédent ? Si oui,
retournez à l’exercice précédent et essayez de faire mieux.

En règle générale, et sauf consignes contraires, tous les problèmes


portant sur des tableaux doivent se résoudre « en place », c’est-à-
dire sans tableau auxiliaire !

2021/2022 Algorithmique - Alain Silovy 11


Prochaine leçon

Terminez les exercices

Continuez à réfléchir au problème du kème plus petit élément d’un tableau

2021/2022 Algorithmique - Alain Silovy 12

Vous aimerez peut-être aussi