Archives mensuelles : mai 2013

Quelques réflexions sur les algorithmes…

La notion d’algorithme n’est pas née avec les premiers ordinateurs mais leur est bien antérieure, remontant à l’Antiquité. Dans son acceptation commune, un algorithme est une suite d’instructions, une « recette », permettant d’obtenir un résultat prédéfini. Il est synonyme de méthode systématique, c’est-à-dire permettant d’aboutir de manière certaine (donc avec un nombre fini d’opérations). A ce titre, une recette de cuisine constitue un algorithme (et certains sont très doués pour rater systématiquement celle de la mayonnaise :-)) tout comme la partition jouée par un orgue de Barbarie lisant des cartons perforés.

EuclideDes exemples de telles méthodes systématiques sont le crible d’Eratosthène qui permet de déterminer à coup sûr les nombres premiers inférieurs à un entier N donné (N ne doit évidemment pas être trop grand pour que l’algorithme aboutisse dans un temps raisonnable) ou encore l’algorithme d’Euclide. L’algorithme d’Euclide (ci-contre), qui permet de trouver le PGCD de deux nombres entiers, est remarquable dans le sens où il est bien plus rapide que l’algorithme des soustractions successives, qui paraît être une méthode plus « naturelle », à laquelle on peut penser de prime abord.

Mais la notion d’algorithme est de nos jours indissociable de l’ordinateur, cet ogre des temps modernes qui s’en paisse sans jamais en être rassasié. A ce propos, le mot informatique provient, faut-il le rappeler, de la contraction d’information et automatique, ce qui en constitue une remarquable définition, que les Anglo-Saxons nous envient. Puisque les traitements que réalise la science informatique sont automatiques, ils s’appuient obligatoirement sur des algorithmes qui peuvent être aussi simples que faire des additions et des soustractions dans le cas des caisses enregistreuses (avec souvent cependant un raffinement supplémentaire : la génération de bons fidélités valables pour un montant d’achat légèrement supérieur à l’habituel :-)) ou d’une grande complexité quand il s’agit par exemple de traiter les milliards de données issues de collisions au sein d’accélérateurs de particules.

La rapidité d’un algorithme est un facteur important dans bien des cas de figure. Elle est liée à la notion de temps réel. Par exemple, le système informatique qui gère le passage des usagers à l’entrée et à la sortie des stations de métro en fonction notamment de la carte des zones doit rendre son verdict en à peine plus d’une seconde pour assurer la fluidité du flux des voyageurs (une attente d’une minute serait totalement inacceptable, provoquant des embouteillages monstres chaque matin). Dans le même ordre d’idées mais à une échelle temporelle différente, les ordinateurs qui prévoient la météo du lendemain ne peuvent se permettre une semaine de calcul (dans ce cas, les ingénieurs ajustent les modèles prévisionnels en fonction de la puissance des machines pour être certain d’aboutir en temps et en heure).

Pour être rapide, un algorithme doit être pertinent, autrement dit, il se doit d’être optimisé. Prenons l’exemple du jeu d’échec. Alors que l’être humain s’appuie sur son expérience et son intuition (cette dernière étant bien souvent de l’expérience inconsciente), la machine va tester un grand nombre de coups à l’avance en misant sur sa puissance de calcul pour tenter de rivaliser avec l’homme. Le nombre de coups possibles croissant exponentiellement, les calculs sont optimisés en élaguant les branches menant à des situations sans intérêt pour la victoire, ou estimées telles. Ces optimisations, combinées avec les vitesses de traitement toujours plus grandes, ont permis de rivaliser avec les grands maîtres internationaux puis, au début de ce siècle, d’arriver à systématiquement les mettre en échec.

Ce dernier exemple montre que les méthodes mises en œuvre dans les algorithmes peuvent être fort différentes de celles développées par un esprit humain, même si, au final, les algorithmes sont (encore !) pensés par des hommes. Si l’on pousse la réflexion un peu plus loin, ne pourrait-on pas considérer que la vie elle-même n’est au final qu’un algorithme, une suite de commandes codées dans l’ADN, dont la finalité est de se reproduire, à l’échelle moléculaire mais aussi à l’échelle macroscopique, celle des êtres vivants ? Les abeilles suivent bien depuis des millénaires une logique optimisée à l’extrême dont le but final est tout bonnement d’assurer la pérennité de la ruche. Et nous les humains, sommes-nous programmés pour rechercher le bonheur, trouver l’âme sœur et nous reproduire pour assurer la pérennité de notre espèce ? Quid du libre arbitre alors ?