Vous êtes sur la page 1sur 7

Algorithmique

L'algorithmique est l'étude et la production de règles et techniques qui sont


impliquées dans la définition et la conception d'algorithmes, c'est-à-dire de processus
systématiques de résolution d'un problème permettant de décrire précisément des
étapes pour résoudre unproblème algorithmique.

Sommaire
1 Étymologie
2 Histoire
2.1 Antiquité
2.2 Étude systématique
2.3 L'époque contemporaine
3 Vocabulaire
4 Étude formelle
4.1 Structures algorithmiques
4.2 Correction, complétude, terminaison
4.3 Complexité algorithmique
4.3.1
Quelques indications sur l’efficacité des algorithmes

5 Approches pratiques
5.1 Les heuristiques
6
Exemples d’algorithmes, de problèmes, d'applications ou
domaines d'application
7 Annexes Organigramme de programmation
7.1 Notes et références représentant l'algorithme d'Euclide.
7.2 Bibliographie
7.3 Liens externes
7.4 Articles connexes

Étymologie
1
Le mot « algorithme » vient du nom dumathématicien Al-Khwârizmî (latinisé au Moyen Âge enAlgoritmi), qui, au IXe siècle écrivit
le premier ouvrage systématique donnant des solutions aux équations linéaires et quadratiques. « Algorithme » a donné
« algorithmique » auxquels certains préfèrent le néologisme « algorithmie ».

Histoire

Antiquité
Les premiers algorithmes dont on a retrouvé des descriptions datent des Babyloniens, au IIIe millénaire av. J.-C.. Ils décrivent des
méthodes de calcul et des résolutions d'équations à l'aide d'exemples.
Un algorithme célèbre est celui qui se trouve dans le livre 7 des Éléments d'Euclide, et appelé algorithme d'Euclide. Il permet de
trouver le plus grand diviseur commun, ou PGCD, de deux nombres. Un point particulièrement remarquable est qu’il contient
explicitement une itération et que les propositions 1 et 2 démontrent sacorrection.
2
C'est Archimède qui proposa le premier un algorithme pour le calcul deπ .

Étude systématique
Le premier à avoir systématisé des algorithmes est le mathématicien perse Al-Khwârizmî, actif entre 813 et 833. Dans son ouvrage
Abrégé du calcul par la restauration et la comparaison, il étudie toutes les équations du second degré et en donne la résolution par
des algorithmes généraux. Il utilise des méthodes semblables à celles des Babyloniens, mais se différencie par ses explications
systématiques là où les Babyloniens donnaient seulement des exemples.

Le savant andalou Averroès (1126-1198) évoque une méthode de raisonnement où la thèse s’affine étape par étape, itérativement,
jusqu’à une certaine convergence et ceci conformément au déroulement d’un algorithme. À la même époque, au XIIe siècle, le moine
Adelard de Bath introduit le terme latin de algorismus, par référence au nom de Al Khuwarizmi. Ce mot donne algorithme en
français en 1554.

Au XVIIe siècle, on pourrait entrevoir une certaine allusion à la méthode algorithmique chez René Descartes dans la méthode générale
proposée par le Discours de la méthode (1637), notamment quand, en sa deuxième partie, le mathématicien français propose de
« diviser chacune des difficultés que j’examinerois, en autant de parcelles qu’il se pourroit, et qu’il seroit requis pour les mieux
résoudre. » Sans évoquer explicitement les concepts de boucle, d’itération ou de dichotomie, l’approche de Descartes prédispose la
logique à accueillir le concept de programme, mot qui naît en français en1677.

En 1843 , la mathématicienne et pionnière des sciences informatique Ada Lovelace, fille de Lord Byron et assistante de Charles
3
Babbage réalise la première implémentation d'un algorithme sous forme de programme (calcul des nombres de Bernoullii)

Le dixième problème de Hilbertqui fait partie de la liste des 23 problèmes posés par David Hilbert en 1900 à Paris est clairement un
problème algorithmique. En l'occurrence, la réponse est qu'il n'y a pas d'algorithme répondant au problème posé.

L'époque contemporaine
L’algorithmique des XXe et XXIe siècles a pour fondement mathématique des formalismes, par exemple celui des machines de Turing,
qui permettent de définir précisément ce qu'on entend par "étapes", par "précis" et par "non ambigu" et qui donnent un cadre
scientifique pour étudier les propriétés des algorithmes. Cependant, suivant le formalisme choisi on obtient des approches
algorithmiques différentes pour résoudre un même problème. Par exemple l'algorithmique récursive, l'algorithmique parallèle ou
l’informatique quantiquedonnent lieu à des présentations d'algorithmes dif
férentes de celles de l'algorithmique itérative.

Grâce à l'informatique, l'algorithmique s'est beaucoup développée dans la deuxième moitié du XXe siècle. Donald Knuth, auteur du
traité The Art of Computer Programming, qui décrit de très nombreux algorithmes, a contribué, avec d'autres, à en poser les
fondements mathématiques de leur analyse.

Vocabulaire
Le substantif algorithmique désigne l'ensemble des méthodes permettant de créer des algorithmes. Le terme est également employé
comme adjectif.

Un algorithme énonce une solution à un problème sous la forme d’un enchaînement d’


opérations à effectuer.

Les informaticiens utilisent fréquemment l’anglicisme implémentation pour désigner la mise en œuvre de l'algorithme dans un
langage de programmation . Cette implémentation réalise la transcription des opérations constitutives de l’algorithme et précise la
façon dont ces opérations sont invoquées. Cette écriture en langage informatique, est aussi fréquemment désignée par le terme de

4
4
« codage ». On parle de « code source » pour désigner le texte, constituant le programme, réalisant l’algorithme. Le code est plus ou
moins détaillé selon le niveau d’abstraction du langage utilisé, de même qu'une recette de cuisine doit être plus ou moins détaillée
selon l’expérience du cuisinier.

Étude formelle
De nombreux outils formels ou théoriques ont été développés pour décrire les algorithmes, les étudier, exprimer leurs qualités,
pouvoir les comparer :

Ainsi, pour décrire les algorithmes, des structures algorithmiques ont été mises en évidence : structures de
contrôle et structures de données.
Pour justifier de la qualité des algorithmes, les notions de correction, de complétude et de terminaison ont été
mises en place.
Enfin, pour comparer les algorithmes, une théorie de la complexité des algorithmes a été définie.

Structures algorithmiques
Les concepts en œuvre en algorithmique, par exemple selon l'approche de N. Wirth pour les langages les plus répandus (Pascal, C,
etc.), sont en petit nombre. Ils appartiennent à deux classes :

les structures de contrôle

séquences
conditionnelles
boucles
les structures de données

constantes
variables
tableaux
structures récursives (listes, arbres, graphes)

Ce découpage est parfois difficile à percevoir pour certains langages (Lisp, Prolog…) plus basés sur la notion de récursivité où
certaines structures de contrôle sont implicites et, donc, semblent disparaître.

Correction, complétude, terminaison


Ces trois notions « correction », « complétude », « terminaison » sont liées, et supposent qu'un algorithme est écrit pour résoudre un
problème.

La terminaison est l'assurance que l'algorithme terminera en un temps fini. Les preuves de terminaison font habituellement intervenir
une fonction entière positive strictement décroissante à chaque « pas » de l'algorithme.

Étant donnée la garantie qu'un algorithme terminera, la preuve de correction doit apporter l'assurance que si l'algorithme termine en
donnant une proposition de solution, alors cette solution est correcte — c'est-à-dire qu'elle est effectivement une solution au problème
posé.

La preuve de complétude garantit que, pour un espace de problèmes donné, l'algorithme, s'il termine, donnera une solution pour
chacune des entrées.

Complexité algorithmique
Les principales notions mathématiques dans le calcul du coût d’un algorithme précis sont les notions de domination (notée O(f(n)),
« grand o »), où f est une fonction mathématique de n, variable désignant la quantité d’informations (en bits, en nombre
d’enregistrements, etc.) manipulée dans l’algorithme. En algorithmique on trouve souvent des complexités du type :
Notation Type de complexité

complexité constante (indépendante de la taille de la donnée)

complexité logarithmique

complexité linéaire

complexité quasi-linéaire

complexité quadratique

complexité cubique

complexité polynomiale

complexité quasi-polynomiale

complexité exponentielle

complexité factorielle

Sans entrer dans les détails mathématiques, le calcul de l’efficacité d’un algorithme (sa complexité algorithmique) consiste en la
recherche de deux quantités importantes. La première quantité est l’évolution du nombre d’instructions de base en fonction de la
quantité de données à traiter (par exemple, pour un algorithme de tri, il s'agit du nombre de données à trier), que l’on privilégiera sur
le temps d'exécution mesuré en secondes (car ce dernier dépend de la machine sur laquelle l'algorithme s'exécute). La seconde
quantité estimée est la quantité de mémoire nécessaire pour effectuer les calculs. Baser le calcul de la complexité d’un algorithme sur
le temps ou la quantité effective de mémoire qu’un ordinateur particulier prend pour effectuer ledit algorithme ne permet pas de
prendre en compte la structure interne de l’algorithme, ni la particularité de l’ordinateur : selon sa charge de travail, la vitesse de son
processeur, la vitesse d’accès aux données, l’exécution de l’algorithme (qui peut faire intervenir le hasard) ou son organisation de la
mémoire, le temps d’exécution et la quantité de mémoire ne seront pas les mêmes.

Souvent, on examine les performances "au pire", c'est-à-dire dans les configurations telles que le temps d'exécution ou l'espace
mémoire est le plus grand. Il existe également un autre aspect de l'évaluation de l'efficacité d'un algorithme : les performances "en
moyenne". Cela suppose d'avoir un modèle de la répartition statistique des données de l'algorithme, tandis que la mise en œuvre des
techniques d'analyse implique des méthodes assez fines de combinatoire et d'évaluation asymptotique, utilisant en particulier les
séries génératrices et des méthodes avancées d'analyse complexe. L'ensemble de ces méthodes est regroupé sous le nom de
combinatoire analytique.

On trouvera dans l’article sur la théorie de la complexité des algorithmes d’autres évaluations de la complexité qui vont en général
au-delà des valeurs proposées ci-dessus et qui classifient les problèmes algorithmiques (plutôt que les algorithmes) en classes de
complexité.

Quelques indications sur l’efficacité des algorithmes

Souvent, l’efficacité d’un algorithme n’est connue que de manière asymptotique, c’est-à-dire pour de grandes valeurs du paramètre n.
Lorsque ce paramètre est suffisamment petit, un algorithme de complexité asymptotique plus grande peut en pratique être plus
efficace. Ainsi, pour trier un tableau de 30 lignes (c’est un paramètre de petite taille), il est inutile d’utiliser un algorithme évolué
comme le tri rapide (l’un des algorithmes de tri asymptotiquement les plus ef
ficaces en moyenne) : l’algorithme de tri le plus simple à
écrire sera suffisamment efficace.

Entre deux algorithmes dont la complexité est identique, on cherchera à utiliser celui dont l’occupation mémoire est la plus faible.
L’analyse de la complexité algorithmique peut également servir à évaluer l’occupation mémoire d’un algorithme. Enfin, le choix d’un
algorithme plutôt qu’un autre doit se faire en fonction des données que l’on s’attend à lui fournir en entrée. Ainsi, le tri rapide,
lorsque l’on choisit le premier élément comme pivot, se comporte de façon désastreuse si on l’applique à une liste de valeurs déjà
triée. Il n’est donc pas judicieux de l’utiliser si on prévoit que le programme recevra en entrée des listes déjà presque triées ou alors il
faudra choisir le pivot aléatoirement.

Un autre paramètre à prendre en compte est la localité de l’algorithme. Par exemple pour un système à mémoire virtuelle qui dispose
de peu de mémoire vive (par rapport au nombre de données à traiter), le tri rapide sera normalement plus efficace que le tri par tas car
le premier ne passe qu’une seule fois sur chaque élément de la mémoire tandis que le second accède à la mémoire de manière
discontinue (ce qui augmente le risque deswapping).

Enfin, il existe certains algorithmes dont l'analyse de complexité est dite amortie. Cela signifie que, pour certaines exécutions de
l’algorithme (cas marginaux), la complexité de l’algorithme sera très supérieure au cas moyen, mais sera compensée par des
exécutions rendues efficaces du même algorithmedans une suite d'invocations de cet algorithme.

L'analyse lisse mesure les performances des algorithmes sur les pires cas, mais avec une légère perturbation des instances. Elle
permet d'expliquer pourquoi des algorithmes analysés comme inef
ficaces autrement sont en fait efficaces en pratique. L'algorithme du
simplexe est un exemple d'un algorithme qui se comporte bien pour l'analyse lisse.

Approches pratiques
L'algorithmique a développé quelques stratégies pour résoudre les problèmes :

algorithme glouton : un premier algorithme peut souvent être proposé en étudiant le problème très
progressivement : on résout chaque sous-problème localement en espérant que l'ensemble de leurs résultats
composera bien une solution du problème global. On parle alors d'algorithme glouton. L'algorithme glouton n'est
souvent qu'une première étape dans la rédaction d'un algorithme plus performant ;
diviser pour régner : pour améliorer les performances des algorithmes, une technique usuelle consiste à diviser
les données d'un problème en sous-ensembles de tailles plus petites, jusqu'à obtenir des données que
l'algorithme pourra traiter au cas par cas. Une seconde étape dans ces algorithmes consiste à « fusionner » les
résultats partiels pour obtenir une solution globale. Ces algorithmes sont souvent associés à la récursivité ;
recherche exhaustive (ou combinatoire) : une méthode utilisant l'énorme puissance de calcul des ordinateurs
consiste à regarder tous les cas possibles. Cela n'est pour autant possible que dans certains cas particuliers (la
combinatoire est souvent plus forte que l'énorme puissance des ordinateurs, aussi énorme soit-elle) ;
décomposition top-down / bottom-up : (décomposition descendante, décomposition remontante) les
décompositions top-down consistent à essayer de décomposer le problème en sous-problèmes à résoudre
successivement, la décomposition allant jusqu'à des problèmes triviaux faciles à résoudre. L'algorithme global est
alors donné par la composée des algorithmes définis au cours de la décomposition. La démarche bottom-up est la
démarche inverse, elle consiste à partir d'algorithmes simples, ne résolvant qu'une étape du problème, pour
essayer de les composer pour obtenir un algorithme global ;
pré-traitement / post-traitement : parfois, certains algorithmes comportent une ou deux phases identifiées comme
des pré-traitements (à faire avant l'algorithme principal), ou post-traitement (à faire après l'algorithme principal),
pour simplifier l'écriture de l'algorithme général ;
programmation dynamique: elle s'applique lorsque le problème d'optimisation est composé de plusieurs sous-
problèmes de même nature, et qu'une solution optimale du problème global s'obtient à partir de solutions
optimales des sous-problèmes.

Les heuristiques
Pour certains problèmes, les algorithmes ont une complexité beaucoup trop grande pour obtenir un résultat en temps raisonnable,
même si l’on pouvait utiliser une puissance de calcul phénoménale. On est donc amené à rechercher la solution de façon non
systématique (algorithme de Las Vegas) ou de se contenter d'une solution la plus proche possible d’une solution optimale en
procédant par essais successifs (algorithme de Monte-Carlo). Puisque toutes les combinaisons ne peuvent être essayées, certains
choix stratégiques doivent être faits. Ces choix, généralement très dépendants du problème traité, constituent ce qu’on appelle une
heuristique. Le but d’une heuristique n'est donc pas d'essayer toutes les combinaisons possibles, mais de trouver une solution en un
temps raisonnable et par un autre moyen, par exemple en procédant à des tirages aléatoires. La solution peut être exacte (Las Vegas)
ou approchée (Monte-Carlo). Les algorithmes d'Atlantic City quant à eux donnent de façon probablement efficace une réponse
probablement juste (disons avec une chance sur cent millions de se tromper) à la question posée.
C’est ainsi que les programmes de jeu d’échecs ou de jeu de go (pour ne citer que ceux-là) font appel de manière très fréquente à des
heuristiques qui modélisent l’expérience d’un joueur. Certains logiciels antivirus se basent également sur des heuristiques pour
reconnaître des virus informatiques non répertoriés dans leur base, en s’appuyant sur des ressemblances avec des virus connus, c'est
un exemple d'algorithme d'Atlantic City. De même le problème SAT qui est l'archétype du problème NP-complet donc très difficile
5
est résolu de façon pratique et efficace par la mise au point d'heuristiques .

Exemples d’algorithmes, de problèmes, d'applications ou domaines


d'application
Il existe un certain nombre d’algorithmes classiques, utilisés pour résoudre des problèmes ou plus simplement pour illustrer des
méthodes de programmation. On se référera aux articles suivants pour de plus amples détails (voir aussi
liste des algorithmes) :

Algorithmes ou problèmes classiques (du plus simple ou plus complexe)

échange, ou comment échanger les valeurs de deux variables : problème classique illustrant la notion de
variable informatique (voir aussiStructure de données)
Algorithmes de recherche, ou comment retrouver une information dans un ensemble structuré ou non (par
exemple Recherche dichotomique)
algorithme de tri, ou comment trier un ensemble de nombres le plus rapidement possible ou en utilisant le
moins de ressources possible
problème du voyageur de commerce, problème du sac à dos, problème SAT et autres algorithmes ou
approximations de solutions pour les problèmes combinatoires dif
ficiles (dit NP-complets)
Algorithmes ou problèmes illustrant la programmation récursive (voir aussi
algorithme récursif)

tours de Hanoï
huit dames, placer huit dames sur un échiquier sans qu’elles puissent se prendre entre elles,
suite de Conway,
algorithme de dessins récursifs f(ractale) pour le Tapis de Sierpiński, la Courbe du dragon, le Flocon de
Koch…
Algorithmes dans le domaine des mathématiques

calcul de la factorielle d'un nombre, de la Fonction d'Ackermann ou de la suite de Fibonacci,


algorithme du simplexe, qui minimise une fonction linéaire de variables réelles soumises à des contraintes
linéaires,
fraction continue d'un nombre quadratique, permettant d'extraire uneracine carrée, cas particulier de la
méthode de Newton
dans le domaine de l'algèbre : l'algorithme d'unification, le calcul d'une base de Gröbner d'un idéal de
polynôme et plus généralement presque toutes les méthodes decalcul symbolique,
en théorie des graphes qui donne lieu à de nombreux algorithmes,
test de primalité.
Algorithmes pour et dans le domaine de l'informatique

cryptologie et compression de données


Informatique musicale
algorithme génétique en informatique décisionnelle
Analyse et compilation des langages formels (voirCompilateur et Interprète (informatique))
allocation de mémoire (ramasse-miettes)

Annexes

Notes et références Sur les autres projets Wikimedia :

1. Phillipe Collard et Philippe Flajolet, « Algorithmique » (htt algorithmie, sur le Wiktionnaire


p://www.universalis.fr/encyclopedie/algorithmique/), sur
Encyclopædia universalis(consulté le 8 mars 2015). Algorithmique, sur Wikiversity

Algorithmique, sur Wikibooks


2. Le calcul de π « est caractéristique des problèmes
generaux rencontrés en algorithmique. »Phillipe Collard
et Phillipe Flajolet, « Algorithmique : 1. L'exemple du
calcul de π » (http://www.universalis.fr/encyclopedie/algo
rithmique/1-l-exemple-du-calcul-de-p), sur Encyclopædia
universalis (consulté le 8 mars 2015).
3. Stephen Wolfram (en) « Untangling the Tale of Ada
Lovelace » (http://blog.stephenwolfram.com/2015/12/unt
angling-the-tale-of-ada-lovelace/), sur
http://blog.stephenwolfram.com
4. , en cryptographie le terme codage est utilisé dans un
sens différent,
5. (en) Moshe Vardi, Boolean Satisfiability: Theory and
Engineering (Communications of the ACM, Vol. 57 No. 3,
Page 5) (http://cacm.acm.org/magazines/2014/3/172516-
boolean-satisfiability/fulltext).

Bibliographie
(en) Donald E. Knuth, The Art of Computer Programming, vol. 2 : Seminumerical algorithms, Reading, Mass,
Addison-Wesley Pub. Co, 1973, 764 p. (ISBN 978-0-201-89684-8 et 978-0-321-75104-1, OCLC 781024586)
Michel Quercia, Algorithmique : Cours complet, exercices et problèmes résolus, travaux pratiques , Vuibert, 2002,
303 p. (ISBN 2-7117-7091-5)
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein (trad. de l'anglais), Algorithmique :
Cours avec 957 exercices et 158 problèmes, Dunod, 2010 [détail de l’édition]

Liens externes
Qu’est-ce qu'un algorithme ?par Philippe Flajolet et Étienne Parizot sur la revue en ligneInterstices

Articles connexes
Algorithme récursif
Algorithme réparti
Algorithme émergent
Algorithme adaptatif
Art algorithmique
Liste d'algorithmes
Métaheuristique
Recherche opérationnelle
Paradigme (programmation)

Ce document provient de «https://fr.wikipedia.org/w/index.php?title=Algorithmique&oldid=141487882».

La dernière modification de cette page a été faite le 13 octobre 2017 à 15:27.

Droit d'auteur : les textes sont disponibles souslicence Creative Commons attribution, partage dans les mêmes
conditions ; d’autres conditions peuvent s’appliquer . Voyez les conditions d’utilisation pour plus de détails, ainsi que les
crédits graphiques. En cas de réutilisation des textes de cette page, voyezcomment citer les auteurs et mentionner la
licence.
Wikipedia® est une marque déposée de laWikimedia Foundation, Inc., organisation de bienfaisance régie par le
paragraphe 501(c)(3) du code fiscal des États-Unis.

Vous aimerez peut-être aussi