Informatique 2010-2011 : TD 1. MPSI B Hoche
Introduction à l’algorithmique
Unalgorithme est un enchaînement d’actions.
Autres mots pour "action" : commande, instruction.
On décrit un algorithme à l’aide de diverses conventions de langage : langage naturel, schéma , pseudo-code, code.
Les documents de la liste du dessus respectent des conventions de plus en plus précises.
Uncode est un texte respectant la syntaxe d’un langage de programmation.
L’objet de cette introduction est de présenter diverses notions et conventions à partir d’un exemple d’algorithme totalement évident. On utilisera ensuites ces notions et convention pour décrire un algorithme de numération.
Partie I : la cuisson des coquillettes
Partons de la description de l’algorithme dans un livre de cuisine (figure 1) qui date des années 60. On se propose de traduire (implémenter) l’algorithme de
Fig.1 – Un algorithme en langage "naturel" (Ginette Mathiot)
cuisson des pâtes en utilisant des conventions plus modernes et qui se prêtent mieux à la généralisation.
On peut simplement aller à la ligne entre chaque commande utiliser : 250 g de pâtes, 35 g de sel, 3 litres d’eau
-faire bouillir de l’eau salée -mettre les pâtes dans l’eau -laisser cuire 5mn
Dans un schéma conventionnel (Fig 2), on utilise des rectangles et des flèches.
On peut aussi introduire la notion de couche, chaque commande est en fait un
Fig.2 – Un schéma simpliste
enchaînement de commandes plus simples (faisant partie d’une couche d’un niveau inférieur) que l’on choisit de ne pas préciser.
On va maintenant détailler certaines des commandes précédentes et introduire la notion devariable. Une variable est unnom qui sert à désigner quelque chose.
On va introduire aussi la notion d’affectation (on dit aussi assignation) qui sera codée par une flèche<--ainsi que la notion d’opérationet celle defonction.
Nous allons utiliser deux variables : Cassy et Eg et former un nouveau schéma : Dans ce schéma les instructions
Fig.3 – affectations, opérations, fonctions
"faire bouillir" Cassy
"chauffer" Cassy, 5mn
"vider" Cassy
"vider" Eg
Cette création est mise à disposition selon le Contrat
Paternité-Pas d’utilisations commerciale-Partage des Conditions Initiales à l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
1 Rémy Nicolai TD1101
Informatique 2010-2011 : TD 1. MPSI B Hoche
sont des appels defonction contenant des paramètres comme Cassy ou Eg. L’ap- pel d’une fonction exécute un enchaînement de commandes qui peut modifier ou non les objets désignés par les paramètres et renvoyer ou non un autre objet.
Par exemple, les fonctions"faire bouillir","chauffer" "secouer"modifient l’état de l’objet désigné par Cassy ou Eg. En revanche "vider" ne modifie pas l’objet désigné par le paramètre maisrenvoie quelque chose obtenu à partir de ce paramètre (le contenu de la casserole ou de l’égouttoir).
Introduisons maintenant la notion de structure de contrôle dans l’enchaînement des commandes. On va évaluer quelque chose à "vrai" ou "faux" et diriger vers des enchaînements différents suivant le résultat.
Détaillons ainsi la commande"faire bouillir" Cassysuivant la figure4
Fig.4 – structure de contrôle
Partie II : numération en base b
Proposition. Soit b un entier naturel supérieur ou égal à 2. Pour tout entier naturelxentre0 etbn−1, il existe un unique n-uplet
(a0, a1,· · ·, an−1)∈ {0,1,· · · , b−1}n tel que
x=a0+a1b+· · ·+an−1bn−1
Cette proposition traduit l’existence et l’unicité de la décomposition d’un entier dans une base arbitraire. On utilise en particulier les basesb= 2 (binaire),b= 10 (décimale),b= 16 (héxadécimal),b= 201,b= 60 (sexagésimale)2
Preuve. Pour démontrer cette proposition, on va remarquer qu’elle est équivalente à la bijectivité d’une certaine application entre deux ensembles finis ayant le même
1voir le système de numération maya. Cette base semble aussi avoir été utilisée par les Gaulois, le 80 quatre-vingt en serait un lointain vestige (ref wikipédia)
2utilisé par les mésopotamiens voir en particulier les tablettes cuneiformes de Plimpton
nombre d’éléments. Pour une telle application, l’injectivité entraîne la surjectivité donc la bijectivité.
La démonstration de l’injectivité estconstructive. Si un entier est décomposé alors chaqueaise calcule algorithmiquement en fonction dexet deb. Ceci assure l’unicité de la décomposition donc l’injectivité de la fonction.
Considérons la fonction Φ
({0,1,· · ·, b−1}n→{0,1,· · · , bn−1}
(a0, a1,· · · , an−1)→a0+a1b+· · ·+an−1bn−1 En fait, il faut commencer par montrer que
a0+a1b+· · ·+an−1bn−1∈ {0,1,· · ·, bn−1}
Ceci résulte de l’encadrement
0≤a0+a1b+· · ·+an−1bn−1≤(b−1) + (b−1)b+· · ·+ (b−1)bn−1
≤(b−1)(1 +b+· · ·+bn−1) =bn−1 On démontre exactement de la même manière que, pour desm≤n:
a0+a1b+· · ·+am−1bm−1∈ {0,1,· · · , bm−1}
Ceci servira plus loin pour justifier un des deux algorithmes proposés.
La proposition est exactement équivalente à la bijectivité de la fonction Φ. Les ensembles de départ et d’arrivée ont le même nombre d’éléments à savoirbn. Si la fonction Φ est injective, les images sont deux à deux distinctes. Il y a donc autant d’images distinctes que d’éléments dans l’ensemble de départ. Mais alors tous lesbn éléments de l’ensemble d’arrivée sont des images puisque cet ensemble ne contient quebn éléments.
Démontrons maintenant l’injectivité3. On suppose x=a0+a1b+· · ·+an−1bn−1
On peut adopter un algorithme "glouton" en cherchant d’abord les "plus gros mor- ceaux" c’est à dire le nombrean−1debn−1 contenus dans x. Comme
0≤a0+a1b+· · ·+an−2bn−2≤bn−1−1
3On peut présenter cette démonstration comme une analyse-synthèse. L’analyse correspond à l’injectivité ou à l’unicité, son argumentation est algorithmique. La synthèse correspond à la surjectivité ou à l’existence, son argumentation repose sur la théorie des ensembles
Cette création est mise à disposition selon le Contrat
Paternité-Pas d’utilisations commerciale-Partage des Conditions Initiales à l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
2 Rémy Nicolai TD1101
Informatique 2010-2011 : TD 1. MPSI B Hoche
ce nombre est le reste de la division dexparbn−1et an−1 en est le quotient. Ceci assure l’unicité dean−1et on peut poursuivre le raisonnement en divisant le reste précédent parbn−2.
On peut aussi procéder en partant du bas. Dans la division parb de x=a0+a1b+· · ·+am−1bm−1=a0+ (a1+a2b+· · ·+an−1bn−2)b le reste esta0 et le quotient est a1+a2b+· · ·+an−1bn−2. Ceci assure l’unicité dua0 et le raisonnement se poursuit en divisant parb le quotient précédent. Le schéma conventionnel de cet algorithme est présenté en figure5
Fig.5 – algorithme de numération
On remarquera l’assignation arbitraire d’un objet quelconque à la variableres (résultat) au début du processus. On remarquera aussi dans l’instruction
res <-- restediv(x,b) , res
la place des deux variables par rapport à la virgule pour assurer que les différents termes s’écrivent bien de droite à gauche comme dans une écriture décimale usuelle.
Exponentiation rapide
L’algorithme d’exponentiation rapidepermet de calculerae oùaet esont des nombres naturels en effectuant moins (beaucoup moins !) deemultiplications.
Le premier cas est celui où l’exposanteest une puissance de 2. Pour calculer xm=a(2m)
on peut utiliser seulementm(au lieu de 2m) multiplications en remarquant que x0=a, xm+1=x2m
Dans le cas général, on peut utiliser la décomposition deeen base 2. Les coefficients sont 0 ou 1 et seuls les 1 "comptent" dans le calcul de la puissance
e = c0+c121+c222+· · ·+cm2m ae = ac0ac121· · ·acm2m
ae = xi1xi2...
aveci1,i2associés aux coefficients non nuls de la décomposition
1. Mettre en oeuvre le principe précédent pour calculer ae sur un exemple en décomposant e en base 2 (par une succession d’opérations sans chercher à former un programme). Vérifier en calculant directement.
2. On modifie légèrement l’algorithme de décomposition deeen base 2 en cal- culant toutes les puissances dea dont l’exposant est une puissance de 2 et en multipliant ces nombres lorsque c’est nécessaire. Ce nouvel algorithme est présenté dans le diagramme de la figure6 que vous devez traduire dans la syntaxe Maple.
Cette création est mise à disposition selon le Contrat
Paternité-Pas d’utilisations commerciale-Partage des Conditions Initiales à l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
3 Rémy Nicolai TD1101
Informatique 2010-2011 : TD 1. MPSI B Hoche
Fig.6 – exponentiation rapide
Cette création est mise à disposition selon le Contrat
Paternité-Pas d’utilisations commerciale-Partage des Conditions Initiales à l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
4 Rémy Nicolai TD1101