image pdf - maquisdoc

publicité
Informatique
Introduction à l’algorithmique
Introduction à l’algorithmique
MPSI B Hoche
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
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
Fig. 2 – Un schéma simpliste
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
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. 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
Fig. 3 – affectations, opérations, fonctions
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
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/
"faire bouillir" Cassy
"chauffer" Cassy, 5mn
"vider" Cassy
"vider" Eg
1
Rémy Nicolai Aintroalgo
Informatique
Introduction à l’algorithmique
sont des appels de fonction contenant des paramètres comme Cassy ou Eg. L’appel 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
MPSI B Hoche
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 ai se calcule algorithmiquement en fonction de x et 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, · · · , bn − 1}
Φ
(a0 , a1 , · · · , an−1 ) →a0 + a1 b + · · · + an−1 bn−1
En fait, il faut commencer par montrer que
a0 + a1 b + · · · + an−1 bn−1 ∈ {0, 1, · · · , bn − 1}
Ceci résulte de l’encadrement
0 ≤ a0 + a1 b + · · · + an−1 bn−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 des m ≤ n :
Fig. 4 – structure de contrôle
a0 + a1 b + · · · + am−1 bm−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 à 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
Partie II : numération en base b
Proposition. Soit b un entier naturel supérieur ou égal à 2. Pour tout entier
naturel x entre 0 et bn − 1, il existe un unique n-uplet
(a0 , a1 , · · · , an−1 ) ∈ {0, 1, · · · , b − 1}n
tel que
x = a0 + a1 b + · · · + an−1 bn−1
x = a0 + a1 b + · · · + an−1 bn−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 bases b = 2 (binaire), b = 10
(décimale), b = 16 (héxadécimal), b = 20 1 , b = 60 (sexagésimale) 2
On peut adopter un algorithme "glouton" en cherchant d’abord les "plus gros morceaux" c’est à dire le nombre an−1 de bn−1 contenus dans x. Comme
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
0 ≤ a0 + a1 b + · · · + an−2 bn−2 ≤ bn−1 − 1
1 voir 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)
2 utilisé par les mésopotamiens voir en particulier les tablettes cuneiformes de Plimpton
3 On 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 Aintroalgo
Informatique
Introduction à l’algorithmique
MPSI B Hoche
ce nombre est le reste de la division de x par bn−1 et an−1 en est le quotient. Ceci
assure l’unicité de an−1 et on peut poursuivre le raisonnement en divisant le reste
précédent par bn−2 .
On peut aussi procéder en partant du bas. Dans la division par b de
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
x = a0 + a1 b + · · · + am−1 bm−1 = a0 + (a1 + a2 b + · · · + an−1 bn−2 )b
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.
res <-- restediv(x,b) , res
le reste est a0 et le quotient est a1 + a2 b + · · · + an−1 bn−2 . Ceci assure l’unicité
du a0 et le raisonnement se poursuit en divisant par b le quotient précédent. Le
schéma conventionnel de cet algorithme est présenté en figure 5
Fig. 5 – algorithme de numération
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 Aintroalgo
Téléchargement