Cours n° 1 Histoire de l’algorithmique 1. l'histoire Dés l'antiquité, des algorithmes ont été utilisées dans le commerce ou le calcul des impôts (des descriptions exhaustives ont été retrouvées) : ils permettaient notamment aux marchands de faire leurs calculs d'intérêts sans rien connaitre aux mathématiques ! Par ailleurs, l'algorithme mathématique le plus connu, décrit par Euclide vers 300, permet de trouver le plus grand diviseur commun à deux entiers. Mais le mot "algorithme" vient du nom du célèbre mathématicien perse Al Khawarizmi (latinisé au Moyen-âge en Algoritmi) qui au IX siècle, écrivit le premier ouvrage sur la résolution systématique des équations du premier et deuxième degré. 2. De l'algorithme à sa programmation L'intérêt majeur qu'il y a à disposer d'algorithme de résolution de problème est de permettre l'automatisation : on peut déléguer à une machine l'exécution de taches routinières conduisant à la solution. La traduction de l'algorithme en vue de son exécution par une machine pose deux problèmes distincts : a) le découpage en taches suffisamment simples et sans ambigüité pour qu'une machine sache les exécuter correctement ; b) la traduction de ces taches dans un langage compréhensible par la machine. 3) Analyse descendante Une technique d'élaboration d'un bon algorithme est appelée méthode descendante (top down). Elle consiste à considérer un problème dans son ensemble, à préciser les données fournies et les résultats à obtenir puis décomposer le problème en plusieurs sous-problèmes plus simples qui seront traites séparément et éventuellement décomposés eux-mêmes de manière plus fine. Exemple : imaginons un robot domestique à qui nous devons fournir un algorithme lui permettant de préparer une tasse de café soluble. Une première version de l'algorithme pourrait être : (1) faire bouillir de l'eau (2) mettre le cafe dans la tasse (3) ajouter l'eau dans la tasse Les étapes de cet algorithme ne sont probablement pas assez détaillées pour que le robot puisse les interpréter. Chaque étape doit donc être affinée en une suite d'étapes plus élémentaires, chacune étant spécifiée d'une manière plus détaillée que dans la première version. Ainsi l'étape (1) faire bouillir l'eau peut être affinée en : 1 (1.1) remplir la bouilloire d'eau (1.2) brancher la bouilloire sur le secteur (1.3) attendre l'ébullition (1.4) débrancher la bouilloire De même, (2) mettre le café dans la tasse pourrait être affine en : (2.1) ouvrir le pot à café (2.2) prendre une cuiller à café (2.3) plonger la cuiller dans le pot (2.4) verser le contenu de la cuiller dans la tasse (2.5) fermer le pot à café Et (3) ajouter de l'eau dans la tasse pourrait être affinée en : (3.1) verser de l'eau dans la tasse jusqu'à ce que celle-ci soit pleine Certaines étapes étant encore trop complexes et sans doute incompréhensibles pour notre robot, il faut les affiner davantage. Ainsi l'étape (1.1) remplir la bouilloire d'eau peut nécessiter les affinements suivants : (1.1.1) mettre la bouilloire sous le robinet (1.1.2) ouvrir le robinet (1.1.3) attendre que la bouilloire soit pleine (1.1.4) fermer le robinet L’algorithme final obtenu est le suivant : (1.1) remplir la bouilloire d'eau (1.1.1) mettre la bouilloire sous le robinet (1.1.2) ouvrir le robinet (1.1.3) attendre que la bouilloire soit pleine (1.1.4) fermer le robinet (1.2) brancher la bouilloire sur le secteur (1.3) attendre l'ébullition (1.4) débrancher la bouilloire (2.1) ouvrir le pot à café (2.2) prendre une cuiller à café (2.3) plonger la cuiller dans le pot (2.4) verser le contenu de la cuiller dans la tasse (2.5) fermer le pot à café (3.1) verser de l'eau dans la tasse jusqu'à ce que celle-ci soit pleine Remarque 2 Quand il procède à des affinements des différentes étapes, le concepteur d'un algorithme doit naturellement savoir ou s'arrêter. Autrement dit, il doit savoir quand une étape est compréhensible par le robot ou la machine. 3. Algorithmes mathématiques : exemples Le but d'un algorithme en mathématique est de produire la solution générale d'un problème. Un algorithme se distingue d'une succession de calculs par l'aspect général de la méthode de résolution qu'il permet : ainsi, quelque soient les données, la résolution pourra être obtenue. Résolution des équations du premier degré Problème : étant donnée une équation de type ax + b = 0, en trouver les solutions. Ici, les données sont les réels a et b, Et la sortie doit être les solutions de l'équation associée ax + b = 0. A nous de trouver la seconde étape : la suite des instructions qui permet de passer des entrées à la sortie. Attention de bien prévoir tous les cas possibles (ne pas s'occuper que du cas général !) sinon l'algorithme n'en est plus un. Il existe plusieurs façons de présenter un algorithme : dans l'exemple qui nous intéresse, l'arbre est approprie. Entrée : l'équation ou plutôt les réels a et b Groupe d'instructions à faire Sortie: affichage des solutions. 3 Serie TD N1 Exercice 1 Ecrire un algorithme en langage naturel pour préparer une omelette Exercice 2 Ecrire un algorithme en langage naturel pour résoudre une équation de type ax + b = 0, Exercice 3 Problème : étant donnée une équation de type ax2 + bx + c = 0, Ecrire un algorithme pour résoudre et trouver les solutions de cette équation Adopter une démarche analogue pour obtenir un algorithme sous forme d'arbre. Serie TD N1 Exercice 1 Ecrire un algorithme en langage naturel pour préparer une omelette Exercice 2 Ecrire un algorithme en langage naturel pour résoudre une équation de type ax + b = 0, Exercice 3 Problème : étant donnée une équation de type ax2 + bx + c = 0, Ecrire un algorithme pour résoudre et trouver les solutions de cette équation Adopter une démarche analogue pour obtenir un algorithme sous forme d'arbre. Serie TD N1 Exercice 1 Ecrire un algorithme en langage naturel pour préparer une omelette Exercice 2 Ecrire un algorithme en langage naturel pour résoudre une équation de type ax + b = 0, Exercice 3 Problème : étant donnée une équation de type ax2 + bx + c = 0, Ecrire un algorithme pour résoudre et trouver les solutions de cette équation Adopter une démarche analogue pour obtenir un algorithme sous forme d'arbre. 4