edubun
Français

Ce qu'est un algorithme

La méthode pour trouver le plus grand diviseur commun du livre VII des Éléments d'Euclide, écrite il y a environ 2300 ans, fonctionne encore aujourd'hui dans les ordinateurs.

Une méthode qui marche à tous les coups

Imagine que tu cherches le plus grand nombre qui divise à la fois 1071 et 462. Tu pourrais essayer tous les nombres de 462 jusqu'à 1 et t'arrêter au premier qui divise les deux. Ça marche, mais cela peut demander des centaines d'essais. Il existe un chemin plus court. Divise 1071 par 462 et garde le reste, 147. Divise maintenant 462 par 147 et garde le reste, 21. Divise 147 par 21 : le reste vaut 0, donc la réponse est 21. Trois divisions au lieu de plusieurs centaines.

Ce chemin plus court est un algorithme : une liste finie d'étapes précises qui prend une entrée et produit la bonne sortie. Celui-ci est l'algorithme d'Euclide pour le plus grand diviseur commun (PGCD), et il figure dans le livre VII des Éléments, écrits vers 300 av. J.-C. Euclide le décrivait par des soustractions répétées de longueurs plutôt que par des divisions, mais l'idée est la même, et c'est la version avec les restes qu'utilisent les programmes aujourd'hui.

function gcd(a, b) {
  while (b !== 0) {
    const r = a % b;   // reste
    a = b;
    b = r;
  }
  return a;
}
console.log(gcd(1071, 462)); // affiche 21

Ce qui fait d'une liste d'étapes un algorithme

Les manuels comme celui de Cormen, Leiserson, Rivest et Stein décrivent un algorithme comme une procédure bien définie qui transforme une entrée en sortie. Cette description contient trois idées, et chacune compte quand on écrit du code.

  • Précis. Chaque étape a un seul sens. « Divise a par b et garde le reste » est précis ; « rends les nombres plus petits d'une façon ou d'une autre » ne l'est pas.
  • Fini. Il doit s'arrêter. Dans l'algorithme d'Euclide, le reste est toujours plus petit que le nombre par lequel on a divisé : il diminue donc à chaque tour et finit forcément par atteindre 0.
  • Correct. Pour chaque entrée autorisée, la sortie est la bonne réponse, et pas seulement pour les exemples que tu as essayés.

On donne souvent une recette de cuisine comme exemple de la vie courante, et c'est un bon exemple : les ingrédients sont l'entrée, le plat est la sortie, et les étapes sont dans l'ordre. La différence, c'est tout ce que le lecteur complète. Un cuisinier décide ce que veut dire « une pincée ». Un ordinateur ne décide rien : c'est pourquoi les algorithmes pour ordinateurs sont écrits avec chaque étape détaillée.

Même problème, algorithmes différents

Un problème a en général de nombreux algorithmes corrects, et ils peuvent demander des quantités de travail très différentes. Pour le PGCD de 1071 et 462, essayer tous les nombres à partir de 462 en descendant demande 442 essais avant d'atteindre 21, alors que la méthode d'Euclide demande 3 divisions. Les deux sont correctes. Une seule est rapide. Une grande partie de ce cours porte sur cette deuxième question : une fois qu'une méthode est correcte, combien d'étapes demande-t-elle, et comment ce nombre augmente-t-il quand l'entrée grandit ?

Pour y répondre, les informaticiens comptent des étapes élémentaires (une comparaison, un échange, une division) plutôt que des secondes. Les secondes dépendent de la machine. Un nombre d'étapes ne dépend que de l'algorithme et de l'entrée : il permet donc de comparer deux méthodes équitablement. Le labo ci-dessous compte les comparaisons pour toi pendant qu'il trie une rangée de barres. Essaie le même ordre de départ avec deux méthodes différentes et observe les compteurs.

Chargement

Fais glisser pour tourner. Fais défiler ou pince pour zoomer.

Le tri par sélection et le tri par insertion sur les huit mêmes valeurs. Les compteurs indiquent combien de comparaisons et d'échanges chacun demande.

Entrées, sorties et étapes intermédiaires

Avant d'écrire un algorithme, note exactement ce qui entre et ce qui doit sortir. Pour le PGCD : l'entrée est deux nombres entiers positifs, et la sortie est un nombre entier qui divise les deux, sans qu'aucun nombre plus grand en fasse autant. Cette description indique comment tester le résultat, et elle donne souvent une idée des étapes. Elle révèle aussi les cas limites : et si l'un des nombres vaut 0 ? (La boucle ci-dessus renvoie l'autre nombre, ce qui est la bonne réponse.) Et si les deux nombres sont égaux ? Réfléchir aux cas limites avant d'exécuter le code permet d'éviter beaucoup d'erreurs.

ContexteLe mot algorithme vient d'un nom de personne. Muhammad ibn Musa al-Khwarizmi travaillait à Bagdad au neuvième siècle et a écrit un livre sur le calcul avec les chiffres indiens de 0 à 9. Sa traduction latine commence par les mots « Dixit algorizmi », qui signifient « al-Khwarizmi a dit », et on l'appelle en général « Algoritmi de numero Indorum ». Les formes latines de son nom, algorizmi et algoritmi, sont devenues le mot désignant une méthode de calcul étape par étape. Son livre sur la résolution des équations nous a donné un autre mot : algèbre. Bien plus tard, en 1843, Ada Lovelace a publié des notes sur la machine analytique de Charles Babbage, jamais construite ; la dernière, la note G, expose étape par étape comment la machine pourrait calculer les nombres de Bernoulli.
  • Vers 300 av. J.-C.: Les Éléments d'Euclide, livre VII : la méthode du plus grand diviseur commun.
  • 9e siècle: À Bagdad, al-Khwarizmi écrit sur les chiffres indiens ; son nom latin donne le mot algorithme.
  • 1843: La note G d'Ada Lovelace : les étapes permettant à la machine analytique de calculer les nombres de Bernoulli.
  • 1945: John von Neumann propose le tri fusion.
  • 1959: Tony Hoare invente le tri rapide à Moscou (publié en 1961).
algorithmeUne liste finie d'étapes précises qui transforme une entrée en la bonne sortie
entréeLes données dont part un algorithme
sortieLe résultat que l'algorithme doit produire
correctDonne la bonne sortie pour toute entrée autorisée
finiS'arrête toujours après un certain nombre d'étapes
plus grand diviseur communLe plus grand nombre entier qui divise exactement deux nombres
cas limiteUne entrée inhabituelle comme 0, une liste vide ou des valeurs égales
nombre d'étapesCombien d'opérations élémentaires effectue un algorithme
  1. Avec l'algorithme d'Euclide, quel est le PGCD de 48 et 18 ?
  2. Combien de divisions l'algorithme d'Euclide demande-t-il pour 1071 et 462 ?
  3. Laquelle de ces propriétés n'est pas exigée de tout algorithme ?
    • Il s'arrête après un nombre fini d'étapes
    • Chaque étape est précise
    • Il utilise un ordinateur
    • Il donne la bonne sortie pour toute entrée autorisée
  4. Pourquoi l'algorithme d'Euclide s'arrête-t-il toujours ?
    • Le reste est toujours plus petit que le diviseur, donc il diminue jusqu'à 0
    • Il s'arrête après 10 tours
    • Les ordinateurs arrêtent les boucles automatiquement
    • Les nombres grandissent jusqu'à être égaux
  5. Le mot algorithme vient du nom de
    • Euclide
    • Al-Khwarizmi
    • Ada Lovelace
    • Alan Turing
  6. Pourquoi les informaticiens comptent-ils des étapes au lieu de mesurer des secondes ?
    • Les secondes dépendent de la machine ; le nombre d'étapes ne dépend que de l'algorithme et de l'entrée
    • Les horloges ne sont pas précises
    • Les étapes sont toujours plus rapides
    • On ne peut pas mesurer des secondes dans du code
  7. Une méthode donne la bonne réponse pour les cinq exemples que tu as essayés. Est-elle correcte ?
    • Oui, cinq exemples le prouvent
    • Pas forcément : elle doit être juste pour toute entrée autorisée
    • Seulement si elle est rapide
    • Seulement si elle utilise une boucle
  8. Que renvoie gcd(35, 0) avec la boucle de cette unité ?
  9. En quelle année Ada Lovelace a-t-elle publié ses notes, dont la note G ?
    • 1801
    • 1843
    • 1945
    • 1961
  10. Range les étapes de l'algorithme d'Euclide dans l'ordre.
L'essentiel
  • Un algorithme est une liste finie d'étapes précises qui mène d'une entrée à la sortie correcte.
  • L'algorithme d'Euclide trouve un plus grand diviseur commun par des restes successifs.
  • Un même problème peut avoir de nombreux algorithmes corrects aux nombres d'étapes très différents.
  • Note l'entrée, la sortie et les cas limites avant les étapes.
  • Le mot vient du nom latin d'al-Khwarizmi.
Sources de ce cours (11)
  • MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
  • lecture notes 1 Introduction, 3 Sorting, 9 Breadth-First Search, 10 Depth-First Search (ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes) and Fall 2011 lecture 13 BFS notes (ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011)
  • Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms (MIT Press)
  • with the CLRS-based Khan Academy algorithms unit by Thomas Cormen and Devin Balkcom of Dartmouth (khanacademy.org/computing/computer-science/algorithms: binary search, selection sort analysis, merge sort, quicksort overview and analysis)
  • MacTutor History of Mathematics, Al-Khwarizmi (mathshistory.st-andrews.ac.uk/Biographies/Al-Khwarizmi: word algorithm from the Latin title Algoritmi de numero Indorum)
  • D. E. Joyce, Euclid's Elements Book VII Propositions 1 and 2 (mathcs.clarku.edu/~djoyce/elements/bookVII)
  • Wolfram MathWorld, Merge Sort (mathworld.wolfram.com/MergeSort.html: proposed by John von Neumann in 1945, after Knuth 1998 p. 159)
  • Stanford CS "Tony Hoare: Quicksort" (cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/quicksort.html: devised while a student at Moscow State University for Russian-English machine translation with a tape dictionary, programmed in Algol 60 and published 1961; the year 1959 from the Wikipedia Quicksort article and its cited sources)
  • Bodleian Libraries, Ada Lovelace (blogs.bodleian.ox.ac.uk/adalovelace: 1843 paper, Note G Bernoulli numbers)
  • Fourmilab text of Menabrea's Sketch with Lovelace's notes (fourmilab.ch/babbage/sketch.html)
  • Seven Bridges of Konigsberg (Euler 1736) and Tower of Hanoi (Edouard Lucas, 1883) checked against the Wikipedia articles and their cited sources.

Consulté le: 2026-10-17