Il a quelque part été relevé que l’usage public du mot “algorithme” relève d’une “utilisation trop simplifiée." [1]
Nous le confirmons: dans un ordinateur, on a du mal à identifier ce qu’est un algorithme. En tant que “suite d’instructions”, l’algorithme en toute rigueur devrait être fini… mais au contraire, un ordinateur fonctionne grâce à des programmes, qui peuvent opérer des boucles de traitement, et donc travailler de manière in(dé)finie! Autre distance algorithme/programme: alors que l’algorithme est une suite théorique d’instructions, une procédure générale, un programme c’est l’écriture de ces instructions dans un langage de programmation particulier. On dit qu’un programme implémente un ou plusieurs algorithmes.
Nous devons alors insister sur le caractère abstrait de l’algorithme, qui suppose d’ignorer les détails d’implémentation (choix du langage et du cadre (framework) de programmation, architecture logiciel, clustering etc). [2]
Parler d’algorithme, c’est choisir le seul regard du logicien, qui est loin d’épuiser la réalité: d’autres regards complémentaires sont nécessaires pour parler un peu mieux du réel (le regard de l’utilisateur, de l'administrateur, du programmeur etc.)
Le programme et l’algorithme ne sont pas déterministes de la même manière, au sens où le programme est soumis à modification en cas de changement de variables. Un programme peut certes “embarquer“ certaines séquences de code, non changeantes, qualifiables d’algorithmes. Mais selon certains auteurs, on ne doit parler d’algorithme qu’à un stade de réduction avancée. [3] Quoi qu’il en soit, la notion de programme appelle celle de finitude ou non-terminaison.
La non-terminaison inhérente au traitement de programmes implique que l'opcode devant être exécuté peut être conservé dans un compteur de programme, qui est ensuite incrémenté de manière séquentielle après l'exécution de chaque opcode. Cependant, certains opcodes, tels que les instructions de saut (jump), ont la capacité de modifier la valeur du compteur de programme, ce qui peut entraîner une boucle d'exécution: on comprend ici que si un programme mettait un temps infini pour donner une réponse, il ne servirait potentiellement à rien… Pourtant le temps d’exécution (uptime) est paramétrable et on récupère ici, un caractère de finitude typique de l’algorithme.
[1] Alberto Naibo qui travaille sur la définition de l'algorithme : "Or la notion d’algorithme est l’une des notions les plus présentes dans le débat public actuel. Ce débat est généralement dominé par un style de discussion journalistique, où des déclarations sont faites afin de polariser la discussion autour de scénarios futurs, positifs ou négatifs, concernant les impacts économiques, politiques et sociaux des algorithmes. Ces discussions n’explicitent cependant jamais ce qu’est un algorithme, et lorsqu’elles le font, une image trop simplifiée en est souvent donnée (un algorithme sera par exemple comparé à une recette de pâtisserie). " https ://observatoire-ia.pantheonsorbonne.fr/entretien-alberto-naibo-geometrie-algorithmes
[2] L'approche de Yuri Gurevich pour définir un algorithme est basée sur la notion d'une machine à états abstraite. Un algorithme est considéré comme un ensemble d'instructions qui opèrent sur des états abstraits, les transformant en nouveaux états. Cette définition permet différents modèles de calcul et capture l'essence du calcul indépendamment des détails d'implémentation spécifiques.
[3] Selon la complexité de Kolmogorov, un algorithme est défini en termes de théorie de l'information. Il considère un algorithme comme la description la plus courte possible (en termes de bits) d'un objet spécifique ou du processus permettant de le générer. L'algorithme qui produit l'objet avec la description la plus courte est considéré comme le plus efficace.