Maths

Disponible uniquement sur Etudier
  • Pages : 11 (2664 mots )
  • Téléchargement(s) : 0
  • Publié le : 1 novembre 2010
Lire le document complet
Aperçu du document
Algorithmes/Programmation Cours

Licence 2 MASS-Math 2009-20010

Chapitre 1

Construire et analyser un algorithme
Un programme est l’´criture dans un langage de programmation d’une m´thode de calcul e e effectif qu’on nomme un « algorithme » (du nom du math´maticien Al Khowarizmi). Les e math´maticiens ont d´crit des algorithmes bien avant l’existence des ordinateurs. Les ´coe e e liersapprennent ` ex´cuter des algorithmes depuis que l’´cole a ´t´ invent´e : les m´thodes a e e ee e e enseign´es pour r´aliser les quatre op´rations sont des algorithmes. e e e

1.1

Algorithme d’Euclide pour le calcul du PGCD

D´finition 1. (pgcd) Le plus grand commun diviseur ( pgcd) de deux entiers positifs a et e b est le plus grand entier positif qui divise a et divise b. Cette d´finitionsugg`re une m´thode brutale pour calculer le pgcd de deux entiers : passer e e e en revue les entiers de 1 ` min(a, b), d´terminer pour chacun d’entre eux s’il divise a et b, et a e finalement choisir le plus grands des diviseurs communs. Cette construction na¨ n’int´resse ıve e personne. Pour calculer intelligemment le pgcd, on utilise le r´sultat classique suivant. e Th´or`me 1. Si a ≥ b > 0 et a =bq + r avec q, r ∈ N et 0 ≤ r < b, alors e e ￿ pgcd(b, r) si r > 0 pgcd(a, b) = . b si r = 0 .
Exercice 1. D´montrer ce th´or`me. e e e

Remarque 1. Voir TP 6, Section 3 (novembre 2009) du cours if1.

1.1.1

En langage courant

Remarque 2. Pour calculer le pgcd de deux entiers strictement positifs a et b, on suppose toujours a ≥ b > 0. On effectue la division euclidienne de a par b,c’est-`-dire la d´termination de deux entiers a e positifs q (le quotient) et r (le reste) qui satisfont 0 ≤ r < b et a = b × q + r (ces deux entiers sont bien d´termin´s de mani`re unique). On a e e e q = a/b r = a mod b . – Si r = 0, alors b divise a et le pgcd(a, b) = b. 1

Algorithmes/Programmation Cours

Licence 2 MASS-Math 2009-20010

– Sinon (0 < r < b), le pgcd de a et b divise r et toutdiviseur commun de b et r est aussi diviseur de a, donc le pgcd de b et r est aussi celui de a et b. – On peut recommencer la d´marche en rempla¸ant a par b et b par r (remarquons que e c b < a et r < b).

1.1.2

Coder en JAVA
Listing 1.1 – Algorithme brutal en JAVA

La m´thode brutale peut s’´crire de la fa¸on suivante. e e c
p u b l i c s t a t i c i n t gcd0 ( i n t a , i n t b ) { i n t c=1; f o r ( i n t i=2 ; ( ( i 0 3 do a ← b 4 b←r 5 r ← amod b 6 return b La version r´cursive donne : e gcd2((a, b)) 1 r ← amod b 2 if r = 0 3 then return b 4 else return gcd2(b, r) On n’a pas pr´cis´ le type de r (reste de la division euclidienne, c’est un entier). On n’a e e pas explicit´ le type du r´sultat de pgcd, on peut le lire dans le corps des fonctions. e e

3 Algorithmes/Programmation Cours

Licence 2 MASS-Math 2009-20010

Le pseudo-code est fait pour l’oeil, l’indentation remplace avantageusement les parenth`ses et les accolades. e

1.1.4

Analyser l’algorithme

Nos algorithmes posent deux sortes de question : 1. Sont-ils corrects ? Font-ils bien ce que l’on attend d’eux ? Autrement dit, si 0 < b ≤ a avec a, b ∈ N, le r´sultat de l’invocation de gcdi(a, b)(avec i ∈ {0, 1, 2} est-il bien e pgcd(a, b) ? 2. Ces algorithmes ou programmes sont-ils tous de mˆme qualit´s ? Certains sont-ils plus e e rapides que d’autres ? En particulier combien faut-il effectuer de divisions euclidiennes pour ex´cuter chacun de ces algorithmes ? e La premi`re question est une question de correction, la seconde une question de coˆt ou de e u complexit´. e Correction del’algorithme brutal La boucle for balaye donc les entiers de 1 ` b. a Nous allons v´rifier que chaque fois que nous commen¸ons une it´ration de la boucle for , e c e la propri´t´ suivante est v´rifi´e : ee e e La valeur de la variable c ￿c￿ est le plus grand diviseur commun ` a et b qui est a strictement plus petit que la valeur courante de la variable i (￿i￿).

Le cas de base est facile : la valeur...
tracking img