Ce cours ne traite pas : la recherche de motifs dans une chaîne de caractères (problème supposé être abondamment traité dans le cours deProgrammation Orientée Objet) ; l’algorithmique géométrique (supposée être traitée dans les cours liés au traitement d’image).
Chapitre
1
Introduction
1.1
Qu’est-ce que l’algorithmique ?
Dénition 1 (Algorithme).Un algorithme est suite nie d’opérations élémentaires constituant un schéma de calcul ou de résolution d’un problème.
Historique :Le mot « algorithme » provient de la forme latine (Algorismus) du nom du mathématicien arabeAL-¯ ¯ KHAREZMIouAL-KHWARIZMIauteur entre autres mais ce n’ est pas le plus important d’un manuel de vulga-risation sur le calcul décimal positionnel indien (v. 830) expliquant son utilisation et, surtout, la manipulation des différents algorithmes permettant de réaliser les opérations arithmétiques classiques (addition, soustraction, multipli-cation, division, extraction de racines carrées, règle de trois, etc.).
Double problématique de l’algorithmique 1.Trouver une méthodede résolution (exacte ou approchée) du problème. Soient trois nombres réelsa,betc, quelles sont les solutions de l’équationax2+bx+c? (Résultat bien connu.) Soient cinq nombres réelsa,b,c,dete, quelles sont les solutions de l’équationax5+bx4+cx3+dx2+ex+f? (Pas de méthode générale, cf. la théorie de GALOIS.) 2. Trouver une méthodeefcace. Savoir résoudre un problème est une chose, le résoudre efcacement en est une autre, comme nous allons le voir à la section 1.2.
Différences entre algorithmes et programmes
Unprogrammeest la réalisation (l’implémentation) d’un algorithme au moyen d’un langage donné (sur une architecture donnée). Il s’agit de la mise en œuvre du principe. Par exemple, lors de la programmation on s’occupera parfois explicitement de la gestion de la mémoire (allocation dynamique en C) qui est un problème d’implémentation ignoré au niveau algorithmique.
1.2
Motivation : calcul dexn
1.2.1 Problème
Données :un entier naturelnet un réelx. On veut calculerxn. Moyens :Nous partons dey1=x. Nous allons construire une suite de valeursy1, ...,ymtelle que la valeuryksoit obtenue par multiplication de deux puissances dexprécédemment calculées :yk=yu×yv, avec 1≤u,v<k, k∈[2,m].
9
10
CHAPITRE 1. INTRODUCTION
But :ym=xn. Lecoûtde l’algorithme sera alors dem−1, le nombre de multiplications faites pour obtenir le résultat recherché.
y[1] = x Pouri←2ànfaire y[i] = y[i−1]×y[1] renvoyery[n]
1.2.3 Méthode binaire
Algorithme
1. Écrirensous forme binaire 2. Remplacer chaque : « 1 » par la paire de lettres «SX» ; « 0 » par la lettre «S». 3. Éliminer la paire «SX» la plus à gauche. 4. Résultat : un mode de calcul dexnoù S« élever au carré » (signie squaring) ; Xsignie « multiplier parx». Le tout en partant dex.
Illustration avecn=23
1.n=10111
1 0 1 1 1 2. SXSX S SX SX 3. SX SXS SX 4. Nous partons dexet nous obtenons successivement : x2,x4,x5,x10,x11,x22,x23. Nous sommes donc capables de calculerx23en 7 multiplications au lieu de 22 !
Explication de la méthode Écriture binaire den:n=åi=pa2i. i=0i Plaçons nous au cours du calcul de puissances dex. Soitjle dernier bit de la représentation binaire denqui ait été « décodé » et soityjle dernier résultat obtenu. Initialement,j=petyp=x=xap. Deux cas sont possibles pouraj−1: 1.aj−1=1.aj−1est remplacé parSX, nous élevonsyjau carré puis multiplions le résultat parx. Le nouveau résultat estyj−1=y2j×x. 2.aj−1=0.aj−1est remplacé parSet nous élevons simplementyjau carré. Le nouveau résultat estyj−1=yj2. Dans tous les cas nous avons :yj−1=yj2×(xaj−1). D’où,yp−1=y2p×(xap−1) = (xap)2×(xap−1) = (x2×ap)×(xap−1) = (x2×ap+ap−1). Par récurrence, nous pouvons i= montrer quey1=xåi=0pai2i=xn...
1.2. MOTIVATION : CALCUL DEXN
Complexité (coût)
11
Note : les nombres dont la représentation binaire a exactementpchiffres forment exactement l’intervalle[2p−1,2p−1]. Nombres de chiffres dans l’écriture binaire den: 1+ [log2n]. NotonsΗ(n)le nombre de « 1 » dans l’écriture binaire den. Nombre d’opérations effectuées : (1+ [log2n])−1 élévations au carré (ne pas oublier l’étape 3) ; Η(n)−1 multiplications parx(ne pas oublier l’étape 3). Soit en toutT(n) = [log2n] +Η(n)−1 multiplications. Trivialement, 1≤Η(n)≤[log2n]et[log2n]≤T(n)≤2[log2n]. Pourn=effectue 999 multiplications, et la méthode binaire moins de 20.1000, l’algorithme trivial
Historique
Cette méthode a été présentée avant 200 avant J.C. en Inde, mais il semblerait qu’il ait fallu attendre un millénaire avant que cette méthode ne soit connue en dehors de l’Inde [3, p. 441].
Peut-on faire mieux ?
Prenons le casn=15.
1.n=1111 1 1 1 1 2.SX SX SX SX 3.SX SX SX 4. Nous partons dexet nous obtenons successivement :x2,x3,x6,x7,x14,x15. Nous sommes donc capables de calculerx15en 6 multiplications. Autre schéma de calcul :x2,x3,x6,x12,x15=x12×x3. Nous obtenons ainsix15en 5 multiplications et la méthode binaire n’est donc pasoptimale(c’est-à-dire que l’on peut faire mieux).
1.2.4
Algorithme des facteurs
Algorithme xsin=1 xn=xn(−x1p)×n0xssiinnp=repm;×ienr;0avecpplus petit diviseur premier den.
Illustration avecn=15 1. 15=3×plus petit diviseur (facteur) premier de 15. Donc5, 3 étant le x15= (x3)5. Nous réappliquons l’algorithme pour calculerx3ety5, oùy=x3. 2. Calcul dex3: (a) 3 est premier. Doncx3=x2×x. Nous réappliquons l’algorithme pour calculerx2. (b) 2 est premier. Doncx2=x×x. (c) Finalement,x3est calculé comme suit :x3=x×x×x, soit en deux multiplications. 3. Calcul dey5: (a) 5 est premier. Doncy5=y4×y. Nous réappliquons l’algorithme pour calculery4. (b) 4=2×2, où 2 est le plus petit facteur premier de 4. Doncy4= (y2)2. (c) Finalementy5est calculé comme suit :t=y×y,u=t×t,y5=u×y, soit en 3 multiplications. 4. Finalement,x15est calculé en 5 multiplications.