Article de reference

Algorithme

Organigramme d'un algorithme permettant de trouver le plus grand commun diviseur de deux nombres. En mathématiques et en informatique , un algorithme ( / ˈ æ l ɡ ə r ɪ ð əm / Un...

Organigramme d'un algorithme permettant de trouver le plus grand commun diviseur de deux nombres.

En mathématiques et en informatique , un algorithme ( Un algorithme (ⓘ ) est uneséquence finie d'mathématiquement rigoureuses, généralement utilisée pour résoudre une classe deproblèmesou pour effectuer uncalcul. Les algorithmes servent de spécifications pour réaliserdes calculsettraiter des données. Les algorithmes plus avancés peuvent utiliserdes conditionspour orienter l'exécution du code vers différents chemins (on parle alors deprise de décision automatiséedes inférencesvalides(on parle alors deraisonnement automatisé).

À l'inverse, une heuristique est une approche de résolution de problèmes sans résultats corrects ou optimaux clairement définis. Par exemple, bien que les systèmes de recommandation sur les réseaux sociaux soient communément appelés « algorithmes », ils reposent en réalité sur des heuristiques, car il n'existe pas de recommandation véritablement « correcte ».

En tant que méthode efficace , un algorithme peut être exprimé dans un espace et un temps finis et dans un langage formel bien défini pour le calcul d'une fonction . À partir d'un état initial et d'une entrée, un calcul est effectué à chaque étape, produisant finalement une sortie et se terminant. La transition entre les états peut être non déterministe ; les algorithmes randomisés intègrent des entrées aléatoires.

Muḥammad ibn Mūsā al-Khwārizmī écrivit le kitāb al-ḥisāb al-hindī (« Livre du calcul indien ») et le kitab al-jam' wa'l-tafriq al-ḥisāb al-hindī (« Addition et soustraction en arithmétique indienne »). Au début du XIIe siècle, des traductions latines de ces textes, traitant du système de numération et de l'arithmétique indo-arabe, apparurent, par exemple le Liber Alghoarismi de practica arismetrice , attribué à Jean de Séville , et le Liber Algoritmi de numero Indorum , attribué à Adélard de Bath . Ici, alghoarismi ou algoritmi est la latinisation du nom d'Al-Khwarizmi ; Le texte commence par la phrase Dixit Algoritmi , ou « Ainsi parla Al-Khwarizmi ».

Muḥammad ibn Mūsā al-Khwārizmī : Le mathématicien du IXe siècle dont le nom est à l'origine du mot « algorithme ».

Le mot « algorism » en anglais en est venu à désigner l’utilisation de la notation positionnelle dans les calculs ; on le trouve dans l’ Ancrene Wisse, datant d’environ 1225. À l’époque où Geoffrey Chaucer écrivait les Contes de Canterbury à la fin du XIVe siècle, il utilisait une variante de ce même mot pour décrire les pierres d’augrym , pierres servant au calcul positionnel. Au XVe siècle, sous l’influence du mot grec ἀριθμός ( arithmos , « nombre » ; cf. « arithmétique »), le mot latin fut transformé en algorithmus . En 1596, cette forme du mot était utilisée en anglais, sous la forme « algorithm » , par Thomas Hood .

Définition

les programmes informatiques , toute procédure administrative ou recette de cuisine . En général, un programme est un algorithme uniquement s’il finit par s’arrêter . Formellement, un algorithme est un ensemble explicite d’instructions permettant de produire un résultat, instructions qui peuvent être suivies par un ordinateur ou un humain effectuant des opérations spécifiques sur des symboles .

Histoire

mathématiques babyloniennes (vers 2500 av. J.-C.) , les mathématiques égyptiennes (vers 1550 av. J.-C.) , les mathématiques indiennes (vers 800 av. J.-C. et plus tard) , l'oracle d'Ifa (vers 500 av. J.-C.) , les mathématiques grecques (vers 240 av. J.-C.) , les mathématiques chinoises ( vers 200 av. J.-C. et plus tard) et les mathématiques arabes (vers 800 apr. J.-C.)

Les premières traces d'algorithmes se trouvent dans les mathématiques de la Mésopotamie antique . Une tablette d'argile sumérienne découverte à Shuruppak, près de Bagdad , et datée d'environ 2500 av algorithme de division . Sous la dynastie d'Hammurabi babyloniennes décrivent des algorithmes de calcul. Les algorithmes étaient également utilisés en astronomie babylonienne . Des tablettes d'argile babyloniennes décrivent et mettent en œuvre des procédures algorithmiques pour calculer la date et le lieu d'événements astronomiques importants.

On trouve également des algorithmes arithmétiques dans les mathématiques de l'Égypte antique , notamment dans le papyrus mathématique de Rhind les mathématiques hellénistiques . On peut citer comme exemples le crible d'Ératosthène , décrit dans l' Introduction à l'arithmétique de Nicomaque [ et l' algorithme d'Euclide , présenté pour la première fois dans les Éléments d'Euclide ( Shulba Sutras , l' école du Kerala et le Brāhmasphuṭasiddhānta .

Au IXe siècle, Muḥammad ibn Mūsā al-Khwārizmī révolutionna le domaine en établissant l'algorithme comme une séquence systématique et finie d'étapes logiques permettant de résoudre des problèmes mathématiques. Dans son ouvrage influent, le Livre abrégé du calcul par complétion et équilibrage , il dépassa les solutions numériques spécifiques pour introduire des procédures générales de réduction et d'équilibrage algébriques. Ceci transforma les mathématiques en un processus « mécanique » régi par des règles bien définies – un changement fondamental qui jeta les bases de la théorie algorithmique moderne. La traduction latine de son traité d'arithmétique, intitulé Algoritmi de numero Indorum, donna naissance au terme « algorithme », dérivé de la latinisation de son nom, Algoritmi, pour décrire précisément cette nouvelle approche des mathématiques fondée sur des règles.

Le premier algorithme cryptographique de déchiffrement de code chiffré a été développé par Al-Kindi , un mathématicien arabe du IXe siècle, dans un manuscrit intitulé « Sur le déchiffrement des messages cryptographiques » . Il y donne la première description de la cryptanalyse par analyse fréquentielle , le tout premier algorithme de décryptage.

Ordinateurs

Horloges à poids

Les horloges à poids furent une invention européenne majeure au Moyen Âge , notamment le mécanisme d'échappement à verge produisant le tic-tac des horloges mécaniques. Les machines automatiques précises menèrent aux automates mécaniques au XIIIe siècle et aux machines à calculer – les machines à différences et analytiques de Charles Babbage et Ada Lovelace au milieu du XIXe siècle. Lovelace conçut le premier algorithme destiné à un ordinateur, la machine analytique de Babbage, le premier véritable ordinateur Turing-complet , surpassant les calculatrices mécaniques de l'époque. Bien que la réalisation complète de la seconde machine de Babbage n'ait eu lieu que des décennies après sa mort, Lovelace est considérée comme la première programmeuse de l'histoire.

Relais électromécanique

Le métier à tisser Jacquard , précurseur des cartes perforées , et les centraux téléphoniques ont conduit au développement des premiers ordinateurs. Au milieu du XIXe siècle, le télégraphe était répandu dans le monde entier. À la fin du XIXe siècle, le téléscripteur ( téléscripteur ( le code Baudot sur bande perforée.

Les réseaux de commutation téléphonique à relais électromécaniques ont été inventés en 1835. Ces travaux ont conduit à l'invention de l'additionneur numérique par George Stibitz en 1937. Alors qu'il travaillait aux Laboratoires Bell, il a constaté l'utilisation « lourde » des calculatrices mécaniques à engrenages, ce qui l'a incité à créer un additionneur numérique expérimental chez lui.

Formalisation

Diagramme d' Ada Lovelace tiré de « Note G », le premier algorithme informatique publié

En 1928, une formalisation partielle du concept moderne d'algorithmes a débuté avec les tentatives de résolution du problème de décision (Entscheidungsproblem) de David Hilbert . Les formalisations ultérieures ont été conçues comme des tentatives de définition de la « calculabilité effective » ou de la « méthode effective » . Parmi ces formalisations, on peut citer les fonctions récursives de Gödel - Herbrand - Kleene (1930, 1934 et 1935), le lambda-calcul d' Alonzo Church (1936), la Formulation 1 d' Emil Post (1936) et les machines de Turing d' Alan Turing (1936-1937 et 1939).

Algorithmes modernes

Instagram et YouTube . Les algorithmes servent à analyser les préférences des utilisateurs et à leur proposer des contenus similaires. L'informatique quantique utilise des procédures algorithmiques quantiques pour résoudre les problèmes plus rapidement. Plus récemment, en 2024, le NIST a mis à jour ses normes de chiffrement post-quantique, intégrant de nouveaux algorithmes de chiffrement afin de renforcer la protection contre les attaques utilisant l'informatique quantique.

Représentations

Les algorithmes peuvent être exprimés de diverses manières, notamment en langage naturel , en pseudocode , sous forme d'organigrammes , de diagrammes de Drakon , de langages de programmation ou de tables de contrôle . Les expressions en langage naturel sont souvent verbeuses et ambiguës, et sont rarement utilisées pour les algorithmes complexes ou techniques. Le pseudocode, les organigrammes, les diagrammes de Drakon et les tables de contrôle sont des représentations structurées des algorithmes qui permettent d'éviter les ambiguïtés courantes du langage naturel. Les langages de programmation servent principalement à exprimer les algorithmes sous une forme exécutable par ordinateur, mais ils sont également utilisés pour définir ou documenter les algorithmes.

Machines de Turing

Il existe de nombreuses représentations possibles, et les programmes de machines de Turing peuvent être exprimés sous forme de séquences de tables de machines (voir machine à états finis , table de transitions et table de contrôle pour plus d'informations), de diagrammes de flux et de diagrammes de Drakon (voir diagramme d'états pour plus d'informations), d'une forme rudimentaire de code machine ou de code assembleur appelée « ensembles de quadruplets », et bien plus encore. Les représentations d'algorithmes peuvent également être classées en trois niveaux de description de machines de Turing : description de haut niveau, description d'implémentation et description formelle. Une description de haut niveau décrit les propriétés de l'algorithme lui-même, sans préciser son implémentation sur la machine de Turing. Une description d'implémentation décrit la manière générale dont la machine déplace sa tête et stocke des données pour exécuter l'algorithme, mais ne donne pas les états exacts. La description formelle, la plus détaillée, fournit la table d'états et la liste des transitions exactes de la machine de Turing.

Représentation par organigramme

Un organigramme est une représentation graphique qui décrit et documente un algorithme. Il comporte quatre symboles principaux : des flèches indiquant le flux du programme, des rectangles (SÉQUENCE, ALLER À), des losanges représentant les décisions et des points (OU). Les sous-structures peuvent être imbriquées dans les rectangles, mais uniquement si la superstructure ne possède qu'une seule sortie.

Analyse algorithmique

, en notation grand O. L'algorithme n'a besoin de mémoriser que deux valeurs : la somme de tous les éléments calculés jusqu'à présent et sa position actuelle dans la liste d'entrée. Si l'espace nécessaire au stockage des nombres d'entrée n'est pas pris en compte, son espace mémoire requis est de ) , sinon il est de .

Différents algorithmes peuvent accomplir la même tâche avec un ensemble d'instructions différent, en un temps, un espace ou un « effort » inférieur ou supérieur à celui d'autres algorithmes. Par exemple, un algorithme de recherche binaire (de coût ) est plus performant qu'une recherche séquentielle (de coût ) pour la consultation de listes triées.

formel versus empirique

analyse et l'étude des algorithmes constituent une discipline de l'informatique . Les algorithmes sont souvent étudiés de manière abstraite, sans référence à un langage de programmation ou à une implémentation spécifique. À l'instar d'autres disciplines mathématiques, l'analyse se concentre sur les propriétés de l'algorithme, et non sur son implémentation. Le pseudocode est couramment utilisé en analyse, car il offre une représentation simple et générale. La plupart des algorithmes sont implémentés sur des plateformes matérielles et logicielles spécifiques, et leur efficacité est testée à l'aide de code réel. L'efficacité d'un algorithme particulier peut être négligeable pour de nombreux problèmes ponctuels, mais elle peut s'avérer cruciale pour les algorithmes conçus pour une utilisation rapide, interactive, commerciale ou scientifique à long terme. L'augmentation de la taille des données d'entrée révèle souvent des algorithmes inefficaces qui, autrement, seraient sans conséquence.

Les tests empiriques sont utiles pour mettre en évidence les interactions inattendues qui affectent les performances. Des benchmarks peuvent être utilisés pour comparer les améliorations potentielles d'un algorithme avant et après optimisation du programme. Les tests empiriques ne peuvent pas remplacer entièrement l'analyse formelle et sont difficiles à réaliser de manière équitable.

Efficacité d'exécution

FFT utilisés pour le traitement d'images, permet de réduire le temps de traitement jusqu'à 1 000 fois pour l'imagerie médicale. En général, les gains de vitesse dépendent des propriétés spécifiques du problème, très fréquentes dans les applications pratiques.

Meilleur et pire des cas

le modèle « diviser pour régner » ou la programmation dynamique . Les techniques de conception et d'implémentation d'algorithmes sont également appelées patrons de conception d'algorithmes. On peut citer comme exemples le patron de conception de méthode modèle et le patron de conception décorateur. Un aspect important de la conception d'algorithmes est l'utilisation efficace des ressources telles que la mémoire ou le temps ; la notation grand O est utilisée pour décrire comment l'utilisation des ressources évolue en fonction de la taille des entrées.

Programmation structurée

Tout algorithme peut être calculé par n'importe quel modèle Turing-complet . La complétude de Turing ne requiert que quatre types d'instructions : GOTO conditionnel, GOTO inconditionnel, affectation et HALT. Tausworthe enrichit les trois structures canoniques de Böhm-Jacopini : SEQUENCE, IF-THEN-ELSE et WHILE-DO, avec deux autres : DO-WHILE et CASE. Un autre avantage d'un programme structuré est qu'il se prête aux preuves de correction par récurrence .

Statut juridique

Gottschalk c. Benson ). Cependant, les applications pratiques des algorithmes peuvent être brevetables. Par exemple, dans l'affaire Diamond c. Diehr , l'application d'un algorithme de rétroaction simple pour faciliter la vulcanisation du caoutchouc synthétique a été jugée brevetable. Le brevetage des logiciels est controversé , et certains brevets portant sur des algorithmes, notamment des algorithmes de compression de données , comme le brevet LZW d' Unisys , ont fait l'objet de critiques . De plus, certains algorithmes cryptographiques sont soumis à des restrictions à l'exportation (voir l'article « Exportation de la cryptographie »).

Classification

Par mise en œuvre

Récursivité
Un algorithme récursif s'exécute de manière répétée jusqu'à ce qu'une condition d'arrêt soit satisfaite ; c'est une technique courante en programmation fonctionnelle . Les algorithmes itératifs utilisent des répétitions, comme des boucles ou des structures de données telles que les piles, pour résoudre des problèmes. Certains problèmes se prêtent mieux à l'une ou l'autre implémentation. Les tours de Hanoï sont un exemple de casse-tête souvent résolu par une implémentation récursive. À chaque version récursive correspond une version itérative équivalente (plus ou moins complexe), et inversement.
En série, en parallèle ou distribué
On aborde généralement les algorithmes en supposant que les ordinateurs exécutent une instruction à la fois sur des systèmes séquentiels. Les algorithmes séquentiels sont conçus pour ces environnements, contrairement aux algorithmes parallèles ou distribués . Les algorithmes parallèles tirent parti des architectures informatiques où plusieurs processeurs peuvent traiter un problème simultanément. Les algorithmes distribués utilisent plusieurs machines connectées via un réseau. Les algorithmes parallèles et distribués divisent le problème en sous-problèmes et regroupent ensuite les résultats. La consommation de ressources de ces algorithmes inclut non seulement les cycles processeur de chaque processeur, mais aussi les communications entre les processeurs. Certains algorithmes de tri peuvent être parallélisés efficacement, mais leurs communications sont coûteuses. Les algorithmes itératifs sont généralement parallélisables, mais certains problèmes ne possèdent pas d'algorithmes parallèles et sont dits intrinsèquement séquentiels.
Déterministe ou non déterministe
Les algorithmes déterministes résolvent le problème en prenant des décisions exactes à chaque étape ; tandis que les algorithmes non déterministes le résolvent par conjecture. Ces conjectures sont généralement affinées grâce à l’utilisation d’ heuristiques .
Exact ou approximatif
Alors que de nombreux algorithmes convergent vers une solution exacte, les algorithmes d'approximation recherchent une approximation proche de la solution véritable. Ces algorithmes présentent un intérêt pratique pour de nombreux problèmes complexes. Par exemple, le problème du sac à dos , où l'objectif est de remplir un sac à dos avec un ensemble d'objets afin d'obtenir une valeur totale maximale. Chaque objet a un poids et une valeur. Le poids total transportable est limité à une valeur fixe X. La solution doit donc prendre en compte à la fois le poids et la valeur des objets.
Algorithme quantique
Les algorithmes quantiques s'appuient sur un modèle réaliste de calcul quantique . Ce terme est généralement employé pour désigner les algorithmes qui semblent intrinsèquement quantiques ou qui utilisent certaines caractéristiques essentielles du calcul quantique, telles que la superposition quantique ou l'intrication quantique .

Par paradigme de conception

Une autre façon de classer les algorithmes consiste à se baser sur leur méthodologie ou paradigme de conception . Voici quelques paradigmes courants :

Recherche par force brute ou exhaustive
La force brute est une méthode de résolution de problèmes qui consiste à tester systématiquement toutes les options possibles jusqu'à trouver la solution optimale. Cette approche peut s'avérer très chronophage, car elle implique de tester toutes les combinaisons de variables possibles. Elle est souvent utilisée lorsque d'autres méthodes sont indisponibles ou trop complexes. La force brute permet de résoudre divers problèmes, comme trouver le chemin le plus court entre deux points et déchiffrer des mots de passe.
Diviser pour mieux régner
Un algorithme de type « diviser pour régner » réduit itérativement un problème à une ou plusieurs instances plus petites de lui-même (généralement de manière récursive ) jusqu'à ce que ces instances soient suffisamment petites pour être résolues facilement. Le tri fusion est un exemple d'algorithme de ce type : une liste non triée est divisée en listes plus petites, triées de la même manière, puis fusionnées. Une variante plus simple, appelée algorithme d'élagage et de recherche (ou algorithme de réduction pour régner) , résout une instance plus petite du problème et ne nécessite pas d'étape de fusion. L'algorithme de recherche dichotomique est un exemple d'algorithme d'élagage et de recherche .
Recherche et énumération
De nombreux problèmes (comme jouer aux échecs ) peuvent être modélisés comme des problèmes de graphes . Un algorithme d'exploration de graphes définit des règles de déplacement et est utile pour ce type de problèmes. Cette catégorie inclut également les algorithmes de recherche , l'énumération par séparation et évaluation , et le retour arrière .
Algorithme aléatoire
Ces algorithmes effectuent certains choix de manière aléatoire (ou pseudo-aléatoire). Ils trouvent des solutions approchées lorsque la recherche de solutions exactes est impraticable (voir la méthode heuristique ci-dessous). Pour certains problèmes, les approximations les plus rapides nécessitent une part d'aléatoire . La question de savoir si les algorithmes randomisés de complexité polynomiale peuvent être les plus rapides pour certains problèmes est une question ouverte connue sous le nom de problème P versus NP . Il existe deux grandes classes de tels algorithmes :
  1. Les algorithmes de Monte Carlo fournissent une réponse correcte avec une forte probabilité. Par exemple, RP est une sous-classe de ces algorithmes qui s'exécutent en temps polynomial .
  2. Les algorithmes de Las Vegas renvoient toujours la bonne réponse, mais leur temps d'exécution n'est limité que de manière probabiliste, par exemple ZPP .
Réduction de la complexité
Cette technique transforme des problèmes complexes en problèmes plus connus, résolubles par des algorithmes (idéalement) asymptotiquement optimaux . L'objectif est de trouver un algorithme de réduction dont la complexité n'est pas dominée par celle des algorithmes réduits obtenus. Par exemple, un algorithme de sélection trouve la médiane d'une liste non triée en triant d'abord la liste (la partie coûteuse), puis en extrayant l'élément central de la liste triée (la partie peu coûteuse). Cette technique est également connue sous le nom de « transformer pour régner » .
Retour en arrière
Dans cette approche, plusieurs solutions sont construites progressivement et abandonnées lorsqu'il est déterminé qu'elles ne peuvent pas aboutir à une solution complète et valide.

Problèmes d'optimisation

Pour les problèmes d'optimisation, il existe une classification plus spécifique des algorithmes ; un algorithme pour de tels problèmes peut appartenir à une ou plusieurs des catégories générales décrites ci-dessus, ainsi qu'à l'une des suivantes :

Programmation linéaire
Lorsqu'on recherche des solutions optimales pour une fonction linéaire soumise à des contraintes d'égalité et d'inégalité linéaires, ces contraintes peuvent être utilisées directement pour obtenir ces solutions optimales. Il existe des algorithmes capables de résoudre tout problème de cette catégorie, comme le célèbre algorithme du simplexe . Parmi les problèmes résolubles par programmation linéaire figure le problème du flot maximal pour les graphes orientés. Si un problème impose également que certaines inconnues soient des entiers , il relève alors de la programmation linéaire en nombres entiers . Un algorithme de programmation linéaire peut résoudre un tel problème s'il est possible de démontrer que toutes les restrictions sur les valeurs entières sont superficielles, c'est-à-dire que les solutions satisfont de toute façon ces restrictions. Dans le cas général, on utilise un algorithme spécialisé ou un algorithme de recherche de solutions approchées, selon la difficulté du problème.
Programmation dynamique
Lorsqu'un problème présente des sous-structures optimales (c'est-à-dire que la solution optimale peut être construite à partir des solutions optimales de sous-problèmes) et des sous-problèmes qui se chevauchent (c'est-à-dire que les mêmes sous-problèmes servent à résoudre plusieurs instances différentes du problème), une approche plus rapide appelée programmation dynamique évite de recalculer les solutions. Par exemple, l'algorithme de Floyd-Warshall permet de trouver le plus court chemin entre un sommet de départ et un sommet d'arrivée dans un graphe pondéré en utilisant le plus court chemin vers l'arrivée depuis tous les sommets adjacents. La programmation dynamique et la mémoïsation sont étroitement liées. Contrairement à l'approche « diviser pour régner », les sous-problèmes de la programmation dynamique se chevauchent souvent. La différence entre la programmation dynamique et la récursivité simple réside dans la mise en cache ou la mémoïsation des appels récursifs. Lorsque les sous-problèmes sont indépendants et ne se répètent pas, la mémoïsation est inutile ; la programmation dynamique n'est donc pas applicable à tous les problèmes complexes. Grâce à la mémoïsation, la programmation dynamique réduit la complexité de nombreux problèmes d'exponentielle à polynomiale.
La méthode avide
Les algorithmes gloutons , à l'instar de la programmation dynamique, fonctionnent en examinant des sous-structures, non pas du problème lui-même, mais d'une solution donnée. Ces algorithmes partent d'une solution et l'améliorent par petites modifications. Pour certains problèmes, ils trouvent toujours la solution optimale, tandis que pour d'autres, ils peuvent s'arrêter à des optima locaux . L'application la plus courante des algorithmes gloutons est la recherche d'arbres couvrants minimaux de graphes sans cycles négatifs. Les algorithmes de Huffman , de Kruskal , de Prim et de Sollin sont des exemples d'algorithmes gloutons capables de résoudre ce problème d'optimisation.
La méthode heuristique
Dans les problèmes d'optimisation , les algorithmes heuristiques trouvent des solutions proches de la solution optimale lorsque la recherche de cette dernière est impraticable. Ces algorithmes s'en approchent progressivement. En principe, s'ils étaient exécutés indéfiniment, ils finiraient par trouver la solution optimale. Idéalement, ils peuvent trouver une solution très proche de l'optimum en un temps relativement court. Parmi ces algorithmes, on trouve la recherche locale , la recherche tabou , le recuit simulé et les algorithmes génétiques . Certains, comme le recuit simulé, sont non déterministes, tandis que d'autres, comme la recherche tabou, sont déterministes. Lorsqu'une borne supérieure de l'erreur de la solution non optimale est connue, l'algorithme est alors qualifié d' algorithme d'approximation .

Exemples

pseudocode ou en code pidgin :

''largest'', '''then''' ''largest'' ← ''item'' '''return''' ''largest'' ",{"template":{"target":{"wt":"algorithm-end","href":"./Template:Algorithm-end"},"params":{},"i":1}}]
Algorithme LargestNumber Entrée : Une liste de nombres L .Résultat : Le plus grand nombre de la liste L.
Si L.size = 0, retourner null. largestL [0]. Pour chaque élément de L , si élément > largest , alors largestélément. Retourner le plus grand.
  • " " désigne une affectation . Par exemple, " largest item " signifie que la valeur de largest change pour la valeur de item .
  • La fonction « return » termine l'algorithme et renvoie la valeur suivante.

Découverte d'algorithmes assistée par l'IA

Les systèmes d'intelligence artificielle ont été utilisés pour découvrir et optimiser des algorithmes. En 2023, Google DeepMind a présenté AlphaDev , un système d'apprentissage par renforcement basé sur AlphaZero , qui a permis de découvrir des algorithmes de tri et de hachage améliorés. Dans un article publié dans Nature , il a été rapporté qu'AlphaDev avait découvert de petits algorithmes de tri surpassant les performances humaines de référence connues et qu'ils avaient été intégrés à la bibliothèque de tri standard LLVM pour C++ .

En 2025, Google DeepMind a introduit AlphaEvolve , un agent de programmation évolutionnaire s'appuyant sur de vastes modèles de langage pour la découverte et l'optimisation d'algorithmes à usage général. AlphaEvolve utilise des modèles de langage pour proposer des modifications de code, des évaluateurs automatisés pour tester les solutions candidates et un processus évolutionnaire pour améliorer les algorithmes prometteurs au fil de plusieurs itérations.