Comment passer d’un problème flou à une solution claire et vérifiable ? Un algorithme répond précisément à cette question : c’est une suite d’étapes logiques qui transforment des données d’entrée en un résultat, toujours le même dans les mêmes conditions. D’une recette de cuisine à la recherche d’un mot dans une liste, en passant par un contrôle de palindrome ou le calcul d’une factorielle, la même idée revient : décomposer, organiser, tester, puis traduire cette logique en code pour automatiser le processus.
Pour un élève de lycée, la notion peut sembler abstraite tant que rien n’est écrit noir sur blanc. Dès qu’un exemple concret vient illustrer chaque type d’algorithme, la mécanique interne devient visible. Une chaîne de caractères à examiner, une année à classer comme bissextile ou non, un tableau d’entiers à trier : chaque situation impose un choix de stratégie, un type de boucle, un schéma de conditions. Le même problème peut d’ailleurs se résoudre avec plusieurs méthodes, certaines plus efficaces que d’autres. Comparer ces approches, c’est déjà entrer dans l’algorithmique au sens fort.
Les réponses ci-dessous s’attachent donc à montrer, pas seulement à dire. Chaque exemple d’algorithme est relié à une situation familière, puis retravaillé pour faire apparaître la structure : variables, tests, répétitions, fonction, cas d’arrêt. Les représentations (pseudo-code, organigramme mental, tableau de cas) servent de cartes pour piloter ensuite une implémentation en programmation, par exemple en Python. Le lecteur peut ainsi passer d’un raisonnement “à la main” à un script exécutable, en gardant toujours sous les yeux le lien entre la logique mathématique et le comportement de la machine.
En bref :
- 🧩 Un algorithme est une suite finie d’étapes logiques qui transforme des données en résultat, toujours de la même manière.
- 📚 La différence entre algorithme et programme vient de la forme : l’un décrit la logique, l’autre est du code dans un langage précis.
- 🔍 Les quatre piliers essentiels sont entrée, sortie, finitude et déterminisme pour garantir un comportement prévisible.
- 🧠 Plusieurs représentations coexistent : texte en pseudocode, schéma de type organigramme, ou diagramme d’activité plus proche du code.
- ⚙️ La performance d’un algorithme se mesure avec la complexité temporelle et spatiale, souvent notées en Big O.
- 🌀 Les exemples concrets (palindrome, comptage de lettres, année bissextile, tris, factorielle, recherche dichotomique) montrent comment structurer un processus complet.
Algorithme : définition simple illustrée par un exemple concret
Un algorithme peut se résumer ainsi : une suite finie d’instructions précises qui, à partir d’données d’entrée, produit une sortie bien définie en suivant une logique déterminée. Chaque instruction est claire, exécutable, et l’ensemble doit s’arrêter, sans quoi il ne s’agit plus d’un algorithme mais d’un processus mal spécifié.
Un exemple minimal : décider si une année est bissextile. Les entrées sont les entiers comme 2024 ou 2025, la sortie est une réponse vraie ou fausse. La règle mathématique est connue : une année est bissextile si elle est divisible par 4, mais pas par 100, ou alors divisible par 400. L’algorithme traduit cette phrase en tests successifs, jusqu’au message final. Dans le même esprit, de nombreux exercices de maths de seconde conduisent naturellement à écrire ce type de chaîne d’actions organisées.

Différence entre algorithme et programme informatique
L’algorithme décrit l’idée, le programme en est la traduction opérationnelle. L’un s’écrit en français structuré ou en pseudocode, l’autre en Python, JavaScript ou tout autre langage de programmation. Le même raisonnement peut donc se retrouver dans plusieurs codes différents, tant que la logique d’origine est respectée.
Pour un élève, cette distinction a une conséquence pratique : travailler d’abord sur la clarté de l’algorithme évite de se noyer dans la syntaxe du langage. Un algorithme bissextile correct tient en quelques lignes de pseudocode, puis se décline facilement en code Python, comme dans de nombreux exercices type exercice Python seconde. L’étape difficile n’est pas d’ajouter les deux-points ou les parenthèses, mais de structurer le raisonnement.
Caractéristiques fondamentales d’un bon exemple d’algorithme
Quatre propriétés caractérisent un bon algorithme : des entrées bien définies, une sortie attendue, une fin garantie, et un comportement déterministe. Sans ces piliers, impossible de prédire ou de vérifier la solution.
Entrée, sortie, finitude, déterminisme 🔧
Les entrées sont les données de départ. Dans l’algorithme “année bissextile”, c’est l’entier “année”. Dans l’algorithme “palindrome”, c’est la chaîne de caractères terminée par un point. La sortie est le résultat : “bissextile” ou “non bissextile”, “c’est un palindrome” ou “ce n’est pas un palindrome”.
La finitude garantit qu’en un nombre fini d’étapes, l’algorithme s’arrête. L’algorithme d’Euclide pour le PGCD, par exemple, répète une division euclidienne en remplaçant le couple de nombres par (diviseur, reste). Quand le reste devient 0, la boucle cesse. Le déterminisme signifie qu’avec la même entrée, la sortie est toujours la même : un mot donné sera toujours classé comme palindrome ou non, sans tirage au sort caché. Cet ensemble de conditions transforme un simple “bricolage de code” en procédure fiable.
Comparer les représentations possibles d’un algorithme
Pour un problème donné, plusieurs façons de “dessiner” la logique sont disponibles. Selon le niveau et l’objectif, l’une sera plus lisible que l’autre : le pseudocode pour raisonner, l’organigramme pour visualiser, le diagramme d’activité pour préparer la mise en programmation.
| Forme de représentation | Caractéristiques principales | Atout majeur ✨ | Limite à garder en tête ⚠️ |
|---|---|---|---|
| Pseudocode | Texte structuré avec boucles, conditions, variables | Très lisible pour des algorithmes longs ou complexes | Moins visuel, peut décourager les profils très graphiques |
| Organigramme | Schéma avec rectangles, losanges, flèches | Vue rapide du processus global 🧠 | Devenu vite lourd pour un algorithme avec beaucoup de cas |
| Diagramme d’activité | Notation UML, proche du déroulement d’un programme | Bonne passerelle entre idée et code réel 💻 | Demande un apprentissage de la norme UML |
Pour un public de lycée, commencer par une version textuelle simple, puis dessiner un exemple en organigramme, crée un double repère. L’étape suivante consiste à passer à un vrai langage pour montrer que ces symboles abstraits se traduisent naturellement en instructions exécutables.
Exemple d’algorithme : reconnaître un palindrome
Décider si une phrase est un palindrome met en jeu les notions d’indices, de boucle et de condition multiple. L’enjeu n’est pas seulement de comparer des lettres, mais de structurer un parcours simultané depuis le début et la fin de la chaîne.
Problème, raisonnement et pseudo-code
Le problème posé est le suivant : “La chaîne, terminée par un point, se lit-elle de la même façon dans les deux sens ?” L’algorithme commence par repérer l’indice du point final, puis recule d’une case pour atteindre le dernier caractère utile. Deux variables d’indice i et j parcourent alors la chaîne, i vers la droite, j vers la gauche.
Tant que i est strictement inférieur à j et que les caractères correspondants sont égaux, la boucle continue. Dès que l’une des deux conditions casse, le programme regarde si i a rattrapé ou dépassé j. Si oui, toutes les lettres du début et de la fin correspondent deux à deux, la phrase est donc un palindrome. Sinon, une différence a été rencontrée et l’algorithme conclut l’inverse. Cet exemple montre comment plusieurs tests se combinent dans une seule structure de contrôle.
Exemple d’algorithme : compter une lettre dans une phrase
Compter les occurrences d’une lettre donnée dans une phrase illustre un autre schéma classique : on parcourt une structure de données séquentielle en incrémentant un compteur quand une condition est vérifiée.
Boucle de parcours et pièges classiques
L’algorithme se formule vite : initialiser un entier compteur à 0, puis lire caractère par caractère jusqu’au terminateur (par exemple le point). À chaque position i, tester si la lettre lue est égale à la lettre recherchée. Si oui, augmenter le compteur d’une unité. En sortie, afficher la valeur finale. Ce schéma constitue un motif qu’on retrouve ensuite en probabilités en seconde lorsqu’il s’agit de compter des issues favorables.
Un piège fréquent surgit lorsqu’un élève écrit “i = 1 + 1” au lieu de “i = i + 1” dans la boucle. Cette petite erreur transforme la variable d’indice en constante, et la boucle n’avance plus dans la chaîne. L’algorithme ne respecte alors plus la finitude, puisqu’il se répète indéfiniment sur la même position. L’erreur révèle le rôle central de l’indice : il pilote réellement le déplacement dans les données.
Exemple d’algorithme : décider si une année est bissextile
Le test d’une année bissextile offre un terrain idéal pour travailler avec des opérateurs logiques et la priorité des conditions. Le cœur de la question est : comment imbriquer correctement “et” et “ou” pour que le résultat colle au calendrier réel ?
Traduire une règle complexe en conditions logiques
La règle en langage courant dit : une année est bissextile si elle est divisible par 4, et en même temps non divisible par 100, ou bien si elle est divisible par 400. On dispose donc de trois conditions de base : “année mod 4 = 0”, “année mod 100 > 0” et “année mod 400 = 0”. L’algorithme pose une structure “si… alors… sinon…” et insère ces trois morceaux au bon endroit.
Le point délicat survient lorsqu’on oublie les parenthèses autour du “ou”. L’ordinateur lit alors les opérations dans un ordre différent de celui attendu, ce qui modifie le résultat pour des années comme 1900 ou 2000. Tester ces cas particuliers à la main constitue un contrôle indépendant de la justesse de la solution, avant même d’écrire la moindre ligne de code.
Exemples d’algorithmes de tri : bulles, sélection, permutation, comptage
Les tris forment une famille d’algorithmes très riche pour comparer des stratégies. Chaque méthode reçoit la même entrée, un tableau d’entiers désordonné, mais suit un processus différent pour obtenir les éléments en ordre croissant.
Tri à bulles : comparaison locale et répétée
Le tri à bulles procède par passes successives sur le tableau. À chaque passe, l’algorithme compare les éléments deux à deux, de gauche à droite. Si une paire est dans le mauvais ordre, elle est échangée. À la fin de la passe, le plus grand élément a “remonté” en dernière position, d’où l’image de la bulle.
Une version naïve refait toujours le même nombre de parcours, même si le tableau est déjà trié avant la fin. Une version optimisée arrête le processus si aucune inversion n’a été réalisée pendant une passe. Une seconde amélioration possible consiste à réduire la longueur utile du parcours au dernier endroit où une inversion a encore eu lieu. Ces choix illustrent concrètement l’impact de la complexité temporelle : sur 5000 nombres, le temps de calcul change du tout au tout.
Tri par sélection et par permutation
Le tri par sélection adopte une autre stratégie : à chaque étape, chercher le plus petit élément dans la partie non triée du tableau, puis le placer à sa position définitive. L’indice courant se déplace vers la droite, et la zone déjà triée grandit élément après élément. La logique est simple, mais implique souvent de nombreux échanges.
Le tri par permutation (proche du tri par insertion) se comporte davantage comme un tri de cartes à jouer. Lorsqu’un élément est plus petit que son prédécesseur, il est retiré de sa place actuelle et inséré à l’endroit qui conserve l’ordre dans la partie déjà parcourue. Les boucles imbriquées gèrent à la fois la détection de l’élément mal placé, la recherche de sa nouvelle position, et le décalage des autres valeurs.
Tri par comptage : une autre façon de raisonner
Le tri par comptage compte, pour chaque valeur, combien d’éléments du tableau lui sont strictement inférieurs. Ce nombre donne directement la ou les positions possibles dans le tableau résultat. Une structure auxiliaire stocke ces “rangs”, un autre tableau résulte de cette répartition.
Ce type d’algorithme est très intéressant à analyser avec la notation Big O. Dans le meilleur cadre (nombres entiers dans un intervalle modéré), le temps d’exécution augmente linéairement avec la taille du tableau. Dans d’autres situations, le coût en mémoire ou la présence de doublons rendent la méthode moins adaptée. Comparer ces cas aide à choisir le bon tri en fonction des contraintes réelles.
Exemple d’algorithme récursif : la factorielle
Le calcul de n! (factorielle de n) met en scène l’idée de récursivité, quand une fonction s’appelle elle-même avec un paramètre plus petit. La question clé devient alors : comment garantir que l’on atteindra bien un cas d’arrêt ?
Version récursive et version répétitive
La définition mathématique donne immédiatement la structure : si n = 1, la factorielle vaut 1 ; sinon, n! = n × (n − 1)!. L’algorithme récursif copie cette phrase, en appelant factorielle(n − 1) à l’intérieur de la fonction factorielle(n). Chaque appel réduit n d’une unité, jusqu’à 1, qui ne crée plus de nouvelle récursion. Ce dernier cas est le “cas de base” indispensable.
La même solution peut se réécrire de manière itérative : initialiser un résultat à 1, puis le multiplier successivement par 1, 2, 3… jusqu’à n. Ici, une simple boucle suffit. Pour un débutant, comparer ces deux versions permet de visualiser la double face de beaucoup d’algorithmes : récursifs dans leur formulation naturelle, mais parfois plus efficaces ou plus simples à exécuter en version répétitive.
Exemple d’algorithme de recherche dichotomique
La recherche dichotomique (ou binaire) fournit un excellent terrain pour comprendre la notion de complexité logarithmique. L’algorithme ne regarde jamais plus que log₂(n) éléments pour trouver une valeur dans un tableau déjà trié.
Demi-tableau par demi-tableau
Le scénario est le suivant : un tableau de prénoms triés par ordre alphabétique, et un prénom cible à retrouver. Deux indices bornent la zone de recherche, inférieur et supérieur. À chaque étape, l’algorithme calcule le milieu comme la partie entière de (inférieur + supérieur) / 2, puis compare la valeur au centre avec la cible.
Si le prénom central est celui que l’on cherche, la solution est trouvée. S’il est plus petit, la partie utile devient la moitié supérieure du tableau. S’il est plus grand, seule la moitié inférieure est conservée. La boucle continue tant que la borne inférieure ne dépasse pas la borne supérieure et que l’élément n’a pas été localisé. Ce raisonnement se retrouve ensuite tel quel dans un code Python ou JavaScript, avec des bénéfices évidents pour l’efficacité lorsqu’on manipule de grands ensembles de données.
Repères pratiques pour écrire son propre exemple d’algorithme
Un élève qui doit créer un algorithme à partir d’un énoncé de mathématiques ou d’informatique gagne à suivre un chemin fixe. Chaque étape rend la suivante plus simple, tout en limitant les erreurs.
Checklist méthodique pour passer du problème au code
- 📝 Clarifier le problème : identifier précisément les données d’entrée et la sortie attendue (nombre, texte, oui/non…).
- 📐 Choisir une représentation : texte structuré, pseudo-code ou petit organigramme selon ce qui rend la logique la plus visible.
- 🔁 Repérer les répétitions : y a-t-il une action identique à réaliser plusieurs fois ? Cela indique une boucle, voire une récursion.
- ⚖️ Tester des cas limites : valeurs extrêmes, entrées vides, doublons, pour éprouver la robustesse de l’algorithme.
- 💻 Traduire en langage : seulement une fois la structure claire, passer à la programmation dans un langage étudié en classe.
Cette démarche progressive transforme l’énoncé en séquence d’étapes contrôlables. À force d’entraînement, certaines structures deviennent réflexes, que ce soit pour calculer une image de fonction, comme dans des exercices de calcul d’image de fonction, ou pour manipuler des tableaux entiers en code. La vraie compétence installée est alors la capacité à reconnaître la forme d’un problème et à lui associer une stratégie algorithmique adaptée.
Qu’est-ce qu’un algorithme en termes simples ?
Un algorithme est une suite finie d’étapes logiques qui transforment des données d’entrée (nombres, texte, listes) en un résultat bien défini. Il ne dépend pas d’un langage de programmation particulier, mais décrit la méthode à suivre pour résoudre un problème de façon systématique et reproductible.
Quelle différence entre un algorithme et un programme ?
L’algorithme décrit la logique du raisonnement, étape par étape, dans une forme indépendante de tout langage. Le programme, lui, est la traduction de cet algorithme dans un langage de programmation concret comme Python ou JavaScript. Un même algorithme peut donc donner naissance à plusieurs programmes différents.
Pourquoi analyser la complexité d’un algorithme ?
Analyser la complexité permet d’estimer comment le temps d’exécution et l’utilisation de la mémoire évoluent lorsque la taille des données augmente. Cela aide à choisir la meilleure méthode parmi plusieurs, par exemple entre un tri en O(n²) et un tri en O(n log n), surtout lorsque les tableaux deviennent très grands.
Comment savoir si un algorithme est correct ?
Un algorithme est correct s’il termine toujours (finitude) et s’il produit systématiquement la bonne sortie pour toutes les entrées du domaine prévu. On le vérifie en testant des cas variés, y compris des cas limites, puis en justifiant formellement que chaque étape respecte les propriétés du problème initial.
Par où commencer pour inventer son propre algorithme ?
La première étape consiste à reformuler clairement le problème, à lister les données d’entrée et la sortie désirée, puis à chercher un exemple chiffré très simple. À partir de cet exemple, on repère les actions qui se répètent ou les comparaisons à effectuer, ce qui permet de construire un pseudo-code avant de passer au code dans un langage de programmation.
