Qu'est-ce qu'un algorithme ?
Algorithme
Un algorithme est une méthode permettant la réalisation de quelque chose, par exemple : de trier des objets, de situer des villes sur une carte, de multiplier deux nombres, d'extraire une racine carrée, de chercher un mot dans le dictionnaire, de faire du café etc......
Un algorithme c'est donc « presque » comme une recette de cuisine. Attention, nous disons bien « presque ». Prenons un exemple : le quatre-quarts au citron ou au chocolat, un gâteau que tout le monde peut réussir. Il suffit de prendre deux œufs, le même poids de farine, de beurre et de sucre, ajouter le parfum, mélanger le tout et mettre au four une petite demi-heure, facile, non ?
Que se passerait-il si nous confiions cette recette à un dispositif mécanique dépourvu d'intelligence (robot, ordinateur, automate...) ? Eh bien, il réaliserait notre recette, exactement comme
nous venons de le spécifier.
Les œufs seront mélangés avec ou sans leur coquille ? Qui a dit d'enlever les coquilles ?
Une « petite » demi-heure dans le four ? Petite ? voilà notre dispositif mécanique bloqué : petite ? Par rapport à quoi ? De combien ?
Sans compter que personne n'a précisé de l'allumer, ce four, ni d'ailleurs de verser le mélange dans un moule !
En résumé, toute instruction ambiguë, incomplètement spécifiée, va échouer.
Un algorithme est un peu comme une recette de cuisine dont chaque étape doit être entièrement et clairement spécifiée, dans les moindre détails.
Retour en cuisine
Nous allons donner à exécuter à notre machine la séquence de toutes les opérations (par exemple : ouvrir le vaisselier, sortir le grand compotier, ouvrir le frigo, compartiment supérieur de la porte, sortir le beurre, ouvrir le placard, 3e étagère à droite, prendre la farine, etc.)
Notre algorithme est donc un chemin à parcourir pas à pas, une séquence d'instructions.
Pour peu que chaque instruction, comme « ouvrir le frigo », ait été bien définie, bien « programmée » précédemment, nous commençons à voir apparaître la pâte du gâteau.
Euh... à condition que tout se passe exactement comme prévu ! Que faire si le compotier n'est pas à sa place, ou s'il ne reste plus de beurre ? « S'il n'y a plus de beurre, il suffit de prendre de la margarine, sinon il vaut mieux arrêter de faire le gâteau. » Bien.
Voilà que notre recette n'est plus une simple séquence d'instructions, ce n'est plus un simple chemin, mais un itinéraire avec des « carrefours », où le choix du chemin se fait en fonction d'une condition (pas de beurre, ou ni beurre ni margarine). Notre algorithme est donc un réseau d'instructions conditionnelles, à parcourir pas à pas, en bifurquant à chaque condition.
Notre quatre-quarts est en bonne voie, « prenons la cuillère et tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tournons les ingrédients dans le compotier, tourn... » Ah mince ! Comment expliquer qu'il faut tourner une bonne trentaine fois les ingrédients dans le compotier, sans devoir recopier une bonne trentaine de fois l'instruction ? D'autant plus que le but n'est pas de tourner trente fois, mais plutôt de tourner jusqu'à ce que la pâte soit bien homogène.
Nous avons alors besoin d'une autre construction, une boucle de la forme « tant que la pâte n'est pas bien homogène, tourner les ingrédients dans le compotier ». Avec cette boucle d'instruction, nous avons la possibilité de faire durer ou répéter une opération autant de fois que nécessaire. De même, nous pouvons écrire « cuire au four tant que la pâte reste liquide », ou « fabriquer 200 quatre-quarts pour tout le quartier », en l'exprimant de manière concise.
Enfin, nous voilà avec un quatre-quarts... au citron, ou bien au chocolat, ou encore à la vanille. Va-t-il donc falloir réécrire la recette complète pour chaque parfum ? Alors que seule l'étape « ajouter trois zestes de citron » ou « ajouter 50 grammes de poudre de chocolat » ou « ajouter 50 grammes de ketchup »...change d'une recette à l'autre ? Certes pas, mais pour l'éviter nous avons besoin d'introduire la notion de variable ou de paramètre. La recette doit être paramétrée par la variable « parfum » et en fonction de sa valeur (« citron », « chocolat »...), une instruction conditionnelle changera juste la ligne de la recette liée au parfum. Nous obtenons ainsi, exprimée de manière concise, la recette de tous les quatre-quarts possibles, qui ne diffèrent que par leur parfum.
Nous avons utilisé des instructions comme « ouvrir le frigo » ou « tourner les ingrédients dans le compotier », qui ont sûrement dû être programmées par quelqu'un d'autre, et nous avons produit l'instruction « faire un quatre-quarts au goût de $parfum » (le signe $ indique qu'il s'agit d'une variable) où « $parfum » prend la valeur « citron » ou « chocolat ». Bref, nous
avons utilisé des fonctionnalités prédéfinies, des « briques de base » pour créer une autre fonctionnalité, qui pourra à son tour être utilisée par quelqu'un qui prépare un autre menu.
Cette dernière construction, qui consiste à regrouper un bloc d'instructions dans une fonction, va nous permettre de réutiliser différentes fonctionnalités, comme les briques d'un jeu de Lego, pour réaliser une construction logicielle.
N'oublions pas toutefois une autre différence importante entre les recettes de cuisine et les programmes, c'est que les programmes sont destinés à être lus, non seulement par des humains, mais aussi par des ordinateurs chargés de les exécuter, ce qui demande que ces programmes soient écrits dans des langages très particuliers : les langages de programmation.
Mais la bonne nouvelle à retenir, c'est que ces cinq ingrédients suffisent pour décrire tous les algorithmes. Par conséquent, il suffit d'avoir ces cinq ingrédients sous la main pour se lancer dans la programmation !
séquence d'instructions.
instructions conditionnelles
boucle d'instruction
variable
fonction