Informatique Introduction à l’algorithmique MPSI B Hoche
Introduction à l’algorithmique
Un algorithme 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.
Un code 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 de variable. Une variable est un nom 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ération et celle de fonction.
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/
1Rémy Nicolai Aintroalgo
Informatique Introduction à l’algorithmique MPSI B Hoche
sont des appels de fonction 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 mais renvoie 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" Cassy suivant la figure 4
Fig. 4 – structure de contrôle
Partie II : numération en base b
Proposition. Soit bun entier naturel supérieur ou égal à 2. Pour tout entier
naturel xentre 0et bn1, il existe un unique n-uplet
(a0, a1,· · · , an1)∈ {0,1,· · · , b 1}n
tel que
x=a0+a1b+· · · +an1bn1
Cette proposition traduit l’existence et l’unicité de la décomposition d’un entier
dans une base arbitraire. On utilise en particulier les bases b= 2 (binaire), b= 10
(décimale), b= 16 (héxadécimal), b= 20 1,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é est constructive. Si un entier est décomposé alors
chaque aise calcule algorithmiquement en fonction de xet de b. 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,· · · , bn1}
(a0, a1,· · · , an1)a0+a1b+· · · +an1bn1
En fait, il faut commencer par montrer que
a0+a1b+· · · +an1bn1∈ {0,1,· · · , bn1}
Ceci résulte de l’encadrement
0a0+a1b+· · · +an1bn1(b1) + (b1)b+· · · + (b1)bn1
(b1)(1 + b+· · · +bn1) = bn1
On démontre exactement de la même manière que, pour des mn:
a0+a1b+· · · +am1bm1∈ {0,1,· · · , bm1}
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 à savoir bn.
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 les bnéléments de l’ensemble d’arrivée sont des images puisque cet ensemble
ne contient que bnéléments.
Démontrons maintenant l’injectivité3. On suppose
x=a0+a1b+· · · +an1bn1
On peut adopter un algorithme "glouton" en cherchant d’abord les "plus gros mor-
ceaux" c’est à dire le nombre an1de bn1contenus dans x. Comme
0a0+a1b+· · · +an2bn2bn11
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/
2Rémy Nicolai Aintroalgo
Informatique Introduction à l’algorithmique MPSI B Hoche
ce nombre est le reste de la division de xpar bn1et an1en est le quotient. Ceci
assure l’unicité de an1et on peut poursuivre le raisonnement en divisant le reste
précédent par bn2.
On peut aussi procéder en partant du bas. Dans la division par bde
x=a0+a1b+· · · +am1bm1=a0+ (a1+a2b+· · · +an1bn2)b
le reste est a0et le quotient est a1+a2b+· · · +an1bn2. Ceci assure l’unicité
du a0et le raisonnement se poursuit en divisant par ble quotient précédent. Le
schéma conventionnel de cet algorithme est présenté en figure 5
Fig. 5 – algorithme de numération
On remarquera l’assignation arbitraire d’un objet quelconque à la variable res
(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.
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/
3Rémy Nicolai Aintroalgo
1 / 3 100%