Vous êtes sur la page 1sur 14

Introduction

aux structures de données


avancées

Maria ZRIKEM

Ensa de Marrakech, 2010-2011

Ensa de Marrakech, Complexité des algorithmes 1


Qu’est-ce que l’algorithmique?

• Définition (algorithme) : Un algorithme est suite finie


d’opérations élémentaires constituant un schéma de
calcul ou de résolution d’un problème.

• Historique : Le mot « algorithme » provient de la


forme latine (Algorismus) du nom du mathématicien
arabe ALKHAREZMI.

Ensa de Marrakech, Complexité des algorithmes 2


Double problématique de l’algorithmique

1. Trouver une méthode de résolution (exacte ou approchée)


du problème.
– Soient trois nombres réels a, b et c, quelles sont les
solutions de l’équation ax2 +bx+c ? (Résultat bien
connu.)
– Soient cinq nombres réels a, b, c, d et e, quelles sont
les solutions de l’équation ax5+bx4+cx3+dx2+ex+ f ?
(Pas de méthode générale, cf. la théorie de GALOIS.)
2. Trouver une méthode efficace.

Savoir résoudre un problème est une chose, le résoudre


efficacement en est une autre.

Ensa de Marrakech, Complexité des algorithmes 3


problématique de l’algorithmique
L’algorithme est souvent indépendant de l’ordinateur utilisé ainsi
que du langage.
L’algorithme est très lié aux données qu’il utilise et vice-versa.
Suivant la taille du problème le but n’est pas le même :
– petit pb : Le but est d’arriver à la bonne solution.
– gros pb : Il faut aussi arriver à la bonne solution mais
rapidement et sans dépasser les capacités mémoire
de l’ordinateur.
Les algorithmes peuvent être simples ou difficiles ainsi que les
structures de données.

Ensa de Marrakech, Complexité des algorithmes 4


Différences entre algorithmes et programmes

Un programme est la réalisation (l’implémentation) d’un


algorithme au moyen d’un langage donné (sur une
architecture donnée). Il s’agit de la mise en oeuvre du
principe. Par exemple, lors de la programmation on
s’occupera parfois explicitement de la gestion de la mémoire
(allocation dynamique en C) qui est un problème
d’implémentation ignoré au niveau algorithmique.

Ensa de Marrakech, Complexité des algorithmes 5


Motivation : calcul de xn

Problème
Données : un entier naturel n et un réel x. On veut calculer xn.
Moyens : Nous partons de y1 = x. Nous allons construire une suite de
valeurs y1, ..., ym telle que la valeur yk soit obtenue par multiplication de
deux puissances de x précédemment calculées : yk = yu  yv, avec
1≤u,v < k, k  [2;m].
But : ym = xn.

Le coût de l’algorithme sera alors de m-1, le nombre de


multiplications faites pour obtenir le résultat recherché.

Ensa de Marrakech, Complexité des algorithmes 6


Motivation : calcul de xn

Algorithme trivial
yi = yi-1  y1 ; i  [2;n]. Résultat : ym = xn ; Coût : m-1 = n-1
multiplications.
Algorithme
y[1] = x
Pour i de 2 à n faire
y[i] = y[i-1]  y[1]
renvoyer y[n]

Ensa de Marrakech, Complexité des algorithmes 7


Motivation : calcul de xn
Méthode binaire
Algorithme Illustration avec n = 23
1. Écrire n sous forme binaire 1. n = 10111
2. Remplacer chaque :
1 0 1 1 1
– « 1 » par la paire de lettres « SX » ;
– « 0 » par la lettre « S ». 2. SX S SX SX SX
3. Éliminer la paire « SX » la plus à gauche. 3. S SX SX SX
4. Résultat : un mode de calcul de xn où 4. Nous partons de x et nous
– S signifie « élever au carré » (squaring) ; obtenons successivement :
– X signifie « multiplier par x ». x2, x4, x5, x10, x11, x22, x23.
Le tout en partant de x.

Nous sommes donc capables de calculer x23 en 7 multiplications au lieu de 22 !


Pour n = 1000, l’algorithme trivial effectue 999 multiplications, et la méthode
binaire moins de 20.

Ensa de Marrakech, Complexité des algorithmes 8


Motivation : calcul de xn

Moralité : nous avons affaire à un problème simple,


que tout le monde sait résoudre, mais qu’il est très
difficile de résoudre efficacement...
Dans ce cours nous verrons des problèmes
classiques, des méthodes classiques de
résolutions, des structures de données classiques.

Ensa de Marrakech, Complexité des algorithmes 9


Conclusion
« Un bon algorithme est comme un couteau tranchant —il fait
exactement ce que l’on attend de lui, avec un minimum
d’efforts. L’emploi d’un mauvais algorithme pour résoudre un
problème revient à essayer de couper un steak avec un
tournevis : vous finirez sans doute par obtenir un résultat
digeste, mais vous accomplirez beaucoup plus d’efforts que
nécessaire, et le résultat aura peu de chances d’être
esthétiquement satisfaisant.
»
Thomas Cormen, Charles Leiserson, and Ronald Rivest. Introduction à
l’algorithmique. Dunod, 1994.

Ensa de Marrakech, Complexité des algorithmes 10


L’analyse d’algorithmes
La compréhension d’un algorithme va avec l’analyse de ses
performances.
Elle devient indispensable pour les calculs importants afin de
savoir où l’on va (ne pas lancer un calcul qui va mettre 3 ans par
exemple).
Il existe deux techniques :
– L’expérimentation,
– L’étude mathématique.

Ensa de Marrakech, Complexité des algorithmes 11


L’analyse d’algorithmes
L’expérimentation
Cela revient comparer le temps de calcul de différents algorithmes.
Ces calculs doivent être fait soigneusement :
1. De façon rigoureuse c.à.d :
– sur la même machine,
– dans le même environnement,
– sans qu’aucun autre programme ne tourne.
2. Différents jeux de données doivent être testés. Certains
algorithmes y sont très sensibles.

Ensa de Marrakech, Complexité des algorithmes 12


L’analyse d’algorithmes

Attention
Un programme peut être plus rapide parce que son
implémentation est meilleure et non parce que son
algorithme l’est.

Ensa de Marrakech, Complexité des algorithmes 13


L’analyse d’algorithmes
L’étude mathématique
Il s’agit :
• d’identifier le nombre d’opérations de bases qui seront
effectuées en fonction des données,
• étudier le cas moyen (données aléatoires) et le pire cas.
Compter les opérations est par exemple :
• A[i] = i; 1 affectation
• B = (i * 7) – 3; 1 affectation, 1multiplication et 1 soustraction

Ensa de Marrakech, Complexité des algorithmes 14