L algorithmique est l étude et la production de règles et techniques qui sont impliquées dans la définition et la concep
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 un problème algorithmique.

Étymologie
Le mot « algorithme » vient du nom du mathématicien Al-Khwârizmî (latinisé au Moyen Âge en Algoritmi), qui, au IXe siècle écrivit le premier ouvrage systématique donnant des solutions aux équations linéaires et quadratiques. Le h muet, non justifié par l'étymologie, vient d’une déformation par rapprochement avec le grec ἀριθμός (arithmós). « Algorithme » a donné « algorithmique ». Le synonyme « algorithmie », vieux mot utilisé par exemple par Wronski en 1811, est encore parfois utilisé.
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 sa correction.
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 en 1677.
En 1843 , la mathématicienne et pionnière des sciences informatique Ada Lovelace, fille de Lord Byron et assistante de Charles Babbage réalise la première implémentation d'un algorithme sous forme de programme (calcul des nombres de Bernoulli).
Le dixième problème de Hilbert qui 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é.
É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 quantique donnent lieu à des présentations d'algorithmes différentes de celles de l'algorithmique itérative.
L'algorithmique s'est surtout développée dans la deuxième moitié du XXe siècle, comme support conceptuel de la programmation des ordinateurs, dans le cadre du développement de l'informatique pendant cette période. Donald Knuth, auteur du traité The Art of Computer Programming qui décrit de très nombreux algorithmes, a contribué, avec d'autres, à 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 « 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 des problèmes algorithmiques
Dans le but de mieux comprendre comment les problèmes se placent les uns par rapport aux autres, la théorie de la complexité établit des hiérarchies de difficulté entre les problèmes algorithmiques, dont les niveaux sont appelés des classe de complexité.
Les deux classes les plus connues étant la classe P des problèmes pour lesquels il existe des algorithmes pouvant les résoudre en temps polynomial, et la classe NP celle des problèmes pour lesquels il existe des algorithmes pouvant les résoudre en temps polynomial mais en faisant des choix non-déterministes. Un problème non résolu de l'étude formelle des problèmes algorithmiques étant le problème P ≟ NP.
Étude formelle des algorithmes
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 se terminera en un temps fini. Les preuves le plus simples de terminaison font intervenir une fonction à valeurs entières positives strictement décroissante à chaque « pas » de l'algorithme.
Étant donné la garantie qu'un algorithme se terminera, la preuve de correction doit apporter l'assurance que si l'algorithme se termine en donnant un résultat, alors ce résultat est effectivement une solution au problème posé. Les preuves de correction font intervenir une spécification logique que doivent vérifier les solutions du problème. La preuve de correction consiste donc à montrer que les résultats de l'algorithme satisfait cette spécification.
La preuve de complétude garantit que, pour un espace de problèmes donné, l'algorithme, s'il se termine, donnera l'ensemble des solutions de l'espace du problème. Les preuves de complétude demandent à identifier l'espace du problème et l'espace des solutions pour ensuite montrer que l'algorithme produit bien le second à partir du premier.
Analyse de la complexité des algorithmes
Les principales notions mathématiques dans le calcul du coût d’un algorithme précis sont les notions de domination (notée , « grand o »), où
est une fonction mathématique de
, 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.
Quelques indications sur l’efficacité des algorithmes et ses biais
L'efficacité algorithmique n’est souvent 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 efficaces en moyenne) : l’algorithme de tri le plus simple à écrire sera suffisamment efficace.
Entre deux algorithmes informatiques de complexité identique, on utilisera celui dont l’occupation mémoire est moindre. 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.
D'autres paramètres à prendre en compte sont notamment :
- les biais intrinsèques (acceptés ou involontaires) de nombreux algorithmes peuvent tromper les utilisateurs ou systèmes d'intelligence artificielle, de machine learning, de diagnostic informatique, mécanique, médical, de prévision, de prévention, de sondages ou d'aide à la décision (notamment pour les réseaux sociaux, l'éducation [ex : parcoursup ], la médecine, la justice, la police, l'armée, la politique, l'embauche…) prenant mal en compte ou pas du tous ces biais. En 2019, des chercheurs de Télécom ParisTech ont produit un rapport inventoriant les principaux biais connus, et quelques pistes de remédiation
- la localité de l’algorithme. Par exemple pour un système à mémoire virtuelle ayant 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 de swapping).
- certains algorithmes (ceux dont l'analyse de complexité est dite amortie), pour certaines exécutions de l’algorithme (cas marginaux), présentent une complexité qui sera très supérieure au cas moyen, mais ceci sera compensé par des exécutions rendues efficaces du même algorithme dans une suite d'invocations de cet algorithme.
- l'Analyse lisse d'algorithme, qui mesure les performances des algorithmes sur les pires cas, mais avec une légère perturbation des instances. Elle explique pourquoi certains algorithmes analysés comme inefficaces 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 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 aussi Structure 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 difficiles (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 (fractale) 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 une racine 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 de calcul 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 (voir Compilateur et Interprète (informatique)),
- allocation de mémoire (ramasse-miettes).
Notes et références
- Phillipe Collard et Philippe Flajolet, « Algorithmique », sur Encyclopædia universalis (consulté le ).
- Albert Dauzat, Jean Dubois, Henri Mitterand, Nouveau dictionnaire étymologique et historique, 1971
- Hoéné de Wronski, Introduction à la philosophie des mathématiques et technie de l'algorithmie, Chez Courcier, imprimeur-libraire pour les mathématiques, (lire en ligne)
- Par exemple, l'UQAM propose un cours intitulé « Algorithmie de base et interactivité », et l'université de Montréal, un cours intitulé « Algorithmie et effets audionumériques ».
- Donald Knuth, « Ancient Babylonian Algorithms », Communications of the ACM, vol. 15, no 7, , repris dans Donald Knuth, Selected Papers on Computer Science, Addison-Wesley, , p. 185, traduit en français sous le titre Algoritmes babyloniens anciens dans Donald Knuth (trad. P. Cégielski), Éléments pour une histoire de l'informatique, Librairie Eyrolles, .
- Christine Proust, « Mathématiques en Mésopotamie », Images des Mathématiques, (lire en ligne).
- Le calcul de π « est caractéristique des problèmes généraux rencontrés en algorithmique. » Phillipe Collard et Phillipe Flajolet, « Algorithmique : 1. L'exemple du calcul de π », sur Encyclopædia universalis (consulté le ).
- Stephen Wolfram (en) « Untangling the Tale of Ada Lovelace », sur blog.stephenwolfram.com
- En cryptographie, le terme codage est utilisé dans un sens différent.
- Hertel & Delattre V (2019) [SEAActu17h-20190302 Les algorithmes sont partout, leurs biais de conception nous trompent] ; le 02.03.2019
- (en) Moshe Vardi, Boolean Satisfiability: Theory and Engineering (Communications of the ACM, Vol. 57 Nos. 3, p. 5).
Annexes
Bibliographie
- (en) Donald E. Knuth, The Art of Computer Programming, vol. 2 : Seminumerical algorithms, Reading, Mass, Addison-Wesley Pub. Co, , 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, , 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, [détail de l’édition]
- Patrick Bosc, Marc Guyomard et Laurent Miclet, Conception d'algorithmes : principes et 150 exercices corrigés, Paris, Eyrolles, , 832 p. (ISBN 978-2-212-67728-7, BNF 45663637)
Articles connexes
- Algorithme récursif
- Algorithme réparti
- Algorithme émergent
- Algorithme adaptatif
- Algorithme d'approximation
- Art algorithmique
- Liste d'algorithmes
- Métaheuristique
- Recherche opérationnelle
- Paradigme (programmation)
Liens externes
- Notice dans un dictionnaire ou une encyclopédie généraliste :
- Universalis
Auteur: www.NiNa.Az
Date de publication:
wikipedia, wiki, wikipédia, livre, livres, bibliothèque, article, lire, télécharger, gratuit, téléchargement gratuit, mp3, vidéo, mp4, 3gp, jpg, jpeg, gif, png, image, musique, chanson, film, livre, jeu, jeux, mobile, téléphone, android, ios, apple, téléphone portable, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, ordinateur
L algorithmique est l etude et la production de regles et techniques qui sont impliquees dans la definition et la conception d algorithmes c est a dire de processus systematiques de resolution d un probleme permettant de decrire precisement des etapes pour resoudre un probleme algorithmique Organigramme de programmation representant l algorithme d Euclide EtymologieLe mot algorithme vient du nom du mathematicien Al Khwarizmi latinise au Moyen Age en Algoritmi qui au IX e siecle ecrivit le premier ouvrage systematique donnant des solutions aux equations lineaires et quadratiques Le h muet non justifie par l etymologie vient d une deformation par rapprochement avec le grec ἀri8mos arithmos Algorithme a donne algorithmique Le synonyme algorithmie vieux mot utilise par exemple par Wronski en 1811 est encore parfois utilise HistoireFragment d une tablette cuneiforme avec un probleme algorithmique MET ME86 11 404Antiquite Les premiers algorithmes dont on a retrouve des descriptions datent des Babyloniens au IIIe millenaire av J C Ils decrivent des methodes de calcul et des resolutions d equations a l aide d exemples Un algorithme celebre est celui qui se trouve dans le livre 7 des Elements d Euclide et appele algorithme d Euclide Il permet de trouver le plus grand diviseur commun ou PGCD de deux nombres Un point particulierement remarquable est qu il contient explicitement une iteration et que les propositions 1 et 2 demontrent sa correction C est Archimede qui proposa le premier un algorithme pour le calcul de p Etude systematique Le premier a avoir systematise des algorithmes est le mathematicien perse Al Khwarizmi actif entre 813 et 833 Dans son ouvrage Abrege du calcul par la restauration et la comparaison il etudie toutes les equations du second degre et en donne la resolution par des algorithmes generaux Il utilise des methodes semblables a celles des Babyloniens mais se differencie par ses explications systematiques la ou les Babyloniens donnaient seulement des exemples Le savant andalou Averroes 1126 1198 evoque une methode de raisonnement ou la these s affine etape par etape iterativement jusqu a une certaine convergence et ceci conformement au deroulement d un algorithme A la meme epoque au XII e siecle le moine Adelard de Bath introduit le terme latin de algorismus par reference au nom de Al Khuwarizmi Ce mot donne algorithme en francais en 1554 Au XVII e siecle on pourrait entrevoir une certaine allusion a la methode algorithmique chez Rene Descartes dans la methode generale proposee par le Discours de la methode 1637 notamment quand en sa deuxieme partie le mathematicien francais propose de diviser chacune des difficultes que j examinerois en autant de parcelles qu il se pourroit et qu il seroit requis pour les mieux resoudre Sans evoquer explicitement les concepts de boucle d iteration ou de dichotomie l approche de Descartes predispose la logique a accueillir le concept de programme mot qui nait en francais en 1677 En 1843 la mathematicienne et pionniere des sciences informatique Ada Lovelace fille de Lord Byron et assistante de Charles Babbage realise la premiere implementation d un algorithme sous forme de programme calcul des nombres de Bernoulli Le dixieme probleme de Hilbert qui fait partie de la liste des 23 problemes poses par David Hilbert en 1900 a Paris est clairement un probleme algorithmique En l occurrence la reponse est qu il n y a pas d algorithme repondant au probleme pose Epoque contemporaine L algorithmique des XX e et XXI e siecles a pour fondement mathematique des formalismes par exemple celui des machines de Turing qui permettent de definir precisement ce qu on entend par etapes par precis et par non ambigu et qui donnent un cadre scientifique pour etudier les proprietes des algorithmes Cependant suivant le formalisme choisi on obtient des approches algorithmiques differentes pour resoudre un meme probleme Par exemple l algorithmique recursive l algorithmique parallele ou l informatique quantique donnent lieu a des presentations d algorithmes differentes de celles de l algorithmique iterative L algorithmique s est surtout developpee dans la deuxieme moitie du XX e siecle comme support conceptuel de la programmation des ordinateurs dans le cadre du developpement de l informatique pendant cette periode Donald Knuth auteur du traite The Art of Computer Programming qui decrit de tres nombreux algorithmes a contribue avec d autres a poser les fondements mathematiques de leur analyse VocabulaireLe substantif algorithmique designe l ensemble des methodes permettant de creer des algorithmes Le terme est egalement employe comme adjectif Un algorithme enonce une solution a un probleme sous la forme d un enchainement d operations a effectuer Les informaticiens utilisent frequemment l anglicisme implementation pour designer la mise en œuvre de l algorithme dans un langage de programmation Cette implementation realise la transcription des operations constitutives de l algorithme et precise la facon dont ces operations sont invoquees Cette ecriture en langage informatique est aussi frequemment designee par le terme de codage On parle de code source pour designer le texte constituant le programme realisant l algorithme Le code est plus ou moins detaille selon le niveau d abstraction du langage utilise de meme qu une recette de cuisine doit etre plus ou moins detaillee selon l experience du cuisinier Etude formelle des problemes algorithmiquesArticle detaille Theorie de la complexite informatique theorique Dans le but de mieux comprendre comment les problemes se placent les uns par rapport aux autres la theorie de la complexite etablit des hierarchies de difficulte entre les problemes algorithmiques dont les niveaux sont appeles des classe de complexite Les deux classes les plus connues etant la classe P des problemes pour lesquels il existe des algorithmes pouvant les resoudre en temps polynomial et la classe NP celle des problemes pour lesquels il existe des algorithmes pouvant les resoudre en temps polynomial mais en faisant des choix non deterministes Un probleme non resolu de l etude formelle des problemes algorithmiques etant le probleme P NP Etude formelle des algorithmesDe nombreux outils formels ou theoriques ont ete developpes pour decrire les algorithmes les etudier exprimer leurs qualites pouvoir les comparer ainsi pour decrire les algorithmes des structures algorithmiques ont ete mises en evidence structures de controle et structures de donnees pour justifier de la qualite des algorithmes les notions de correction de completude et de terminaison ont ete mises en place enfin pour comparer les algorithmes une theorie de la complexite des algorithmes a ete definie Structures algorithmiques Les concepts en œuvre en algorithmique par exemple selon l approche de N Wirth pour les langages les plus repandus Pascal C etc sont en petit nombre Ils appartiennent a deux classes les structures de controle sequences conditionnelles boucles les structures de donnees constantes variables tableaux structures recursives listes arbres graphes Ce decoupage est parfois difficile a percevoir pour certains langages Lisp Prolog plus bases sur la notion de recursivite ou certaines structures de controle sont implicites et donc semblent disparaitre Correction completude terminaison Ces trois notions correction completude terminaison sont liees et supposent qu un algorithme est ecrit pour resoudre un probleme La terminaison est l assurance que l algorithme se terminera en un temps fini Les preuves le plus simples de terminaison font intervenir une fonction a valeurs entieres positives strictement decroissante a chaque pas de l algorithme Etant donne la garantie qu un algorithme se terminera la preuve de correction doit apporter l assurance que si l algorithme se termine en donnant un resultat alors ce resultat est effectivement une solution au probleme pose Les preuves de correction font intervenir une specification logique que doivent verifier les solutions du probleme La preuve de correction consiste donc a montrer que les resultats de l algorithme satisfait cette specification La preuve de completude garantit que pour un espace de problemes donne l algorithme s il se termine donnera l ensemble des solutions de l espace du probleme Les preuves de completude demandent a identifier l espace du probleme et l espace des solutions pour ensuite montrer que l algorithme produit bien le second a partir du premier Analyse de la complexite des algorithmes Article detaille Analyse de la complexite des algorithmes Les principales notions mathematiques dans le calcul du cout d un algorithme precis sont les notions de domination notee O f n displaystyle mathcal O f n grand o ou f displaystyle f est une fonction mathematique de n displaystyle n variable designant la quantite d informations en bits en nombre d enregistrements etc manipulee dans l algorithme En algorithmique on trouve souvent des complexites du type Notation Type de complexiteO 1 displaystyle mathcal O 1 complexite constante independante de la taille de la donnee O log n displaystyle mathcal O log n complexite logarithmiqueO n displaystyle mathcal O n complexite lineaireO nlog n displaystyle mathcal O n log n complexite quasi lineaireO n2 displaystyle mathcal O n 2 complexite quadratiqueO n3 displaystyle mathcal O n 3 complexite cubiqueO np displaystyle mathcal O n p complexite polynomialeO nlog n displaystyle mathcal O n log n complexite quasi polynomialeO 2n displaystyle mathcal O 2 n complexite exponentielleO n displaystyle mathcal O n complexite factorielle Sans entrer dans les details mathematiques le calcul de l efficacite d un algorithme sa complexite algorithmique consiste en la recherche de deux quantites importantes La premiere quantite est l evolution du nombre d instructions de base en fonction de la quantite de donnees a traiter par exemple pour un algorithme de tri il s agit du nombre de donnees a trier que l on privilegiera sur le temps d execution mesure en secondes car ce dernier depend de la machine sur laquelle l algorithme s execute La seconde quantite estimee est la quantite de memoire necessaire pour effectuer les calculs Baser le calcul de la complexite d un algorithme sur le temps ou la quantite effective de memoire qu un ordinateur particulier prend pour effectuer ledit algorithme ne permet pas de prendre en compte la structure interne de l algorithme ni la particularite de l ordinateur selon sa charge de travail la vitesse de son processeur la vitesse d acces aux donnees l execution de l algorithme qui peut faire intervenir le hasard ou son organisation de la memoire le temps d execution et la quantite de memoire ne seront pas les memes Souvent on examine les performances au pire c est a dire dans les configurations telles que le temps d execution ou l espace memoire est le plus grand Il existe egalement un autre aspect de l evaluation de l efficacite d un algorithme les performances en moyenne Cela suppose d avoir un modele de la repartition statistique des donnees de l algorithme tandis que la mise en œuvre des techniques d analyse implique des methodes assez fines de combinatoire et d evaluation asymptotique utilisant en particulier les series generatrices et des methodes avancees d analyse complexe L ensemble de ces methodes est regroupe sous le nom de combinatoire analytique Quelques indications sur l efficacite des algorithmes et ses biais L efficacite algorithmique n est souvent connue que de maniere asymptotique c est a dire pour de grandes valeurs du parametre n Lorsque ce parametre est suffisamment petit un algorithme de complexite asymptotique plus grande peut en pratique etre plus efficace Ainsi pour trier un tableau de 30 lignes c est un parametre de petite taille il est inutile d utiliser un algorithme evolue comme le tri rapide l un des algorithmes de tri asymptotiquement les plus efficaces en moyenne l algorithme de tri le plus simple a ecrire sera suffisamment efficace Entre deux algorithmes informatiques de complexite identique on utilisera celui dont l occupation memoire est moindre L analyse de la complexite algorithmique peut egalement servir a evaluer l occupation memoire d un algorithme Enfin le choix d un algorithme plutot qu un autre doit se faire en fonction des donnees que l on s attend a lui fournir en entree Ainsi le tri rapide lorsque l on choisit le premier element comme pivot se comporte de facon desastreuse si on l applique a une liste de valeurs deja triee Il n est donc pas judicieux de l utiliser si on prevoit que le programme recevra en entree des listes deja presque triees ou alors il faudra choisir le pivot aleatoirement D autres parametres a prendre en compte sont notamment les biais intrinseques acceptes ou involontaires de nombreux algorithmes peuvent tromper les utilisateurs ou systemes d intelligence artificielle de machine learning de diagnostic informatique mecanique medical de prevision de prevention de sondages ou d aide a la decision notamment pour les reseaux sociaux l education ex parcoursup la medecine la justice la police l armee la politique l embauche prenant mal en compte ou pas du tous ces biais En 2019 des chercheurs de Telecom ParisTech ont produit un rapport inventoriant les principaux biais connus et quelques pistes de remediation la localite de l algorithme Par exemple pour un systeme a memoire virtuelle ayant peu de memoire vive par rapport au nombre de donnees a traiter le tri rapide sera normalement plus efficace que le tri par tas car le premier ne passe qu une seule fois sur chaque element de la memoire tandis que le second accede a la memoire de maniere discontinue ce qui augmente le risque de swapping certains algorithmes ceux dont l analyse de complexite est dite amortie pour certaines executions de l algorithme cas marginaux presentent une complexite qui sera tres superieure au cas moyen mais ceci sera compense par des executions rendues efficaces du meme algorithme dans une suite d invocations de cet algorithme l Analyse lisse d algorithme qui mesure les performances des algorithmes sur les pires cas mais avec une legere perturbation des instances Elle explique pourquoi certains algorithmes analyses comme inefficaces 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 pratiquesL algorithmique a developpe quelques strategies pour resoudre les problemes algorithme glouton un premier algorithme peut souvent etre propose en etudiant le probleme tres progressivement on resout chaque sous probleme localement en esperant que l ensemble de leurs resultats composera bien une solution du probleme global On parle alors d algorithme glouton L algorithme glouton n est souvent qu une premiere etape dans la redaction d un algorithme plus performant diviser pour regner pour ameliorer les performances des algorithmes une technique usuelle consiste a diviser les donnees d un probleme en sous ensembles de tailles plus petites jusqu a obtenir des donnees que l algorithme pourra traiter au cas par cas Une seconde etape dans ces algorithmes consiste a fusionner les resultats partiels pour obtenir une solution globale Ces algorithmes sont souvent associes a la recursivite recherche exhaustive ou combinatoire une methode utilisant l enorme puissance de calcul des ordinateurs consiste a regarder tous les cas possibles Cela n est pour autant possible que dans certains cas particuliers la combinatoire est souvent plus forte que l enorme puissance des ordinateurs aussi enorme soit elle decomposition top down bottom up decomposition descendante decomposition remontante les decompositions top down consistent a essayer de decomposer le probleme en sous problemes a resoudre successivement la decomposition allant jusqu a des problemes triviaux faciles a resoudre L algorithme global est alors donne par la composee des algorithmes definis au cours de la decomposition La demarche bottom up est la demarche inverse elle consiste a partir d algorithmes simples ne resolvant qu une etape du probleme pour essayer de les composer pour obtenir un algorithme global pre traitement post traitement parfois certains algorithmes comportent une ou deux phases identifiees comme des pre traitements a faire avant l algorithme principal ou post traitement a faire apres l algorithme principal pour simplifier l ecriture de l algorithme general programmation dynamique elle s applique lorsque le probleme d optimisation est compose de plusieurs sous problemes de meme nature et qu une solution optimale du probleme global s obtient a partir de solutions optimales des sous problemes Les heuristiques Articles detailles Algorithme de Las Vegas et Algorithme de Monte Carlo Pour certains problemes les algorithmes ont une complexite beaucoup trop grande pour obtenir un resultat en temps raisonnable meme si l on pouvait utiliser une puissance de calcul phenomenale On est donc amene a rechercher la solution de facon non systematique algorithme de Las Vegas ou de se contenter d une solution la plus proche possible d une solution optimale en procedant par essais successifs algorithme de Monte Carlo Puisque toutes les combinaisons ne peuvent etre essayees certains choix strategiques doivent etre faits Ces choix generalement tres dependants du probleme traite 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 procedant a des tirages aleatoires La solution peut etre exacte Las Vegas ou approchee Monte Carlo Les algorithmes d Atlantic City quant a eux donnent de facon probablement efficace une reponse probablement juste disons avec une chance sur cent millions de se tromper a la question posee C est ainsi que les programmes de jeu d echecs ou de jeu de go pour ne citer que ceux la font appel de maniere tres frequente a des heuristiques qui modelisent l experience d un joueur Certains logiciels antivirus se basent egalement sur des heuristiques pour reconnaitre des virus informatiques non repertories dans leur base en s appuyant sur des ressemblances avec des virus connus c est un exemple d algorithme d Atlantic City De meme le probleme SAT qui est l archetype du probleme NP complet donc tres difficile est resolu de facon pratique et efficace par la mise au point d heuristiques Exemples d algorithmes de problemes d applications ou domaines d applicationIl existe un certain nombre d algorithmes classiques utilises pour resoudre des problemes ou plus simplement pour illustrer des methodes de programmation On se referera aux articles suivants pour de plus amples details voir aussi liste des algorithmes algorithmes ou problemes classiques du plus simple ou plus complexe echange ou comment echanger les valeurs de deux variables probleme classique illustrant la notion de variable informatique voir aussi Structure de donnees algorithmes de recherche ou comment retrouver une information dans un ensemble structure 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 probleme du voyageur de commerce probleme du sac a dos probleme SAT et autres algorithmes ou approximations de solutions pour les problemes combinatoires difficiles dit NP complets algorithmes ou problemes illustrant la programmation recursive voir aussi algorithme recursif tours de Hanoi huit dames placer huit dames sur un echiquier sans qu elles puissent se prendre entre elles suite de Conway algorithme de dessins recursifs fractale pour le Tapis de Sierpinski la Courbe du dragon le Flocon de Koch algorithmes dans le domaine des mathematiques 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 lineaire de variables reelles soumises a des contraintes lineaires fraction continue d un nombre quadratique permettant d extraire une racine carree cas particulier de la methode de Newton dans le domaine de l algebre l algorithme d unification le calcul d une base de Grobner d un ideal de polynome et plus generalement presque toutes les methodes de calcul symbolique en theorie des graphes qui donne lieu a de nombreux algorithmes test de primalite algorithmes pour et dans le domaine de l informatique cryptologie et compression de donnees informatique musicale algorithme genetique en informatique decisionnelle analyse et compilation des langages formels voir Compilateur et Interprete informatique allocation de memoire ramasse miettes Notes et referencesPhillipe Collard et Philippe Flajolet Algorithmique sur Encyclopaedia universalis consulte le 8 mars 2015 Albert Dauzat Jean Dubois Henri Mitterand Nouveau dictionnaire etymologique et historique 1971 Hoene de Wronski Introduction a la philosophie des mathematiques et technie de l algorithmie Chez Courcier imprimeur libraire pour les mathematiques 1811 lire en ligne Par exemple l UQAM propose un cours intitule Algorithmie de base et interactivite et l universite de Montreal un cours intitule Algorithmie et effets audionumeriques Donald Knuth Ancient Babylonian Algorithms Communications of the ACM vol 15 no 7 juillet 1972 repris dans Donald Knuth Selected Papers on Computer Science Addison Wesley 1996 p 185 traduit en francais sous le titre Algoritmes babyloniens anciens dans Donald Knuth trad P Cegielski Elements pour une histoire de l informatique Librairie Eyrolles 2011 Christine Proust Mathematiques en Mesopotamie Images des Mathematiques 14 avril 2014 lire en ligne Le calcul de p est caracteristique des problemes generaux rencontres en algorithmique Phillipe Collard et Phillipe Flajolet Algorithmique 1 L exemple du calcul de p sur Encyclopaedia universalis consulte le 8 mars 2015 Stephen Wolfram en Untangling the Tale of Ada Lovelace sur blog stephenwolfram com En cryptographie le terme codage est utilise dans un sens different a et b Hertel amp Delattre V 2019 SEAActu17h 20190302 Les algorithmes sont partout leurs biais de conception nous trompent le 02 03 2019 en Moshe Vardi Boolean Satisfiability Theory and Engineering Communications of the ACM Vol 57 Nos 3 p 5 AnnexesSur les autres projets Wikimedia algorithmie sur le WiktionnaireAlgorithmique sur WikiversityAlgorithmique sur Wikibooks 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 problemes resolus 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 problemes Dunod 2010 detail de l edition Patrick Bosc Marc Guyomard et Laurent Miclet Conception d algorithmes principes et 150 exercices corriges Paris Eyrolles 2019 832 p ISBN 978 2 212 67728 7 BNF 45663637 Articles connexes Algorithme recursif Algorithme reparti Algorithme emergent Algorithme adaptatif Algorithme d approximation Art algorithmique Liste d algorithmes Metaheuristique Recherche operationnelle Paradigme programmation Liens externes Notice dans un dictionnaire ou une encyclopedie generaliste Universalis