Académique Documents
Professionnel Documents
Culture Documents
P R É P A S S C I E N C E S
COLLECTION DIRIGÉE PAR BERTR AND HAUCHECORNE
IPT
INFORMATIQUE
POUR TOUS
Algorithmique, programmation Python,
ingénierie numérique et simulation
(bibliothèques Numpy et Scipy de Python)
Les 2 années
en 1 clin d’œil
PRÉPAS
SCIENCES
collection dirigée par Bertrand Hauchecorne
IPT
Informatique
pour tous
Algorithmique, programmation Python,
ingénierie numérique et simulation
(bibliothèques Numpy et Scipy de Python)
Nicolas NGUYEN
Professeur au lycée F. Rabelais (Saint-Brieuc)
Gweltaz CHATEL
Professeur au lycée F. Rabelais (Saint-Brieuc)
COLLECTION
PRÉPAS SCIENCES
ISBN 9782340-026346
© Ellipses Édition Marketing S.A., 2018
32, rue Bargue 75740 Paris cedex 15
"WBOUQSPQPT
Nicolas NGUYEN
III
BB
I BASE DE CONNAISSANCE 1
1 Types d’objets en Python Sommaire
Nombres, listes, t-uplets, chaînes de caractères, ensembles k
2
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . d
Listes en Python . . . . . . . . . . . . . . . . . . . . . . Ry
V
Résolution d’un système triangulaire . . . . . . . . . . . Rkk
VI
17 Gauss-Legendre 202
p
Partie 3. Algorithmes de deuxième année
VII
18. Probabilités ....................................................................................... 207
Simulation des lois classiques ............................................................. 207
Comparaison des lois binomiale et de Poisson ................................... 210
Illustration de la loi faible des grands nombres .................................. 212
19. Calculs matriciels ..............................................................................215
Quelques opérations de base sur les matrices .................................... 215
Valeur propre de plus grand module ................................................... 216
Exponentielle de matrice .................................................................... 218
20. Piles ....................................................................................................221
Création de la classe Pile .................................................................... 221
Quelques fonctions utilisant les piles ................................................. 223
Index
VIII
1SFNJÒSF QBSUJF
Partie 1
Base de connaissance
Ordinateur
Le mot ordinator existait déjà en latin. Chez les Romains,
il désignait celui qui met en ordre, qui règle ou qui préside à
la remise en ordre. Les premiers Chrétiens l’utilisaient pour
nommer celui qui dirige les cérémonies : c’est pourquoi on
LE SAVIEZ-VOUS ?
Tous les objets que manipule P YTHON ont un type défini à la fois
par l’espace mémoire utilisé pour le stocker mais également par les
règles de représentation, d’opération ou encore de construction qui
s’y appliquent.
Types simples
Types composés
Comme leur nom l’indiquent, ces objets sont des collections d’objets
simples.
• On peut déterminer si un objet simple appartient ou non à un
objet composé au moyen de la relation « a in A » qui renvoie un
booléen. Ces objets composés des itérables.
k
2
Base de connaissance
• Lorsque ces objets composés sont ordonnés, on peut accéder di-
rectement à leurs composants à l’aide de « (F) » qui renvoie l’élé-
ment de rang k. Ils sont alors dits indexables.
• Finalement, si on peut directement modifier les objets simples qui
les composent, on dit qu’ils sont mutables.
Le tableau ci-dessous donne les types composés les plus fréquem-
ment utilisés.
list une liste est un objet mutable, indexable, itérable
tuple un t-uplet est non mutable, indexable, itérable
une chaîne de caractères est non mutable, indexable,
str
itérable
un ensemble est non mutable, non indexable mais
set
itérable
Les tableaux ci-dessous résument les différents opérateurs sur les ob-
jets simples : opérations arithmétiques, comparaisons, constructions
ou conversions.
Opérations
j
3
Comparaisons et opérations logiques
Conversions
Définitions
9
4
Base de connaissance
parenthèses (ou rien). Par exemple U- #- +V et /- 2- 7 sont des t-uplets.
Les t-uplets sont itérables, indexables mais non mutables.
• Un ensemble est une collection d’objets séparés par des virgules
et encadrée par des accolades. Ainsi, &- #- +' est un ensemble.
Dans un ensemble, ni l’ordre, ni les répétitions éventuelles des élé-
ments ne changent l’ensemble. Les ensembles sont itérables mais
non indexables et non mutables.
• Une chaîne de caractère est une suite de caractères quelconques
encadrée par une paire de simples ou de doubles guillemets. Par
exemple, Ǵ # +Ǵ et Ƕ/ 2 7Ƕ sont des chaînes de caractères. Comme les
listes, les chaînes de caractères sont itérables, indexables mais non
mutables.
Les objets séquentiels que sont les listes, les t-uplets et les chaînes,
sont toujours indexés à partir de 0. (y) désigne le premier élément
de la séquence, (R) le deuxième, etc.
Opérations
8
5
Comparaisons entre objets
Constructions et conversions
e
6
Base de connaissance
7BSJBCMFT
Avant d’utiliser une variable , il faut toujours lui donner une valeur
initiale. Pour attribuer une valeur à une variable, on utlise l’opérateur
d’affectation, noté « 4 » en P YTHON.
>>> a = 10
d7
>>> x = 1
>>> x = x + a
Affectations simultanées
Comme une variable représente un objet d’un certain type, tous les
opérateurs rencontrés (opérations, comparaisons, constructions ou
conversions) s’appliquent également aux variables de ce même type.
On appelle expression toute opération composée qui met en jeu va-
riables et constantes. Lorsque les composants sont de même type et
les opérations bien définies, l’expression finale garde le même type.
Lorsque les constantes et les variables sont de types hétérogènes,
l’expression prend le type minimal dans lequel toutes les opérations
sont compatibles.
3
8
Base de connaissance
x += y équivaut à l’affectation t 4 t Y v
x -= y équivaut à l’affectation t 4 t @ v
x *= y équivaut à l’affectation t 4 t v
x **=y équivaut à l’affectation t 4 t v
x /= y équivaut à l’affectation t 4 t f v
x //= y équivaut à l’affectation t 4 t ff v
x %= y équivaut à l’affectation t 4 t W v
N
9
-JTUFT FO 1ZUIPO
.PEFT EF DPOTUSVDUJPO
(L[i][j]) 0in−1
0jm−1
Ry
10
Base de connaissance
L = [ [ e x p r [ j ] f o r j i n r a n g e (m) ] f o r i i n r a n g e ( n ) ]
RR
11
.PEJmDBUJPOT EhVOF MJTUF
Avant de modifier une liste G, il est parfois utile de créer une copie
de celle-ci, c’est-à-dire une nouvelle liste qui contient les mêmes élé-
ments que G.
Rk
12
Base de connaissance
1SPHSBNNBUJPO FO 1ZUIPO
/PUJPO EF QSPHSBNNF
4ÏRVFODFT EhJOTUSVDUJPOT
Rj
13
En P YTHON, on groupe les instructions à l’aide de l’indentation (dé-
calage par rapport à la marge de gauche). Deux instructions de même
profondeur logique doivent avoir la même indentation.
en−t ê t e 1 :
instruction
en−t ê t e 2 :
instruction
...
instruction
instruction
instruction
*OTUSVDUJPOT DPOEJUJPOOFMMFT
Test simple
Test imbriqués
R9
14
Base de connaissance
i n s t r u c t i o n ou b l o c d ’ i n s t r u c t i o n s
...
e l i f condition n :
i n s t r u c t i o n ou b l o c d ’ i n s t r u c t i o n s
else :
i n s t r u c t i o n ou b l o c d ’ i n s t r u c t i o n s
Expressions conditionnelles
P YTHON offre la possibilité de former des expressions dont l’évalua-
tion est soumise à une condition. La syntaxe est la suivante :
expression1 i f condition else expression2
4USVDUVSFT JUÏSBUJWFT
R8
15
while c o n d i t i o n :
bloc d ’ i n s t r u c t i o n s i condition est vraie
Remarques :
• Si condition est fausse dès le départ, le bloc qui suit n’est jamais
parcouru.
• Dans la plupart des cas, le bloc qui suit l’instruction d’en-tête
r?BH2 agit sur la condition, de sorte que celle-ci, vraie au départ,
devient fausse et provoque la sortie de la boucle.
• Lorsqu’on utilise une boucle conditionnelle, la question de sa ter-
minaison après un nombre fini d’itérations se pose systématique-
ment.
&OUSÏFT TPSUJFT
Re
16
Base de connaissance
'PODUJPOT FU NPEVMFT
'PODUJPOT
Rd
17
tation (optionnelle), puis le corps de la fonction. Le mot-clé `2im`M
interrompt le déroulement de la fonction et renvoie la valeur précisée.
On peut également définir une fonction de façon plus succincte à
l’aide du mot-clé lambda lorsqu’elle est définie par une expression
simple, comme une fonction mathématique.
f=lambda x :3∗ x ∗∗2−6∗x−12
est équivalent à :
def f ( x ) :
r e t u r n ( 3 ∗ x ∗∗2−6∗x −12)
Variables locales
Fonctions récursives
R3
18
Base de connaissance
else :
r e t u r n ( n∗ f a c t o ( n −1))
.PEVMFT FU QBDLBHFT
RN
19
charge tous les noms (fonctions,
import module
constantes) du module
on peut utiliser la fonction du
module.fonction
module avec ce préfixe
charge tous les noms du module
import module as md et lui donne un nom plus court
(alias)
on peut utiliser sous ce nom la
md.fonction
fonction du module
on peut directement utiliser la
from module import fonction
fonction sans préfixe
on peut utiliser directement
from module import * toutes les fonctions du module
sans préfixe
ky
20
Base de connaissance
permet d’évaluer le temps d’exécution de chaque
profile
fonction dans un programme
interface Python avec Tk qui permet de créer des
tkinter
objets graphiques
pygame permet de créer une interface graphique avec Python
'PODUJPOT OBUJWFT
kR
21
range(n,m,p) construit un intervalle de valeurs
arrondit au nombre le plus proche à une précision
round(x,p)
donnée
set(x) convertit un objet en ensemble
sorted(x) crée une copie triée d’un iterable
str(ch) convertit en chaîne de caractères
calcule la somme des élément d’une séquence de
sum(x)
nombres
type(x) type d’un objet
kk
22
Base de connaissance
cosh(x)
cosh(x) cosinus
cosinushyperbolique
hyperboliqued’un
d’unnombre
nombre
sinh(x)
sinh(x) sinus
sinushyperbolique
hyperboliqued’un
d’unnombre
nombre
tanh(x)
tanh(x) tangente
tangentehyperbolique
hyperboliqued’un
d’unnombre
nombre
pi
pi constante
constanteππ
e constante
constanteee
4QÏDJmDBUJPO
4QÏDJmDBUJPO UFSNJOBJTPO
UFSNJOBJTPO DPSSFDUJPO
DPSSFDUJPO DPNQMFYJUÏ
DPNQMFYJUÏ
1SFVWF
1SFVWF EF
EF QSPHSBNNF
QSPHSBNNF
Faire
Faire une
une preuve
preuvede
deprogramme
programmeconsiste
consisteààvérifier
vérifierque
queleleprogramme
programme
s’applique
s’applique dans
danstous
tousles
lescas
casprévus
prévusetetconduit
conduitenentemps
tempsfini
finiauaurésultat
résultat
attendu.
attendu.
Une
Une preuve
preuve de
de programme
programmerepose
reposesur
surplusieurs
plusieursétapes
étapesdécrites
décritesbriè-
briè-
vement
vement ci-après.
ci-après.
• Spécification
Spécification
• Terminaison
Terminaison
• Correction
Correction
• Complexité
Complexité
4QÏDJmDBUJPO
4QÏDJmDBUJPO
Un programme
programme ou ou une
une fonction
fonctionenenPPYTHON
YTHONressemble
ressembleà àune unefonc-
fonc-
tion
tion mathématique
mathématique comprenant
comprenantun unensemble
ensembledededépart,
départ,ununensemble
ensemble
d’arrivée,
d’arrivée, et
et un
un procédé
procédé qui
quitransforme
transformetout
toutélément
élémentdedel’ensemble
l’ensemble
de départ
départ en
en un
un élément
élémentde del’ensemble
l’ensembled’arrivée.
d’arrivée.
La spécification
spécificationd’und’unprogramme
programmeou oud’une
d’unefonction
fonctionconsiste
consisteà àdécrire
décrire
le problème
problème qu’il
qu’il doit
doitrésoudre,
résoudre,lelecalcul
calculààeffectuer,
effectuer,etetdans
dansquelles
quelles
conditions
conditions ilil doit
doitlelefaire.
faire.Plus
Plusprécisément,
précisément,lalaspécification
spécificationindique
indique: :
• quelles
quelles sont
sont les
lesdonnées
donnéesen enentrée
entrée(leur
(leurtype
typenotamment),
notamment),qu’elles
qu’elles
soient
soient saisies
saisies par
par l’utilisateur
l’utilisateurou
oupassée
passéeenenparamètre
paramètrelors
lorsdedel’appel
l’appel
d’une
d’une fonction
fonction;;
kj
kj
23
• quelles sont les valeurs attendues en retour, leur type et à quoi elles
correspondent.
5FSNJOBJTPO
$PSSFDUJPO
k9
24
Base de connaissance
• si elle est vérifiée avant une itération, elle est aussi vérifiée après
celle-ci ;
• le fait qu’elle soit vérifiée en sortie de boucle, garantit que le pro-
gramme est correct.
$PNQMFYJUÏ
k8
25
Complexité
Le nombre d’opérations à effectuer dans un programme augmente
avec le nombre de données à traiter. Pour savoir si un programme
est efficace, il est intéressant de connaître le rapport entre le nombre
de données et le nombre d’opérations surtout lorsque le nombre de
données devient important.
Soit n le nombre de données d’un programme et f (n) une fonction
de n. On dit que la complexité d’un programme est un O(f (n)) si
son coût (en terme de nombre d’OPEL) est inférieur à C.f (n), où C
est une constante indépendante de n.
Le tableau ci-dessous indique un ordre de grandeur des temps d’exé-
cution d’un problème de taille n = 106 sur un ordinateur à un mil-
liard d’opérations par seconde.
ke
26
Base de connaissance
1ZUIPO QPVS MhJOHÏOJFSJF
OVNÏSJRVF FU MB TJNVMBUJPO
P YTHON propose non pas des tableaux mais des listes : elles peuvent
contenir des objets de types divers (on dit qu’elles sont hétérogènes)
et de taille variable.
Le type nd.array de N UM P Y est constitué de « vrais » tableaux :
homogènes et de taille fixe. Ainsi, leur manipulation est optimisée et
beaucoup plus efficace que celle des listes.
Pour des raisons de lisibilité, on suppose que N UMPY a été importé
par :
from numpy import ∗
kd
27
crée un tableau de n lignes, m colonnes avec tous
ones((n,m))
les coefficients égaux à 1
identity(n) crée la matrice identité d’ordre n
analogue à `M;2 mais renvoie un tableau de type
arange(n,m,p)
M/``v
renvoie une subdivision régulière de [x, y] en n élé-
linspace(x,y,n)
ments régulièrement espacés
Type de tableau
k3
28
Base de connaissance
Le type de tableau est choisi par la fonction ``v en fonction des
coefficients lors de la conversion. Pour les autres procédés de construc-
tion, on peut imposer le type de tableau en ajoutant le paramètre
optionnel /ivT24 ~Qi par exemple.
Les conventions pour l’accès aux éléments d’un tableau sont celles
des listes (voir p 11). En particulier, pour un tableau de dimension
2 à n lignes et m colonnes, les indices de ligne et de colonne varient
de 0 à n − 1 et de 0 à m − 1 respectivement.
kN
29
0QÏSBUJPOT
0QÏSBUJPOTTVS
TVSMFT
MFTUBCMFBVY
UBCMFBVY
Opérations
Opérations algébriques
algébriques
De façon
façon générale,
générale,les
lesopérations
opérationsalgébriques
algébriquesentre
entretableaux
tableauxdede
type
type
M/``v
M/``v s’entendent
s’entendentcoefficient
coefficientpar
parcoefficient.
coefficient.Ainsi
Ainsi
additionne
additionne terme
terme ààterme
termedes
destableaux
tableauxdedemême
même
A+B
A+B
taille
taille
A*B
A*B multiplie
multiplieterme
termeààterme
termedes
destableaux
tableauxdedemême
mêmetaille
taille
x*A multiplie partttous
multipliepar tousles coefficientsdede
lescoefficients
x+A
x+A ajoutettààtous
ajoute tousles coefficientsdede
lescoefficients
Attention :: L’opérateur
Attention L’opérateur**multiplie
multiplieterme
termeà àterme
termedeux
deuxtableaux
tableaux
de même
même dimension,
dimension, ilil ne
ne s’agit
s’agitpas
pasduduproduit
produitmatriciel
matricielauausens
sens
mathématique
mathématique du
duterme.
terme.
Statistiques
Statistiques élémentaires
élémentairessur
surun
untableau
tableau
Voici quelques
quelquesopérations
opérationsstatistiques
statistiquesqu’on
qu’onpeut
peutréaliser
réalisersursurununtableau
tableau
de nombres
nombres en en dimension
dimension1.1.Ces Cesopérations
opérationss’appliquent
s’appliquentégalement
également
aux tableaux
tableaux multidimensionnels.
multidimensionnels.IlIlfaut fautalors
alorschoisir
choisirununaxe axededecal-
cal-
cul, en
en rajoutant l’option-tBb4·
rajoutant l’option -tBb4·· · ·. .Par
Pardéfaut,
défaut,l’axe
l’axeestest0 0etetonon
tra-
tra-
vaillera
vaillera colonne
colonnepar
parcolonne.
colonne.
sum(a)
sum(a) retourne
retournelalasomme
sommedes élémentsdede
deséléments
prod(a)
prod(a) retourne
retourneleleproduit
produitdes élémentsdede
deséléments
max(a)
max(a) retourne
retournelelemaximum
maximumdes élémentsdede
deséléments
min(a)
min(a) retourne
retourneleleminimum
minimumdes élémentsdede
deséléments
mean(a)
mean(a) retourne
retournelalamoyenne
moyennedes élémentsdede
deséléments
var(a)
var(a) retourne
retournelalavariance
variancedes élémentsdede
deséléments
jy
jy
30
Base de connaissance
Fonctions universelles
jR
31
trace(A)
trace(A) trace
tracededelalamatrice
matricecarrée
carrée
transpose(A)
transpose(A) transposée
transposéedede
Résolution
Résolution d’un
d’unsystème
systèmed’équations
d’équationslinéaires
linéaires
solution
solutiondudusystème
systèmed’équations
d’équations
linéaires
linéaires
la.solve(A,B)
la.solve(A,B) (S)
(S) AX
AX= =
BB
Réduction
Réduction des
des matrices
matrices
la.eigvals(A)
la.eigvals(A) retourne
retourneles
lesvaleurs
valeurspropres
propres
dede
la la
matrice
matrice
carrée
carrée
retourne
retourne enenplus
plusleslesvecteurs
vecteurspropres
propres
(unitaires)
(unitaires)
la.eig(A)
la.eig(A)
associés
associés
"OBMZTF
"OBMZTFOVNÏSJRVF
OVNÏSJRVFBWFD
BWFD4DJQZ
4DJQZ
Résolution
Résolution numérique
numériqued’équations
d’équationsavec
avecoptimize
optimize
moduleoptimize
Le module optimizededeSSCICIPP
YYpermet
permetdede
calculer
calculer
desdes
valeurs
valeurs
approchées
approchées
des zéros
zéros d’une
d’unefonction.
fonction.
retourne
retourneune
unesolution
solutiondedel’équation
l’équation
f (x)
f (x)= =0, 0,
fsolve(f,a)
fsolve(f,a)
proche
prochededea.a.
Intégration
Intégration numérique
numériqueavec
avecintegrate
integrate
fonction quad
La fonction quaddu moduleintegrate
dumodule integratedede
S CI
SP CIYPpermet
Y permet
de de
cal-cal-
culer
culer de
de façon
façonapprochée
approchéedes
desintégrales.
intégrales.
retourne
retourneune unevaleur
valeurapprochée
approchéedede
l’intégrale
l’intégrale
de de
f f
quad(f,a,b)
quad(f,a,b)
entre
entreaaetetb b(qui
(quipeuvent
peuventêtre
être
infinis)
infinis)
jkjk
32
Base de connaissance
Équations
Équations différentielles
différentielles avec
avec integrate
integrate
On considère
considère le
le problème
problèmede
deCauchy
Cauchysuivant
suivant: :
yy (t)
(t) == ff(y(t),
(y(t),t)t)
(C)
y(t
y(t00)) == yy00
où y est une
une fonction
fonction àà valeurs
valeursréelles
réellesou
ouvectorielles.
vectorielles.
retourne
retourne des
des valeurs
valeurs approchées
approchéesdedelalasolution solutiondudu
odeint(f,y0,t)
odeint(f,y0,t)
problème
problèmede deCauchy
Cauchy(C). (C).
Ici, i est un
un tableau
tableau de
de valeurs
valeurs de
de lala forme
formett == [t[t0 ,0 t, 1t,1..., n ].La
, ...,tnt]. La
solution retournée
retournée correspond
correspond àà lala distribution
distributiondes desvaleurs
valeursappro-
appro-
chées de f aux
aux différents
différentsinstants
instantstt00,,tt11, ,. .. . ., ,tntn. .
4JNVMBUJPO
4JNVMBUJPO OVNÏSJRVF
OVNÏSJRVF BWFD
BWFDSBOEPN
SBOEPN
module `M/QK
Le module `M/QK de
de N
NUMPY
UMPY permet
permetde
deréaliser
réaliserdes
destirages
tiragesaléa-
aléa-
toires.
random()
random() choisit
choisit un
unréel
réelaléatoire
aléatoiredans
dans[0,
[0,1]1]
uniform(x,y)
uniform(x,y) choisit
choisit un
unréel
réelaléatoire
aléatoiredans
dans[x,
[x,y]y]
randrange()
randrange() choisit
choisit un
unentier
entieraléatoire dans`M;2UM-K-TV
aléatoiredans `M;2UM-K-TV
randint(n,m)
randint(n,m) choisit
choisit un
unentier
entieraléatoire
aléatoiredans
dans[[n,
[[n,m]]
m]]
choice(x)
choice(x) choisit
choisit un
unélément
élémentaléatoire
aléatoiredans
dansune
uneséquence
séquence
N UM P YY propose
propose également
également tout
tout un
un jeu
jeude
dedistributions
distributionsstandards.
standards.
Cette fois, sisi on
on veut
veutplusieurs
plusieursvaleurs,
valeurs,ononutilisera
utiliseral’argument
l’argumentoptionnel
optionnel
bBx2 4 · · · ..
normal(m,s)
normal(m,s) simule
simule une
uneloi
loinormale
normalede
deparamètre
paramètrem,
m,ss
binomial(n,p)
binomial(n,p) simule
simule une
uneloi
loibinomiale
binomialede
deparamètres
paramètresnnetetpp
geometric(p)
geometric(p) simule
simule une
uneloi
loigeometrique
geometriquede
deparamètre
paramètrepp
poisson(x)
poisson(x) simule
simule une
uneloi
loide
depoisson
poissonde
deparamètre
paramètrexx
jj
jj
33
(SBQIJRVFT BWFD NBUQMPUMJC
j9
34
Base de connaissance
#BTFT EF EPOOÏFT
FU BMHÒCSF SFMBUJPOOFMMF
"MHÒCSF SFMBUJPOOFMMF
j8
35
Les opérations ensemblistes sont :
• l’union R1 ∪ R2 de deux relations R1 (S) et R2 (S) est l’en-
semble des éléments appartenant à R1 ou à R2 ,
• l’intersection R1 ∩ R2 de deux relations R1 (S) et R2 (S) est
l’ensemble des éléments appartenant à la fois à R1 et à R2 ,
• la différence R1 \ R2 de deux relations R1 (S) et R2 (S) est
l’ensemble des éléments appartenant à R1 mais pas à R2 .
Les opérations relationnelles sont :
• la sélection σC (R1 ) est l’ensemble des éléments de R1 (S)
satisfaisant la condition logique C,
• la projection πA1 ,...,Am de la relation R1 (S) est l’ensemble
des éléments obtenus par projection ensembliste de R1(S) sur
dom(A1 ) × · · · × dom(Am ),
• le produit cartésien R1 × R2 de deux relations R1 (S1 ) et
R2 (S1 ) est l’ensemble {(x1 , x2 ), x1 ∈ R1 , x2 ∈ R2 },
• la jointure R1 [C]R2 de deux relations R1 (S1 ) et R2 (S1 ) est
l’ensemble des éléments du produit R1 × R2 satisfaisant la
condition C,
• la division R1 ÷ R2 de deux relations R1 (S1 ) et R2 (S2 ) telles
que S2 = (A1 , . . . , Am ) et S1 = (A1 , . . . , Am , Am+1 , . . . , An )
est l’ensemble des éléments x images par la projection de R1
sur (Am+1 , . . . , An ) tels que le produit {x} × R2 soit inclus
dans R1 .
$PNNBOEFT 42-
je
36
Base de connaissance
permet d’effectuer l’intersection R1 ∩ R2 des élé-
INTERSECT ments de deux tables R1 (S) et R2 (S) de même
schéma relationnel
permet d’effectuer la différence ensembliste R1 \R2
EXCEPT des deux tables R1 (S) et R2 (S) de même schéma
relationnel
On peut en fait effectuer en SQL ces opérations si les schémas rela-
tionnels des deux relations sont différents, à condition qu’elles aient
le même nombre d’attributs et des domaines identiques. On dit alors
que les schémas sont identiques.
Opérations complexes
permet d’effectuer le produit cartésien R1 × R2 de
JOIN
deux relations R1 et R2 .
jd
37
située après un JOIN, et suivie d’une condition C,
elle permet d’effectuer la jointure R1 [C]R2 des
ON deux tables considérées c’est à dire de ne garder
dans le produit cartésien que les éléments satisfai-
sant C.
suivie de A1 , . . . , Am et si on a indi-
qué A1 , . . . , Am , f (Am+1 , . . . , An ) comme
GROUP BY attributs après le SELECT, cette instruction
effectue l’aggrégation γ(Am+1 , . . . An ) →
f (Am+1 , . . . , An )
La division cartésienne R1 ÷ R2 n’a pas de réalisation immédiate
en SQL et nécessite une combinaison des commandes présentées ci-
dessus pour être réalisée.
On signale également la commande DISTINCT qui, placée directe-
ment après SELECT, permet de ne garder qu’une seule occurence de
chaque élément dans la table.
On présente enfin quelques unes des fonctions pouvant être utilisées
dans les aggrégations.
Fonctions d’aggrégation
compte les éléments. On peut l’utiliser suivie de
COUNT DISTINCT pour éviter de compter plusieurs fois les
mêmes éléments
MAX donne le maximum des éléments
MIN donne le minimum des éléments
SUM donne la somme des éléments
AVG donne la moyenne des éléments
j3
38
%FVYJÒNF QBSUJF
Partie 2
Algorithmes
de première année
Informatique
Le mot informatik fut créé par l’ingénieur allemand Karl
Steinbuch en 1957. C’est ce qu’on appelle un mot-valise
c’est-à-dire obtenu comme contraction de deux mots ;
dans ce cas, il s’agissait des mots information et automatique.
LE SAVIEZ-VOUS ?
Étant donné une suite (�k )k∈N de nombres réels, on peut calculer les
sommes ou produits finis :
m
m
S(n, m) = �k et P (n, m) = �k ,
k=n k=n
-FT BMHPSJUINFT
Fonction Somme( L , n ,m)
Donnees
L : l i s t e de r é e l s
S : réel
k , n ,m : e n t i e r s
Debut
S <−− 0
Pour k v a r i a n t de n à m
Faire
S <−− S + L [ k ]
Fin F a i r e
Retourner ( S )
Fin
Fonction P r o d u i t ( L , n ,m)
Donnees
L : l i s t e de r é e l s
P : réel
k , n ,m : e n t i e r s
Debut
9y
40
P <−− 1
Pour k v a r i a n t de n à m
Faire
P <−− P ∗ L [ k ]
Fin F a i r e
Retourner (P)
Fin
Sk+1 = Sk + �k .
9R
41
La propriété Pk+1 est vérifiée.
• Conclusion : Lors du dernier passage en boucle, Sm est égal à
m−1
�i . À l’issue de ce dernier passage, la valeur retournée est
i=n
m
Sm+1 = �i .
i=n
def P r o d u i t ( L , n ,m) :
P=1
f o r k i n r a n g e ( n ,m+1) :
P=P∗L [ k ]
r e t u r n (P)
#PÔUF Ë PVUJMT
cette fonction prédéfinie de
sum(L) P YTHON calcule la somme des
éléments d’une liste
calcule leur produit, mais
prod(L) il s’agit d’une fonction de
N UMPY.
9k
42
1VJTTBODFT EhVO SÏFM
-hBMHPSJUINF OBÕG
Fonction P u i s s a n c e _ n a i f ( a , n )
Donnees
a ,P : r e e l s
k,n : entiers
Debut
P <−− 1
Pour k v a r i a n t de 1 à n
Faire
P <−− P ∗ a
Fin F a i r e
Retourner (P)
Fin
9j
43
Correction : On note pour tout entier naturel k 0, Pk la valeur
de la variable S après k passages en boucle. On vérifie qu’un inva-
riant de boucle est ici :
(Pk ) Pk = ak
-F QSPHSBNNF FO 1ZUIPO
def P u i s s a n c e _ n a i f ( a , n ) :
P=1
for k in range (n) :
P=P∗ a
r e t u r n (P)
-hBMHPSJUINF SBQJEF
Fonction P u i s s a n c e _ r a p i d e ( a , n )
Donnees
a, b, P : reels
k , n ,m : e n t i e r s
Debut
P <−− 1
b <−− a
m <−− n
Tant que m>0
Faire
S i m%2=1
A l o r s P <−− P ∗ b
b <−− b∗b
m <−− m//2
Fin F a i r e
Retourner (P)
Fin
99
44
Notation : dans cet algorithme, nous avons noté KWk et Kffk le
reste et le quotient de la division euclidienne de m par 2.
Analyse de cet algorithme :
Spécification : C’est évidemment la même que celle de la pré-
cédente fonction SmBbbM+2nMB7.
Terminaison : Notons pour tout entier k 0, Pk ,bk , mk les
valeurs des variables informatiques S, #, K après k passages en boucles.
On observe que pour tout entier k, mk+1 est le quotient dans la divi-
• Initialisation : Lorsque k = 0, P0 = 1, b0 = a et m0 = n, de
sorte que P0 × bm
0 =1×a =a .
0 n n
98
45
La valeur retournée est bien égale à an .
Complexité : Chaque passage en boucle nécessite ici 9 OPEL
-F QSPHSBNNF FO 1ZUIPO
def P u i s s a n c e _ r a p i d e ( a , n ) :
P=1
b=a
m=n
w h i l e m>0 :
i f m%2==1 :
P=P∗b
b=b∗b
m=m//2
r e t u r n (P)
#PÔUF Ë PVUJMT
retourne la valeur de x à la puis-
pow(x,y) sance y, avec x > 0 et y des
réels.
x**y idem en version plus pratique
9e
46
²WBMVBUJPO QPMZOPNJBMF
-hBMHPSJUINF OBUVSFM
9d
47
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée la liste des coef-
ficients d’un polynôme P rangée suivant les puissances croissantes
et un réel x. Elle renvoie la valeur de P (x).
Terminaison : Il s’agit d’une boucle inconditionnelle. Elle ter-
mine après n + 1 itérations.
Correction : Notons Sk et puissk les valeurs des variables a et
93
48
-F QSPHSBNNF FO 1ZUIPO
def E v a l u e r _ p o l y n o m e (A , x ) :
n= l e n (A)
p u i s s =1
S=0
for k in range (n) :
S=S+A [ k ] ∗ p u i s s
p u i s s=x ∗ p u i s s
return (S)
vérifie un = P (x).
Fonction Horner_polynome (A , x )
Donnees :
A : l i s t e de r é e l s ( c o e f f i c i e n t s du polynôme )
x , S, puiss : réels
n , k : entiers ,
Debut
n <−− L o n g u e u r (A)−1 # A = [a0 , a1 , . . . , an ]
u <−− A [ n ]
Pour i v a r i a n t de n−1 à 0
Faire
u <−− A [ i ] + x ∗ u
Fin F a i r e
Retourner ( u )
Fin
9N
49
Analyse de cet algorithme :
Terminaison : La boucle inconditionnelle s’arrête après n itéra-
tions.
Correction : Notons uk la valeur de la variable informatique m
après k passages en boucle. Un invariant de boucle est :
uk+1 = an−k−1 + x × uk
= an−k−1 + x × an−k + an−k+1 x1 + · · · + an xk
= an−k−1 + an−k x1 + an−k+1 x2 + · · · + an xk+1
-F QSPHSBNNF FO 1ZUIPO
def Horner_polynome (A , x ) :
n=l e n (A)−1
u=A [ n ]
f o r i i n r a n g e ( n−1,−1,−1) :
u= A [ i ]+ x ∗u
return (u)
8y
50
1SPHSBNNFS BWFD MFT FOUJFST
%JWJTJPO FVDMJEJFOOF
-hBMHPSJUINF
(Pk ) rk 0 et a = b × qk + rk .
8R
51
La suite (rk ) est une suite d’entiers naturels strictement décroissante,
elle est donc nécessairement finie. Par conséquent, il existe k tel que
rk < b. On note n le plus petit entier avec cette propriété.
Correction : Une récurrence facile permet de montrer que pour
tout k ∈ [[0, n]] Pk est vraie.
De plus, à l’issue de la boucle, on a à la fois la condition d’arrêt
rn < b et l’invariant Pn , ce qui revient exactement à dire que a =
b × qn + rn et 0 rn < b
Complexité : Le nombre d’opérations élémentaires est de l’ordre
a
de � ab � : N = 3 + 3 × � �.
b
-F QSPHSBNNF FO 1ZUIPO
def D i v i s i o n _ e u c l i d i e n n e ( a , b ) :
q=0
r=a
w h i l e r>=b :
q=q+1
r=r−b
return (q , r )
#PÔUF Ë PVUJMT
8k
52
5FTU EF QSJNBMJUÏ TJNQMF
-hBMHPSJUINF
Fonction E s t _ p r e m i e r ( n )
Donnees
prem : b o o l é e n
k,n : entiers
Debut
prem <−− V r a i
3n − 4.
On peut surtout noter le manque d’efficacité de cet algorithme, qui,
pour conclure que n = 1024 n’est pas premier, devra effectuer 3068
OPEL, alors que dès la première itération, il apparaît que n étant pair,
il n’est pas premier !
L’utilisation d’une boucle conditionnelle permet d’améliorer ceci :
Fonction E s t _ p r e m i e r 2 ( n )
Donnees
prem : b o o l é e n
k,n : entiers
8j
53
Debut
k <−− 2
prem <−− V r a i
Tant que ( Prem e s t V r a i et k<n )
Faire
Si k d i v i s e n
A l o r s prem <−− Faux
Fin S i
k <−− k+1
Fin F a i r e
Retourner ( prem )
Fin
-F QSPHSBNNF FO 1ZUIPO
def E s t _ p r e m i e r 2 ( n ) :
k=2
prem=True
w h i l e ( prem and k<n ) :
i f n%k == 0 :
prem=F a l s e
k=k+1
r e t u r n ( prem )
89
54
n = pα1 1 × pα2 2 × · · · × pαNN .
-hBMHPSJUINF
Fonction D e c o m p o s i t i o n _ p r i m a i r e ( n )
88
55
[ étant divisée par 2 au minimum à chaque passage en boucle prin-
cipale, on a qk+1 < qk . Cette suite strictement décroissante d’entiers
positifs et donc nécessairement finie.
Correction : Notons diviseursk la valeur de la variable /BpB@
b2m`b après k passages en boucle principale. Notons Pk la propriété
diviseurk est la liste des k plus petits diviseurs premiers de n.
• Initialisation : Avant d’entrer dans la boucle principale, /BpBb2m`b
est la liste vide. Autrement dit, diviseurs0 est la liste des 0 plus
petits diviseurs premiers de n.
• Hérédité : Soit k ∈ N tel que Pk est vraie. Au cours du k + 1ième
passage, on détermine le plus petit diviseur supérieur à 2 de qk .
Comme il est plus petit diviseur de qk , il est nécessairement pre-
mier et il divise n. C’est donc le plus petit diviseur premier de n en
dehors de la liste diviseursk , soit le k + 1ième diviseur premier de n
dans l’ordre croissant. Ainsi, en le rajoutant à la liste diviseursk on
obtient bien la liste des k + 1 plus petits diviseurs premiers de n.
• Conclusion : En sortie de boucle, on a [4R. La liste /BpBb2m`b
contient bien la liste de tous les diviseurs premiers de n rangés dans
l’ordre croissant.
Complexité : La complexité de cet algorithme est un problème
-F QSPHSBNNF FO 1ZUIPO
def D e c o m p o s i t i o n _ p r i m a i r e ( n ) :
q=n
d i v i s e u r s =[]
w h i l e q>1 :
i =2
r=q%i
w h i l e ( r >0 and i <q ) :
i=i +1
r=q%i
d i v i s e u r s=d i v i s e u r s +[ i ]
q=q // i
return ( d i v i s e u r s )
8e
56
$BMDVM
$BMDVM EV
EV 1($%
1($% EF
EF EFVY
EFVYFOUJFST
FOUJFST
Soit (a, b) ∈∈ N
(a, b) N22.. L’algorithme
L’algorithmed’Euclide
d’Euclidepermet
permetdededéterminer
déterminerle le
plus grand
grand entier,
entier, diviseur
diviseurcommun
communà àaaetetb,b,noté
notéPP
GCD(a,
GCD(a, b).b).Il Il
repose sur
sur le
le fait
faitsuivant
suivant: :
Lemme d’Euclide :: Lorsqu’on
Lemme d’Euclide Lorsqu’oneffectue
effectuelaladivision
divisioneuclidienne
euclidiennedede
a par b,
b, aa =
= bq
bq + avec00rr<<b,b,on
+r,r,avec ona a: :
PPGCD(a,
GCD(a,b)b)==PPGCD(b,
GCD(b,r)r)
-hBMHPSJUINF
-hBMHPSJUINF
Fonction PGCD(
Fonction PGCD(aa,,bb))
Donnees aa ,,bb,, uu,, vv, , ww : : eennt ti ei er sr s
Donnees
Debut
Debut
u <−−
<−− maxmax((aa,,bb))
v <−−
<−− minmin((aa,,bb))
w <−−
<−− u%vu%v # # rreessttee de
de l al a DE
DE dede u u p p a ra r v v
que ww >
Tant que > 00
FFaaiirree
uu <−−−
<−−− vv
vv <−−−
<−−− ww
w
w <−−−
<−−− u%v u%v # # rreesst tee dede l al a DE DE dede u u p apra rv v
Fin
Fin FFaaiirree
Retourner((vv))
Retourner
Fin
Analyse
Analyse de
de cet
cet algorithme
algorithme: :
Spécification :: La
Spécification fonctionS:*.U-#V
Lafonction S:*.U-#Vprend
prendenenentrée
entréedeux
deux
entiers
entiers
naturels
naturels aa et
et bb et
etretourne
retourneleur
leurPGCD.
PGCD.
Terminaison :: Notons
Terminaison Notonsuukk, ,vvkketetwwk kles
lesvaleurs
valeursdes
desvariables m, m,
variables pp
et r après
après kk passages
passagesdans
danslalaboucle.
boucle.On Ona aparparconstruction
construction: :
8d
8d
57
⎧
⎨ uk = vk−1
v = wk−1 .
⎩ k
wk est le reste de la DE de uk par vk
-F QSPHSBNNF FO 1ZUIPO
def PGCD( a , b ) :
i f a>b :
u=a
v=b
83
58
else :
u=b
v=a
w=u%v # r e s t e de l a DE de a p a r b
w h i l e w>0 :
u=v
v=w
w=u%v # r e s t e de l a DE de u p a r v
return ( v )
8N
59
obtenus successivement. Alors n admet la représentation en base b :
n = (ap · · · a1 a0 )b
-hBMHPSJUINF
Fonction C o n v e r s i o n ( n , b )
Debut
c h i f f r e s <−− "0123456789ABCDE"
L <−− " " #c h a î n e de c a r a c t è r e v i d e
q <−− n
Tant que q �= 0
Faire
r <−− q%b #r e s t e de l a DE de q p a r b
q <−− q // b #q u o t i e n t de l a DE de q p a r b
L <−− c h i f f r e s [ r ] + L
Fin f a i r e
Retourner ( L )
fin
ey
60
• Initialisation : avant d’entrer en boucle (k = 0), q0 = n =
(ap · · · a0 )b et L est vide.
• Hérédité : Soit k 0 tel que Pk . À l’entrée du k +1ième passage
en boucle, on a
qk = (ap · · · ak )b
Lk = Ǵak−1 . . . a1 a0 Ǵ
Lp+1 = Ǵap . . . a1 a0 Ǵ.
bp n < bp+1 .
On en déduit successivement
que p HQ;b (n) < p + 1, puis que
HM(n)
p = �HQ;b (n)� = .
HM(b)
Finalement, le nombre d’OPEL dans cet algorithme de conversion
s’évalue à 6p + 10, où p est de l’ordre de HM(n).
-F QSPHSBNNF FO 1ZUIPO
def C o n v e r s i o n ( n , b ) :
a s s e r t b <17 , " b d o i t ê t r e i n f é r i e u r à 16 "
c h i f f r e s =" 0123456789ABCDE"
eR
61
L=" " #c h a î n e de c a r a c t è r e v i d e
q=n
w h i l e q !=0 :
r=q%b #r e s t e de l a DE de q p a r b
q=q // b #q u o t i e n t de l a DE de q p a r b
L= c h i f f r e s [ r ]+L
return (L)
#PÔUF Ë PVUJMT
cette fonction prédéfinie re-
bin(n) tourne l’écriture de l’entier M en
binaire
cette fonction prédéfinie re-
oct(n) tourne l’écriture de l’entier M en
octal
cette fonction prédéfinie re-
hex(n) tourne l’écriture de l’entier M en
hexadecimal
-hBMHPSJUINF
Fonction E c r i t u r e _ d e c i m a l e ( L , b )
Données
L : c h a î n e de c a r a c t è r e s
c h i f f r e s : l i s t e de c a r a c t è r e s
b ,B, n , p , k , v a l : e n t i e r s
ek
62
Debut
c h i f f r e s <−−
<−− [[""00"" ,,""11"" ,,""22"" ,,""33"",,""44"", ,""55"", ,""66"", ,""77"", ,""88"", ,
""99"",,"A"
"A",,"B" "B", ,""CC"", ,"D"
"D", ,""EE""] ]
p <−− L o n gguueeuurr ((LL))
B <−−1
n <−− 0
Pour k v a rr ii aa nn tt de de p−1 p−1 àà 00
Faire
#r e c h ee rr cc hheerr LL[[ kk]] dans
d an s lleess cchhi iffffrreess
v a l =0
Analyse de cet
cet algorithme
algorithme ::
Spécification :: La
Spécification fonction1+`Bim`2n/2+BKH2
La fonction 1+`Bim`2n/2+BKH2prend prendenenentrée
entrée
un entier naturel
naturel bb ∈
∈ [[2, 16]] et
[[2,16]] et une
unechaîne
chaîneLLformée
forméededechiffres
chiffrespour
pour
la base b. Elle retourne
retourne en en sortie
sortie l’entier
l’entier naturel
naturelnnqui
quiaaLLcomme
comme
écriture en base
base b.
b.
Terminaison :: Les
Terminaison Les deux
deux boucles
bouclessont
sontindexées
indexéespar
pardes
desentiers
entierskk
et val qui ne peuvent
peuvent prendre
prendre qu’un
qu’un nombre
nombrefinifinide
devaleurs.
valeurs.Elles
Ellessese
terminent donc.
donc.
Correction :: Notons
Notons pourpour ii 0,
0, nnii lala valeur
valeur de
de lala variable
variable
informatique MM après
après ii passages
passages dans
dans lala boucle
boucle principale.
principale.Un Unin-
in-
variant de boucle
boucle est
est la
la propriété
propriété ::
i−1
i−1
(P
(Pii)) nnii =
= aai−1
i−1 bb +······++aa00bb00. .
+
En sortie de boucle,
boucle, après
après pp passages,
passages, on
onaabien
biennnpp ==aap−1 p−1
p−1bb
p−1++
· · · + a0 b00 = n.
n.
ej
ej
63
Complexité : Le nombre de passages en boucle principale est
égal à p et le nombre d’itérations dans la boucle secondaire est au
maximum égal à b. Ainsi, le nombre d’OPEL dans cet algorithme
s’évalue à 4pb + 5p + 5, où p est la longueur de la liste L.
-F QSPHSBNNF FO 1ZUIPO
def E c r i t u r e _ d e c i m a l e ( L , b ) :
c h i f f r e s =[ " 0 " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " ,
" 9 " , "A" , "B" , "C" , "D" , "E" ]
p=l e n ( L )
B=1
n=0
f o r k i n r a n g e ( p−1,−1,−1) :
v a l =0
w h i l e L [ k ] != c h i f f r e s [ v a l ] :
v a l=v a l +1
n=n+v a l ∗B
B=b∗B
return (n)
#PÔUF Ë PVUJMT
fonction native de P YTHON,
int(ch,b) retourne l’entier représenté en
base # par la chaîne +?.
e9
64
3FDIFSDIF EhÏMÏNFOU
EBOT VOF MJTUF
-hBMHPSJUINF
Fonction A p p a r t i e n t ( a , L )
Donnees
L : l i s t e de r é e l s
a : valeur recherchée
k, n : entiers
trouve : booléen
Debut
n <−− L o n g u e u r ( L )
t r o u v e <−− f a u x
Pour k v a r i a n t de 0 à n−1
Faire
Si L [ k ] = a
A l o r s t r o u v e <−− v r a i
Fin S i
Fin F a i r e
Retourner ( t r o u v e )
Fin
e8
65
Terminaison : La terminaison ne pose ici aucun problème puis-
qu’il s’agit d’une boucle inconditionnelle.
Correction : Un invariant de boucle est ici « Après k passages
dans la boucle i`Qmp2 est vrai si l’élément a a été trouvé et faux sinon
».
Complexité : Pour chaque passage en boucle, il y a un test et
éventuellement une affectation. Compte tenu de l’intialisation et du
retour de résultat, le nombre d’OPEL est donc 3n + 3, où n est la
longueur de la liste.
On peut noter ici que l’efficacité n’est pas optimale puisque si l’élé-
ment a a été trouvé dès le premier élément de la liste, il faudra par-
courir l’ensemble de la liste pour retourner le résultat !
L’utilisation d’une boucle conditionnelle permet de remédier à ce
défaut :
Fonction A p p a r t i e n t 2 ( a , L )
Donnees
L : l i s t e de r é e l s
a : valeur recherchée
k, n : entiers
trouve : booléen
Debut
n <−− L o n g u e u r ( L )
k <−− 0
Tant que k < n et L [ k ] �= a
Faire
k <−− k+1
Fin F a i r e
Si k < n
A l o r s t r o u v e <−− v r a i
Sinon t r o u v e <−− f a u x
Fin S i
Retourner ( t r o u v e )
Fin
ee
66
-F QSPHSBNNF FO 1ZUIPO
def A p p a r t i e n t 2 ( a , L ) :
t r o u v e=F a l s e
n=l e n ( L )
k=0
w h i l e ( k<n and L [ k ] != a ) :
k=k+1
i f k<n :
t r o u v e=True
return ( trouve )
Étant donné une liste L de n réels, nous avons déjà obtenu un algo-
rithme pour rechercher la présence d’un élément a dans cette liste.
Cet algorithme séquentiel avait une complexité linéaire en n. Lorsque
la liste est triée par ordre croissant, nous pouvons faire bien mieux !
-hBMHPSJUINF
Fonction A p p a r t i e n t 3 ( a , L )
Donnees
L : l i s t e t r i e e par ordre c r o i s s a n t
N,m, g , d : e n t i e r s
a : réel recherché
trouve : booléen
Debut
n <−− L o n g u e u r ( L )
t r o u v e <−− f a u x
I m i n <−−0
ed
67
Imax
Imax <−−n−1
<−−n−1
Tant que IImmi ni n <=
Tant que <= Imax Imax etetNon Non( t(r toruovuev)e )
FFaaiirree
mm <−−(I
<−−(Immi n+Imax i n+Imax)//2 ) / / 2##mme sets tl e l ep l pu sl u sgd gde n et inetri e r
i innf féér ri ieeuur r auau mm i l i leiue u e netnr ter eI mIimn i net etImax
Imax
SSii LL[m][m] == aa
AAl loorrss t tr roouuv ve e<−−<−−v rvar ia i
Sinon SSi i LL[m]
Sinon [m]<<a aA A l olrosr sI mI im
n i n<−−
<−− m+1m+1
Sinon SSi i LL[m]
Sinon [m]>>a aA A l olrosr sImax
Imax <−−
<−− m−1m−1
Fin
Fin SSi i
Fin
Fin FFaai irree
Retourner ((ttr roouuvve e) )
Retourner
Fin
Fin
Analyse
Analyse de
de cet
cetalgorithme
algorithme: :
Spécification: : La
Spécification fonctionTT`iB2MijU-GV
Lafonction TT`iB2MijU-GV prend
prend
en en
argument
argument
un réel
réel aaetetune
uneliste
listede
deréels
réelsL.L.Elle
Elleretourne
retourne
vrai
vrai
ouou
faux
faux
suivant
suivant
queque
a appartient
appartientààLLou oupas.
pas.
Terminaison: : Notons
Terminaison Notonspour
pourk k∈ ∈N,N,mmk , kImin
, Imin
k et et Imax
k Imax k les
k les
valeurs
valeurs des
desvariables
variablesm, IminetetImax
m,Imin Imax à l’issue
à l’issue k ième
dudu k ième
passage
passage
en en
boucle.
boucle. On
Onaapour
pourtout
toutentier
entierk kque
que
Imin
Imin k kmmk kImax
Imax k k
De plus,
plus,la
lasuite
suite(Imin
(Imink k) )est
estcroissante,
croissante,la la
suite
suite
(Imax k ) est
(Imax k ) est
décroissante.
décroissante.
Comme
Comme
k+12 2Imax
1 1
Imax
Imaxk+1k+1−−Imin
Imin k+1 Imax k−k−Imin k ,k ,
Imin
il en
en résulte
résulte que
queces
cesdeux
deuxsuites
suitesd’entiers
d’entiersnaturels
naturels
sont
sont
donc
donc
adja-
adja-
centes
centes et
et par
parconséquent
conséquentfinies.
finies.
Correction :: Un
Correction Uninvariant
invariantdedeboucle
boucleestest
iciici
« Après
« Après k passages
k passages
dans
dans la boucle i`Qmp2
la boucle i`Qmp2est
estfaux
fauxououa aappartient
appartientà la à la
sous-liste
sous-liste
desdes
termes
termes d’indices
d’indicescompris
comprisentre
entreImin
Imin k et
k et
Imax
Imaxk. k».. ».
Complexité : :Comme
Complexité Commelalalongueur
longueurdedela laliste
liste
dans
dans
laquelle
laquelle
on on
effectue
effectue lala recherche
rechercheest
estdivisée
diviséepar
par2 2à àchaque
chaque nouvelle
nouvelle
étape,
étape,
on on
a après
après kk étapes
étapes nn
Imax
Imax k k−−Imin
Imink k k .k .
22
e3e3
68
Par suite, si k HQ;2 (n), on a Imaxk − Imink 1. On effec-
tuera donc au maximum une étape supplémentaire. Finalement, la
complexité de cet algorithme est donc de l’ordre de HM(n), soit bien
meilleure que les algorithmes de recherche séquentielle étudiés pré-
cédemment.
-F QSPHSBNNF FO 1ZUIPO
def A p p a r t i e n t 3 ( a , L ) :
t r o u v e=F a l s e
-hBMHPSJUINF
Fonction P r e m i e r e _ o c c u r r e n c e ( a , L )
Donnees
L : l i s t e de r é e l s
a : valeur recherchée
k, n : entiers
eN
69
Debut
n <−− Longueur
L o n g u e u r ((LL))
k <−− 00
que kk <
Tant que < nn et et LL[[kk] ] �=�= aa
F aaiirree
k <−−
<−− k+1 k+1
Fin
Fin FFaaiirree
Si k << nn
A Retourner ((kk))
Alloorrss Retourner
Sinon Retourner ((Néant
Sinon Retourner Néant) )
Fin S ii
Fin
Analyse
Analyse de de cet
cet algorithme
algorithme ::
Spécification :: En
Spécification entrée,S`2KB2`2nQ++m``2M+2U-GV
Enentrée, S`2KB2`2nQ++m``2M+2U-GVprend prendunun
réel a et
et une
une liste
liste dede réels
réelsL.
L.Elle
Elleretourne
retourneleleplus
pluspetit indiceF Fteltel
petitindice
que L[k] = aa sisi aa appartient
L[k] = appartientààLLou ourien
riensinon.
sinon.
Terminaison :: L’algorithme
Terminaison L’algorithmesesetermine aprèsMMpassages
termineaprès passagesenenboucles
boucles
au maximum.
maximum.
Correction :: Un
Correction Uninvariant
invariantde
deboucle
boucleestest««Après
Aprèsk kpassages
passagesdansdans
la boucle,
boucle, l’élément
l’élémentaan’a n’apas
pasencore
encoreétéététrouvé
trouvé».».
Complexité :: Pour
Complexité Pour chaque
chaquepassage
passageen enboucle,
boucle,ilily ya adeux
deuxtests,
tests,
une affectation
affectation et et une
une addition.
addition.Compte
Comptetenu tenudedel’intialisation
l’intialisationetetdudu
retour de
de résultat,
résultat, lele nombre
nombred’OPEL
d’OPELest estdonc
donc4n 4n++4,4,oùoùn nestestlala
longueur
longueur dede la
la liste.
liste.
-F
-F QSPHSBNNF
QSPHSBNNFFO
FO1ZUIPO
1ZUIPO
def P rreem miieerree__ooccccuurrrreennccee((aa, ,LL) ): :
n=l
n=leenn ((LL))
k=0
k=0
whhiillee ((k<n
w k<n andand LL[ [kk] ] != != aa) ): :
k=k+1
k=k+1
i ff k<nk<n ::
rreettuurrnn ((kk))
e ll ssee ::
rreettuurrnn((None
None))
dy
dy
70
/PNCSF EhPDDVSSFODFT EhVO ÏMÏNFOU
-hBMHPSJUINF
Fonction Nombre_occurrence ( a , L )
Donnees
L : l i s t e de r é e l s
dR
71
• Initialisation : Lorsque k = 0, occur0 est initialisé à 0, ce qui
correspond bien évidemment au nombre d’apparitions de a dans la
liste vide.
• Hérédité : Soit k 0 tel que Pk . Dans la boucle d’indice k, on
teste si L[k] est égal à a. Si tel est le cas, alors l’affectation Q++m` IĜ
Q++m` Y R se traduit par occurk+1 = occurk + 1. Ainsi, occurk+1
est le nombre d’occurrences de a dans {L[0], . . . , L[k]}.
• Conclusion : Lorsqu’on sort définitivement de la boucle, occurn
est le nombre d’occurrences de a dans {L[0], . . . , L[n − 1]}.
Complexité : Pour chaque passage en boucle, il y a 4 OPEL.
-F QSPHSBNNF FO 1ZUIPO
def Nombre_occurrence ( a , L ) :
o c c u r= 0
n=l e n ( L )
for k in range (n) :
i f L [ k]==a :
o c c u r=o c c u r +1
return ( occur )
dk
72
4UBUJTUJRVFT TVS VOF MJTUF EF SÏFMT
-hBMHPSJUINF
Fonction Maximum ( L )
Donnees
L : une l i s t e de r é e l s
k , n : des e n t i e r s
max : un r é e l
Debut
maxi <−− L [ 0 ]
n <−− L o n g u e u r ( L )
Pour k v a r i a n t de 0 à n−1
Faire
S i L [ k ] > maxi
A l o r s maxi <−− L [ k ]
Fin S i
Fin F a i r e
Retourner ( maxi )
Fin
dj
73
itérations.
Correction : Notons pour tout entier k ∈ N, mk la valeur de la
variable informatique KtB à l’entrée du passage en boucle d’indice
k (c’est donc le k + 1ième passage) et notons
(Pk ) la propriété : mk−1 = Kt{L[0], . . . , L[k − 1]}
-F QSPHSBNNF FO 1ZUIPO
def Maximum ( L ) :
n=l e n ( L )
maxi=L [ 0 ]
for k in range (n) :
i f L [ k]> maxi :
maxi=L [ k ]
r e t u r n ( maxi )
d9
74
#PÔUF Ë PVUJMT
retourne le maximum d’une liste
max(L)
de réels
retourne le minimum d’une liste
min(L)
de réels
-hBMHPSJUINF
Fonction Valeur_moyenne ( L )
Donnees
L : une l i s t e de r é e l s
k , n : des e n t i e r s
somme : un r é e l
Debut
n <−− l o n g u e u r ( L )
somme <−− 0
Pour k v a r i a n t de 0 à n−1
Faire
somme <−− somme + L [ k ]
Fin F a i r e
Retourner ( somme/n )
Fin
d8
75
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée une liste G de M
nombres réels et retourne la valeur moyenne de cette liste.
Terminaison : La terminaison ne pose ici aucun problème car
nous sommes en présence d’une boucle inconditionnelle. La boucle
s’arrête après M itérations.
Correction : Notons pour tout k ∈ N, sommek la valeur de
la variable bQKK2 à l’entrée de la boucle d’indice k (le k + 1ième
passage) et notons
de
76
-F
-F QSPHSBNNF
QSPHSBNNF FO 1ZUIPO
def Moyenne
def Moyenne((LL)) ::
n=l
n=leenn((LL))
somme=0
somme=0
ffoorr kk iinn rraannggee (( nn ) :
somme
somme = = somme
somme + L [ k ]
rreettuurrnn((somme/n
somme/n))
#PÔUF Ë PVUJMT
7BSJBODF
7BSJBODF EhVOF
EhVOF MJTUF
MJTUF
On
Onpeut
peutdonc
donc représenter
représenter une
une distribution de valeurs
valeurs par
par sa
sa moyenne
moyenne
en
enpremière
premièreapproximation.
approximation. Ce faisant, on commet bienbien entendu
entendu une
une
erreur.
erreur.La
Lavariance
variance mesure
mesure précisément la dispersion
dispersion des
des valeurs
valeurs au-
au-
tour
tourde
delalamoyenne.
moyenne. C’est
C’est donc
donc une mesure d’erreur.
d’erreur.
Soit
Soit (x(xii))i∈[
i∈[[0,n−1]] une
[0,n−1]] une liste
liste de moyenne m. La variance
variance de
de la
la liste
liste
(xii))est
(x estdonnée
donnée parpar deux
deux expressions
expressions :
Formule
Formule de
de Huygens
Huygens ::
n−1
n−1 n−1
11
1 2
VV =
= (xii − m)2 =
(x m22
xi − m
nn n
i=0
i=0 i=0
Remarque :: en
Remarque en pratique,
pratique, on préfère utiliser la deuxième
deuxième expres-
expres-
sion.
sion.C’est
C’estégalement
également ce
ce point
point de vue que nous utiliserons.
utiliserons.
-hBMHPSJUINF
Fonction VVaarriiaannccee ((LL))
Fonction
Donnees
Donnees
dd
77
L : ll ii ss tt ee de
de rrééeel lss
k , n :: eennttiieerrss
smoy ,, ssvvaarr :: rrééeel lss
Debut
Debut
n <−−
<−− Longueur
L o n g u e u r((LL))
smoy <−− <−− 00
s v a r <−−
<−− 00
Pour kk vvaarriiaanntt de de 00 àà n−1
n−1
FFaaiirree
smoy
smoy <−− <−− smoysmoy ++ LL[ [kk] ]
ss vvaarr <−−
<−− ssvvaarr ++ LL[ [kk] ∗] ∗LL[ k[ k] ]
Fin
Fin FFaaiirree
Retourner (( ((ssvvaarr/n
Retourner /n)) −− ( (smoy/n
smoy /n) ∗) ∗( smoy/n
( smoy /n
) )) )
Fin
Analyse
Analyse de de cet
cet algorithme
algorithme: :
Spécification :: Cette
Spécification Cettefonction
fonctionprend
prendenenentrée
entréeune uneliste
listeL Ldedenn
nombres
nombres réels
réels et
etretourne
retournelalavariance
variancededecettecetteliste.
liste.
Terminaison :: La
Terminaison La terminaison
terminaisonnenepose poseiciiciaucun
aucunproblème
problèmecarcar
nous avons
avons une
une boucle
boucleinconditionnelle.
inconditionnelle.La Laboucle
boucles’arrête
s’arrêteaprès
après MM
itérations.
itérations.
Correction :: Notons
Correction Notonspourpourtout
toutkk∈∈N,N,smoy smoy k k(resp
(respsvar
svark )kla
) la
valeur de
de la variablebKQv
la variable bKQv(resp
(respbp`)
bp`)à àl’entrée
l’entréededelalaboucle
boucle d’indice
d’indice
k (soit
(soit également
également àà l’issue
l’issuedu dukkième
ièmepassage
passageenenboucle).
boucle).OnOndéfinitdéfinit
Pk la propriété
propriété ::
smoy
smoykk =
= L[0]
L[0]+ L[k] etet svar
+······++L[k] svar
k k==L[0]
L[0]22
++· ····+
·+L[k]
L[k]2 2
Initialisation :: Lors
• Initialisation Lorsdu
dupassage
passagedans
danslalaboucle
boucled’indice
d’indice0,0,
somme
somme 0 0
vaut 0.
0.
Hérédité :: Soit
• Hérédité Soitkk 00etetsupposons
supposonsque
quePP k kest
estvraie.
vraie.EnEncece
cas,
cas,
lors du + 11ième
du kk + ième passage,
passage,
smoy
smoyk+1
k+1 =
= smoy
smoykk++L[k
L[k++1]1]
L[0]++· · · ·++L[k]
== L[0] L[k++1]1]etet
L[k]++L[k
22
svar
svark+1
k+1 =
= svar
svarkk++L[k
L[k++1]1]
L[0]22++· · · ·++L[k]
== L[0] L[k]22
++L[k 2 2
L[k++1]1]
d3
d3
78
• Conclusion : Lorsque l’algorithme se termine, la propriété P est
vraie pour F4M, ie. la valeur bKQv est égale à la somme L[1] + · · · +
L[n] et la valeur de bp` est égale à la somme L[0]2 + · · · + L[n]2 . À
l’aide de la Formule de Huygens, on en déduit la variance.
Complexité : Pour chaque passage en boucle, il y a 6 OPEL.
-F QSPHSBNNF FO 1ZUIPO
#PÔUF Ë PVUJMT
fonction de N UMPY qui retourne
var(L)
la variance d’une liste
celle-ci retourne l’écart-type (ra-
std(L)
cine carrée de la variance)
dN
79
L’algorithme qui suit calcule la médiane d’une liste qui n’est pas
nécessairement triée.
-hBMHPSJUINF
Fonction Mediane ( L )
LP <−− L
LG <−− [ ] #L i s t e v i d e
Tant que L o n g u e u r ( LP)− L o n g u e u r ( LG ) > 0
F a i r e #t r o u v e r l ‘ i n d i c e du maximum de LP
imax=0
Pour k v a r i a n t de 0 à L o n g u e u r ( LP)−1
Faire
S i LP [ k ] > LP [ imax ]
A l o r s imax <−− k
Fin S i
Fin F a i r e
#E n l e v e r l e t e r m e LP [ imax ] de LP
LP <−− LP \ LP [ imax ]
#R a j o u t e r l e t e r m e LP [ imax ] à LG
LG <−− LG + LP [ imax ]
Fin F a i r e
S i L o n g u e u r ( LP ) = L o n g u e u r ( LG )
A l o r s Retourner ( Maximum ( LP)+LG [ 0 ] ) ∗ 0 . 5 )
Sinon Retourner ( LG [ 0 ] )
Fin S i
Fin
3y
80
Correction : Notons pour tout i ∈ N, LGi et LPi les valeurs des
variables GS et G: à l’entrée du i + 1ième passage) dans la boucle
inconditionnelle. Notons Pi la propriété :
-F QSPHSBNNF FO 1ZUIPO
def Mediane ( L ) :
LP=L ; LG = [ ]
3R
81
w h i l e l e n ( LP)− l e n ( LG)>0 :
imax=0
f o r k i n r a n g e ( l e n ( LP ) ) :
i f LP [ k]>LP [ imax ] :
imax=k
LG=[LP [ imax ] ] + LG
LP=LP [ : imax ]+LP [ imax +1 :]
i f l e n ( LP)− l e n ( LG)==0 :
r e t u r n ( ( Maximum ( LP)+LG [ 0 ] ) ∗ 0 . 5 )
e l i f l e n ( LP)− l e n ( LG ) == −1 :
r e t u r n ( LG [ 0 ] )
#PÔUF Ë PVUJMT
fonction de N UMPY retourne la
median(a) valeur médiane d’une liste de
réels
3k
82
3FDIFSDIF EhVOF TPVTTÏRVFODF
-hBMHPSJUINF
Fonction Contenu ( a , L )
Donnees
a , L : l i s t e s de r é e l s
j , k, r , n : entiers
trouve : booléen
Debut
n <−− L o n g u e u r ( L )
r <−− L o n g u e u r ( a )
t r o u v e <−− f a u x
Pour j v a r i a n t de 0 à n − r
Faire
k <−− 0
Tant que k < r et a [ k ] = L [ j+k ]
Faire
k <−− k + 1
Fin F a i r e
Si k = r
A l o r s t r o u v e <−− V r a i
3j
83
Fin S i
Fin F a i r e
Retourner ( t r o u v e )
Fin
-F QSPHSBNNF FO 1ZUIPO
def Contenu ( a , L ) :
n=l e n ( L )
r=l e n ( a )
trouve = False
f o r j i n r a n g e ( n−r +1) :
k=0
39
84
w h i l e ( k<r and a [ k]==L [ j+k ] ) :
k=k+1
i f k==r :
t r o u v e = True
return ( trouve )
-hBMHPSJUINF
Fonction R e c h e r c h e ( mot , t e x t e )
Donnees
t e x t e , mot : c h a î n e s de c a r a c t è r e s ,
j , k, r , n : entiers
trouve : booléen
Debut
n <−− L o n g u e u r ( t e x t e )
r <−− L o n g u e u r ( mot )
t r o u v e <−− f a u x
Pour j v a r i a n t de 0 à n − r
38
85
Faire
k <−− 0
Tant que k < r et mot [ k ] = t e x t e [ j+k ]
Faire
k <−− k+1
Fin F a i r e
Si k = r
A l o r s t r o u v e <−− V r a i
Fin S i
Fin F a i r e
Retourner ( t r o u v e )
Fin
3e
86
retour du résultat, le nombre maximal d’opérations élémentaires est
(n − r + 1)(4r + 3) + 4, où n et r sont les longueurs des deux listes.
-F QSPHSBNNF FO 1ZUIPO
def R e c h e r c h e r ( mot , t e x t e ) :
n=l e n ( t e x t e )
r=l e n ( mot )
trouve = False
f o r j i n r a n g e ( n−r +1) :
#PÔUF Ë PVUJMT
retourne directement le booléen
mot in texte qui est vrai lorsque KQi apparaît
comme sous-chaîne de i2ti2
3d
87
1SPHSBNNFS BWFD MFT TVJUFT
FU MFT GPODUJPOT
-hBMHPSJUINF
Fonction S u i t e _ r e c u r r e n t e ( f , a , n )
Donnees
f : fonction
a,u : reels
n,k : entiers
Debut
u <−− a
Pour k v a r i a n t de 0 à n−1
Faire
u <−− f ( u )
Fin F a i r e
Retourner ( u )
Fin
33
88
retourne en sortie la valeur du terme de rang n de la suite (un ).
Terminaison : La terminaison de cette boucle inconditionnelle
ne pose pas de problème.
Correction : Un invariant de boucle est ici « La valeur de la
variable m après k passages en boucle est le terme de rang k de
la suite définie par (S). »
Complexité : Évaluer le nombre d’opérations élémentaires d’un
-F QSPHSBNNF FO 1ZUIPO
def S u i t e _ r e c u r r e n t e ( f , a , n ) :
u=a
for k in range (n) :
u=f ( u )
return (u)
Il arrive qu’une suite soit définie par une relation de récurrence met-
tant en jeu trois générations de termes. En ce cas, il est nécessaire de
connaître deux valeurs initiales pour la déterminer. Le schéma est le
suivant :
• u0 = a, u1 = b
(S2 )
• ∀k ∈ N, un+2 = f (un+1 , un )
3N
89
-hBMHPSJUINF
-hBMHPSJUINF
Fonction SSuuiittee__rreeccuurrrreennttee22((f f, ,aa, ,bb, ,nn) )
Fonction
Donnees
f : f o n ccttiioonn
a , b , u , v ,,ww :: rrééeellss
n , k : e nn tt ii ee rrss
Debut
u <−− b
v <−− a
Pour k vv aa rriiaanntt de de 00 àà n−1
n−1
F a i rree
w <−−
<−− ff ((uu ,, vv))
v <−−
<−− uu
u <−−
<−− w w
Fin FFaaiirree
Retourner (( vv))
Retourner
Fin
Analyse de
de cet
cet algorithme
algorithme ::
Spécification :: La
Spécification fonctionamBi2n`2++m`2Mi2k
Lafonction amBi2n`2++m`2Mi2kprend prendenenentrée
entrée
une fonction itératrice7,
fonction itératrice 7,deux
deuxvaleurs initiales,,##etetun
valeursinitiales entierM.M.Elle
unentier Elle
retourne en
en sortie
sortie la
lavaleur
valeurdu
duterme
termede
derang
rangnndedelalasuite
suiteààrécurrence
récurrence
d’ordre 2, (u
(unn).).
Terminaison :: La
Terminaison La terminaison
terminaison de
de cette
cetteboucle
boucleinconditionnelle
inconditionnelle
ne pose pas
pas de
de problème.
problème.
Correction :: Un
Correction Un invariant
invariant de
de boucle
boucle est
est ici
ici««LaLavaleur
valeurdedelala
variable m après
après kk passages
passages enen boucle
boucle est
estleleterme
termedederang
rangkkdede
la suite définie
définie par
par (S
(S22).). »»
Complexité :: Comme
Complexité Comme pour
pour l’algorithme
l’algorithmeprécédent,
précédent,l’évaluation
l’évaluation
du nombre
nombre d’opérations
d’opérations élémentaires
élémentairesde decet
cetalgorithme
algorithmesuppose
supposelala
connaissance
connaissance de de la
la complexité
complexité dede l’évaluation
l’évaluationde
deff. .En
Ensupposant
supposant
que celle-ci
celle-ci est
est d’une
d’une seule
seule OPEL,
OPEL, lala complexité
complexitédedel’algorithme
l’algorithme
s’évalue alors
alors àà 5n + 33 OPEL.
5n + OPEL.
Ny
Ny
90
-F QSPHSBNNF FO 1ZUIPO
def S u i t e _ r e c u r r e n t e 2 ( f , a , b , n ) :
v=a
u=b
for k in range (n) :
v , u= u , f ( u , v )
return ( v )
-hBMHPSJUINF
Fonction V a l e u r _ m a x i m a l e ( f , a , b , n )
Donnees
f : fonctions
a , b , u , max , h : r é e l s
k,n : entiers
Debut
u <−− a
v <−− f ( a )
max <−− v
h <−− ( b−a ) / n
NR
91
Pour k v a r i a n t de 0 à n
Faire
u <−− u + h
v <−− f ( u )
S i v > max
A l o r s max <−− v
Fin S i
Fin F a i r e
Retourner ( max )
Fin
-F QSPHSBNNF FO 1ZUIPO
def V a l e u r _ m a x i m a l e ( f , a , b , n ) :
u=a
v=f ( a )
max=v
h=(b−a ) / n
f o r k i n r a n g e ( n+1) :
u=u+h
v=f ( u )
Nk
92
i f v>max
v>max ::
max=v
max=v
r e t u r n ((max
max))
#PÔUF
#PÔUF ËË PVUJMT
PVUJMT
Le module QTiBKBx2
QTiBKBx2 de
de SSCIPY
CIPY propose fonctionKBMBKBx2nb+H`
proposelalafonction KBMBKBx2nb+H`
o p t=m i n i m i zz ee_
_ssccaallaarr ((ff ,, bounds
bounds=(a
=(a,,bb)), ,method=
method=’ ’bounded
bounded’ ’) )
«Son ordinateur
ordinateur était
était éteint
éteint parce
parceque
quedes
desoctets
octetsavaient
avaientrefroidi
refroidi
l’énergie de l’alphabet.
l’alphabet. »»
1IJMJQQF
1IJMJQQF +BGmFVY
+BGmFVY,,écrivain
écrivainetetpoète
poètefrançais.
français.
Nj
Nj
93
3ÏTPMVUJPO
3ÏTPMVUJPO OVNÏSJRVF
OVNÏSJRVF
EFT ÏRVBUJPOT
ÏRVBUJPOT OPO
OPO MJOÏBJSFT
MJOÏBJSFT
On considère
considère une
une fonction
fonction ff :: II →→ RRune
unefonction
fonctionsuffisamment
suffisamment
régulière. On
On suppose
suppose quequeff s’annule
s’annuleexactement
exactementune
unefois
foisdans
dansI,I,auau
point c. On cherche
cherche àà résoudre
résoudrenumériquement
numériquementl’équation
l’équation
ff(x)
(x)==00 UEV
UEV
c’est-à-dire àà obtenir
obtenir une
une valeur
valeurapprochée
approchéede
dec.c.
3FDIFSDIF
3FDIFSDIF EhVO
EhVO [ÏSP
[ÏSP QBS
QBS EJDIPUPNJF
EJDIPUPNJF
On considère
considère uneune fonction
fonction ff :: II → → RR une
unefonction
fonctionstrictement
strictement
monotone sur sur un
un intervalle
intervalle I. I. On
On suppose
suppose qu’il
qu’ilexiste
existeun
uncouple
couple
(a, b) ∈ I 22 tel
tel que
que aa << bb etetff(a) (b)0.0.
(a)××ff(b)
D’après le théorème
théorème des des valeurs intermédiairesappliqué
valeurs intermédiaires appliquéà àune
une
fonction injective
injective (car
(carstrictement
strictementmonotone),
monotone),ililexiste
existeun
ununique
uniqueélé-
élé-
ment c ∈ [a, b] tel
[a, b] tel que
que ff(c)
(c) =
=0.0.
Une démonstration
démonstration dede cece théorème
théorème repose
repose sur
surlalaconstruction
constructiondede
suites adjacentes
adjacentes par
par dichotomie.
dichotomie.
Plus précisément,
précisément, onon construit
construitpar
parrécurrence
récurrencedes suites(u(unn) )etet(v(v
dessuites n )n )
vérifiant pour
pour tout
tout entier
entier nn ∈∈ N
N::
•• uu00
uu11
······
uunnvvnn· · · ·vv1 1vv0 0
bb−−aa
(Cn ) •• vvnn −
− uunn =
= nn
22
•• ff(u
(unn)) × (a)
×ff(a) 0,0,ff(v (b)0.0.
(vnn))××ff(b)
On montre alors
alors que
queles
lessuites (unn))etet(v
suites(u (vnn))sont
sontadjacentes
adjacentesetetconvergent
convergent
N9
N9
94
toutes deux vers la solution c de l’équation UEV. De plus, pour tout
entier n ∈ N, on a
un c v n
L’avantage de cette méthode de résolution est qu’elle est construc-
tive, c’est-à-dire qu’elle fournit un algorithme qui permet d’appro-
cher la solution de l’équation f (x) = 0 mais avec également un bon
contrôle de l’erreur commise.
-hBMHPSJUINF
ment une fonction 7 et deux réels -# et une précision 2Tb strictement
positive. Elle retourne une valeur approchée à 2Tb près de la solution
de l’équation UEV comprise entre a et b.
Terminaison : Notons pour tout entier n ∈ N, un , vn les valeurs
des variables informatiques u, v à l’issue du nième passage dans la
boucle conditionnelle. Comme nous allons le démontrer, un inva-
riant de boucle est alors la propriété (Cn ) définie précédemment. En
N8
95
particulier, les
les suites
suites (u
(unn)) etet(v
(vnn))vérifient
vérifient: :
bb−−aa
−uunn
vvnn − −−
−−
−−
→→0.0.
22nn n→∞
n→∞
Par définition
définition dede la
la notion
notion de
de limite,
limite, ilil existe
existeun
unentier
entiernn0 0teltelque
que
vn0 − unn00
22 eps.
eps. La
La boucle
bouclese
setermine
termineaprès aprèsnn00itérations.
itérations.
Correction :: Vérifions
Correction Vérifionsque
que(C
(Cnn))est
estun
uninvariant
invariantdedeboucle.
boucle.
Initialisation :: avant
• Initialisation avant lele premier
premier passage
passageenenboucle,
boucle,uu0 0 ==aaetet
bien uu00
v0 = b. On aa bien vv00,, vv00 −
−uu00 ==bb−−aaetetff(u (a)0,0,
(u0 )0 )∗∗ff(a)
f (b) × f (v00))
0.
0.
Hérédité :: Soit
• Hérédité Soit nn ∈∈ N
N tel
telque
que(C
(Cnn).).Au
Aucours dunnième
coursdu ièmepassage
passage
uunn+v
+vnn
en boucle, on
on définit
définit w = 22 . .
wnn =
Si f (wn
n)) aa le
le même
même signe
signeque
queff(a),
(a),ononpose
posealors
alorsuun+1 n netet
n+1==ww
on ne change
change pas
pas la
la valeur
valeurde
dev,
v,donc
doncvvn+1
n+1==vvnn. .
Sinon f (w
(wnn)) aa le
le même
mêmesigne
signeque
queff(b),
(b),on
onpose
posealors
alorsvvn+1
n+1==ww
nn
et on ne change
change paspas lala valeur
valeurdedeu,
u,donc
doncuun+1
n+1==uunn. .
Dans les deux
deux cas,
cas, on
on aa donc
donc::
unn
uun+1
n+1 vvn+1
n+1 vvnnetetvvn+1
n+1− −uun+1
n+1== 2 2
−u
vnvn −u
nn
(a) ×
f (a) × ff(u n+1))
(un+1 00etetff(b)
(b)××ff(v n+1))0.0.
(vn+1
Compte tenu
tenu que
que (C
(Cnn)) est
estvérifié,
vérifié,on
onen
endéduit
déduitaisément
aisément(C
(Cn+1
n+1).).
Conclusion :: en
• Conclusion en sortie
sortie dede boucle,
boucle, on
onaaCCnnest estvérifié
vérifiéetetvnv0n0−−
un0 2 eps.
eps. Comme
Comme cc est est compris
comprisentre
entreuunn0 0 etetvvnn0 ,0 ,wwn0n0est
estune
une
valeur approchée de cc àà 2Tb
approchée de 2Tbprès.
près.
Complexité :: Pour
Complexité Pourestimer
estimerlalacomplexité
complexitéde decet
cetalgorithme,
algorithme,conve-
conve-
nons de compter
compter l’évaluation
l’évaluationde deff en
enune
unevaleur
valeurcomme
commeune uneOPEL,
OPEL,
ce qui n’est pas
pas le
le cas
cas en
engénéral.
général.Avec
Aveccette
cetteconvention,
convention,chaque
chaquepas-
pas-
sage en boucle
boucle revient
revient àà 1111 OPEL.
OPEL.Pour
Pourque
quevv−−uusoit
soitinférieur
inférieurà à
b−a
b−a
2eps, il suffit
suffit que
que nn soit
soit supérieur
supérieurààNN ==�HQ;
�HQ;22 epseps �.�.Finalement,
Finalement,
la complexité
complexité s’évalue
s’évalue àà 11N
11N ++3,3,où
oùNNest
estde l’ordrededeHM(eps).
del’ordre HM(eps).
Ne
Ne
96
-F QSPHSBNNF FO 1ZUIPO
def Z e r o _ d i c h o t o m i e ( f , a , b , e p s ) :
a s s e r t f ( a ) ∗ f ( b ) <=0," f d o i t c h a n g e r de s i g n e "
u=a
v=b
w h i l e v−u > 2∗ e p s :
w=(u+v ) / 2
i f f ( a ) ∗ f (w) >= 0 :
u=w
else :
Remarques :
• l’instruction bb2`i 7UV 7U#V I4y-Ǵ7 /QBi +?M;2` /2 bB;M2Ǵ évite
l’exécution de la fonction w2`Qn/B+?QiQKB2 lorsque la fonction
f (a) × f (b) 0 n’est pas satisfaite.
• En revanche, l’hypothèse que f est strictement monotone sur I
sert uniquement à garantir que l’équation UEV f (x) = 0 possède
une unique solution sur I. Lorsque ce n’est pas le cas, la fonction
w2`Qn/B+?QiQKB2 U7--#-2TbV va retourner une valeur appro-
chée d’une solution de cette équation comprise entre a et b.
Nd
97
converge vers l’unique point fixe c de g sur [a, b], c’est-à-dire l’unique
solution de l’équation
g(x) = x. UF V
De plus
∀n ∈ N, un − c k n (b − a)
-hBMHPSJUINF
Fonction P o i n t _ f i x e ( g , a , N, e p s )
Donnees
g : fonction
n ,N : e n t i e r s
a , u , eps : r e e l s
Debut
n <−− 0
u <−− a
Tant que n < N et | g ( u)−u | > e p s
Faire
n <−− n+1
u <−− g ( u )
Fin F a i r e
S i | g ( u)−u | e p s
A l o r s Retourner ( u )
Fin
N3
98
Terminaison : La boucle conditionnelle se terminera après N ité-
rations au maximum.
Correction : Un invariant de boucle est ici « après n itérations,
la valeur de la variable informatique u est le terme de rang n de la
suite récurrente (un )».
En sortie de boucle, si |g(un ) − un )| eps, alors un est une valeur
approchée de c. Sinon, l’algorithme n’a pas convergé et la fonction
ne retourne rien.
Complexité : Dans le pire des cas, si l’algorithme ne converge
-F QSPHSBNNF FO 1ZUIPO
def P o i n t _ f i x e ( g , a , N, e p s ) :
n=0
u=a
w h i l e ( n<N and a b s ( g ( u)−u)> e p s ) :
n=n+1
u=g ( u )
i f a b s ( g ( u)−u)<=e p s :
return (u)
NN
99
.ÏUIPEF EF /FXUPO
Illustration
−2 −1 0 1 3
Admettons que cette suite récurrente soit bien définie (il faut pour
cela que pour tout n , un appartienne à I et que f (un ) soit non nul).
En ce cas, si (un ) converge vers c ∈ I, alors par unicité de la limite :
f (c)
c=c− , soit f (c) = 0
f (c)
Ainsi, la limite c est solution de UEV. Pour garantir que la suite soit
bien définie et converge vers la solution c de UEV, le résultat fonda-
mental est le suivant :
Théorème de Newton —. Soit c ∈ I et f : I → R une fonction
de classe C 2 . On suppose que f s’annule en c et que f et f ne
s’annulent pas dans I.
Ryy
100
Pour tout a ∈ I tel que f (a)f �� (a) 0, on considère la suite
(un )n∈N définie par u0 = a et la relation de récurrence :
f (un )
∀n ∈ N, un+1 = un − .
f � (un )
-hBMHPSJUINF
Fonction Zero_newton ( f , df , a , N, e p s )
Donnees
f , d f : f o n c t i o n s d f e s t l a d é r i v é e de f
a , u , v , eps : r e e l s
n ,N : e n t i e r s
Debut
n <−− 0
u <−− a
v <−− u − f ( u ) / d f ( u )
Tant que ( n < N et | v−u | > e p s )
Faire
n <−− n+1
u <−− v
v <−− u − f ( u ) / d f ( u )
Fin F a i r e
S i | v−u | e p s
A l o r s Retourner ( v )
Fin
RyR
101
Analyse de cet algorithme :
Spécification : La fonction w2`QnM2riQM prend en argument
itérations au maximum.
Correction : Un invariant de boucle est ici « après n itérations,
-F QSPHSBNNF FO 1ZUIPO
def Zero_newton ( f , df , a , N, e p s ) :
n=0
u=a
v=u−f ( u ) / d f ( u )
w h i l e ( n<N and a b s ( v−u)> e p s ) :
n=n+1
u=v
v=u−f ( u ) / d f ( u )
i f a b s ( v−u)<=e p s :
return ( v )
Ryk
102
.ÏUIPEF EF -BHSBOHF
Lorsque la valeur initiale a est bien choisie, la suite (un ) ainsi définie
converge vers c.
L’avantage de cette méthode est qu’elle ne nécessite pas le calcul
de la dérivée f . L’inconvénient est que nous perdons la convergence
quadratique.
-hBMHPSJUINF
Fonction Z e r o _ l a g r a n g e ( f , a , b , N, e p s )
Donnees
f : fonction
u , v , eps : r é e l s
Ryj
103
n , N : e nn tt ii ee rrss
Debut
n <−− 0
u <−− a
v <−− ( u∗ u∗ ff ((b)−b∗
b)−b∗ff ((uu))))//((ff((b)−
b)−f f((uu))))
que ((n<N
Tant que n<N et et ||v−u|>
v−u|> eeppss))
F a i rree
n <−−
<−− n+1 n+1
u <−−
<−− vv
v <−
<− ((u∗ u∗ ff ((b)−b∗
b)−b∗ff((uu))))//((f f((b)−
b)−f f((uu) ) )
Fin FFaaiirree
S i | v−u || eeppss
Retourner((vv))
A l oorrss Retourner
Fin
Analyse de
de cet
cet algorithme
algorithme ::
Spécification :: La
Spécification fonctionw2`QnH;`M;2
Lafonction w2`QnH;`M;2prend prendenenargument
argument
fonction 7,7, deux
une fonction réels etet#,#,un
deux réels unnombre
nombremaximal d’itérationsLL
maximald’itérations
précision 2Tb
et une précision 2Tb strictement
strictement positive.
positive.Elle
Elleretourne
retourneuneunevaleur
valeur
approchée àà 2Tb
2Tb près
près de
de lala solution
solutiondedel’équation
l’équationff(x)(x)==00obtenue
obtenue
par la méthode
méthode de de Lagrange
Lagrangeààpartirpartirde
delalavaleur
valeurinitiale
initialeaasisitoutefois
toutefois
cette méthode
méthode converge,
converge, rien
riensinon.
sinon.
Terminaison :: La
Terminaison Laboucle
boucleconditionnelle
conditionnelleseseterminera
termineraaprès
aprèsNNité-
ité-
rations au maximum.
maximum.
Correction :: Un
Correction Un invariant
invariant de
de boucle
boucleestestici
ici««après
aprèsnnitérations,
itérations,
la valeur de
de la
la variable
variable informatique
informatiqueuuest estleleterme
termedederang
rangnndedelala
suite récurrente
récurrente (u(unn)) de
de lalaméthode
méthodede deLagrange
Lagrange».».
En sortie de
de boucle,
boucle, sisi |u −uunn|| eps,
n+1 −
|un+1 eps,alors
alorsuunnest
estune
unevaleur
valeur
approchée dede c.
c. Sinon,
Sinon, l’algorithme
l’algorithmen’a n’apas
pasconvergé
convergéetetlalafonction
fonction
ne retourne
retourne rien.
rien.
Complexité :: dans
Complexité dansle
lepire
piredes
descas,
cas,lorsque
lorsquel’algorithme
l’algorithmeneneconverge
converge
pas, on effectue
effectue 12N
12N ++1111OPEL.
OPEL.
Ry9
Ry9
104
-F QSPHSBNNF FO 1ZUIPO
def Z e r o _ l a g r a n g e ( f , a , b , N, e p s ) :
n=0
u=a
v=(u∗ f ( b)−b∗ f ( u ) ) / ( f ( b)− f ( u ) )
w h i l e ( n<N and a b s ( v−u)> e p s ) :
n=n+1
u = v
v = ( u∗ f ( b)−b∗ f ( u ) ) / ( f ( b)− f ( u ) )
i f a b s ( v−u)<=e p s :
#PÔUF Ë PVUJMT
Ry8
105
*OUÏHSBUJPO OVNÏSJRVF
Rye
106
Ainsi :
b n−1
n−1
f (t) dt ≈ f (ak ) × h = h f (ak )
a k=0 k=0
a b
-hBMHPSJUINF
Fonction I n t e g r a l e _ r e c t a n g l e ( a , b , f , n )
Donnees
f : fonction ;
a,b,h, S : reels
k,n : entiers
Debut
h <−− ( b−a ) / n
S <−− 0
Pour k v a r i a n t de 0 à n−1
Faire
S <−− S + f ( a+k ∗h )
Fin F a i r e
Retourner ( h∗S )
Fin
Ryd
107
Analyse de cet
cet algorithme
algorithme ::
Spécification :: La
Spécification fonction AMi2;`H2n`2+iM;H2
La fonction AMi2;`H2n`2+iM;H2prend prenden en
argument deux réels et
deux réels et #,
#, une fonction 77 définie
une fonction définie sur
sur [a,
[a,b]b]etetun
un
entier M. Elle retourne
retourne une
une valeur
valeurapprochée
approchéede del’intégrale
l’intégralededeaaààbbde de
f obtenue par la la méthode
méthode des
des rectangles
rectangles en
en subdivisant
subdivisantlelesegment
segment
[a, b] en n.
Terminaison :: La
Terminaison La terminaison
terminaison de
de lala boucle
boucleinconditionnelle
inconditionnellene
ne
pose pas de problème.
problème.
Correction :: Un Un invariant
invariant de deboucle
boucleest
estici
ici««après
aprèskkitérations,
itérations,lala
valeur de la variable
variable informatique
informatique SS estest égale
égaleààlalasomme
sommeff(a (a00))++
· · · + f (ak−1
k−1 ) ».
». En
En sortie
sortie de
de boucle,
boucle, c’est-à-dire
c’est-à-dire après
aprèsn nitérations,
itérations,
S ∗ h est précisément
précisément égale
égale àà SSnn..
Complexité :: À
Complexité À chaque
chaquepassage
passageenenboucle,
boucle,ililyyaa66OPEL.
OPEL.Compte
Compte
tenu des initialisations
initialisations et
et du
du retour
retour de
de résultat,
résultat,lalacomplexité
complexitéde
decet
cet
algorithme s’évalue
s’évalue àà 6n
6n ++ 66 OPEL.
OPEL.
-F
-F QSPHSBNNF
QSPHSBNNF FO
FO 1ZUIPO
1ZUIPO
def I n t e g r aa ll ee _
_rreeccttaannggllee ((aa,,bb,,ff ,,nn)) ::
h=(b−a ))//nn
S=0
f o r k iinn rraannggee ((nn)) ::
S=
S= S+f S+f ((a+k∗h
a+k ∗h))
r e t u r n ((S∗h
S∗h))
.ÏUIPEF EFT
EFT USBQÒ[FT
USBQÒ[FT
L’idée consiste
consiste àà remplacer
remplacer les
les rectangles
rectangles utilisés
utilisésdans
danslalaconstruc-
construc-
tion précédente
précédente par
par des
des trapèzes
trapèzes qui
qui s’appuient
s’appuientsursurlelegraphe
graphede
deff. .
Avec les notations
notations précédentes,
précédentes, on
on pose
pose::
n−1
n−1
− aa
bb − ff(a
(aii))+
+ff(a
(ai+1
i+1))
TTnn(f
(f)) =
=
nn 22
i=0
i=0
Ry3
Ry3
108
Illustration
a b
où M = bmT[a,b] |f |.
-hBMHPSJUINF
Fonction I n t e g r a l e _ t r a p e z e s ( a , b , f , n )
Donnees
f : fonction ;
a , b , h ,T : r e e l s
k,n : entiers
Debut
h <−− ( b−a ) / n
T <−− ( f ( a)+ f ( b ) ) / 2
Pour k v a r i a n t de 1 à n−1
Faire
T <−− T + f ( a+k ∗h )
Fin F a i r e
Retourner ( h∗T)
Fin
RyN
109
Analyse de cet algorithme :
Spécification : La fonction AMi2;`H2ni`T2x2 prend en ar-
gument deux réels et #, une fonction 7 définie sur [a, b] et un entier
M. Elle retourne une valeur approchée de l’intégrale de a à b de f
obtenue par la méthode des trapèzes en subdivisant le segment [a, b]
en n.
Terminaison : La terminaison de la boucle inconditionnelle ne
pose pas de problème.
Correction : Un invariant de boucle est ici après k itérations, la
valeur de la variable informatique T est égale à la somme :
k−1
f (a) + f (b)
T = + f (ai ).
2
i=1
-F QSPHSBNNF FO 1ZUIPO
def I n t e g r a l e _ t r a p e z e ( f , a , b , n ) :
h= ( b−a ) / n
T= ( f ( a)+ f ( b ) ) / 2
for k in range (1 , n) :
T=T+f ( a+k ∗h )
r e t u r n h∗T
RRy
110
#PÔUF Ë PVUJMT
RRR
111
3ÏTPMVUJPO OVNÏSJRVF
EFT ÏRVBUJPOT EJGGÏSFOUJFMMFT
b−a
tk = a + k , pour k ∈ [[0, n]].
n
Il s’agit de déterminer une approximation de yk de la valeur exacte
y(tk ). Or d’après le théorème fondamental du calcul intégral, on a
pour k ∈ [[0, n − 1]] :
tk+1
y(tk+1 ) − y(tk ) = y � (u) du
tk
tk+1
= f (u, y(u)) du
tk
≈ hf (tk , y(tk ))
RRk
112
La méthode d’Euler consiste à poser que yk+1 − yk est exactement
égal à hf (tk , yk ).
Graphiquement, cela revient à remplacer le graphe de y par des fonc-
tions affines sur chaque sous-intervalle de la subdivision. D’un point
de vue algorithmique, on calculera les approximations y0 , y1 , y2
. . . de proche en proche à l’aide des relations :
y0 = y(a)
∀k ∈ [[0, n − 1]], yk+1 = yk + hf (tk , yk )
les bornes et # d’un intervalle, une valeur réelle initiale vny, une
fonction de deux variables 7 et un entier M. Elle retourne deux listes :
RRj
113
• une subdivision régulière (tk )k∈[[0,n]] du segment [a, b] en n sous-
intervalles ;
• les valeurs approchées (y[k])k∈[[0,n]] de la solution du problème de
Cauchy UC1 V aux points de la subdivision.
Terminaison : La terminaison de la boucle inconditionnelle ne
pose pas de problème.
Correction : Un invariant de boucle est « après k itérations, les
k +1 premiers termes des listes t et y correspondent à ceux des suites
(tn ) et (yn )».
Complexité : Chaque passage en boucle génère 7 OPEL. Compte
tenu des initialisations et du retour du résultat, le nombre d’OPEL
s’évalue à 7n + 8.
-F QSPHSBNNF FO 1ZUIPO
def E u l e r _ s c a l a i r e ( a , b , y0 , f , n ) :
h= ( b−a ) / n
t =(n + 1 ) ∗ [ 0 ]
y=(n + 1 ) ∗ [ 0 ]
t [0]= a
y [ 0 ] = y0
for k in range (n) :
t [ k +1] = t [ k ] + h
y [ k +1] = y [ k ] + h ∗ f ( t [ k ] , y [ k ] )
return ( t , y )
RR9
114
Pour traiter ces systèmes d’équations différentielles, on considère
que la fonction F est vectorielle. Plus précisément, on considère les
deux inconnues y1 et y2 comme les coordonnées d’une fonction vec-
torielle : Y : I → R2
.
t �→ [y1 (t), y2 (t)]
De même, on pose F = [F1 , F2 ]. Ainsi, la loi d’évolution prend la
forme bien connue Y (t) = F (t, Y (t)). Finalement, nous pouvons
réécrire le système d’équations différentielles scalaires sous forme
-hBMHPSJUINF
Fonction E u l e r _ v e c t o r i e l ( a , b , Y0 , F , n )
Donnees
F : f o n c t i o n de deux v a r i a b l e s
a,b,h : réels
n,k : entiers
t : l i s t e s de r é e l s
Y : l i s t e s de v e c t e u r s
Y0 : v e c t e u r
Debut
h <−− ( b−a ) / n
t <−− [ 0 pour k v a r i a n t de 0 à n ]
Y <−− [ [ 0 pour k v a r i a n t de 0 à n ] ,
[ 0 pour k v a r i a n t de 0 à n ] ]
t [ 0 ] <−− a
Y [ 0 ] <−− Y0
Pour k v a r i a n t de 0 à n−1
Faire
t [ k +1] <−− t [ k ] + h
Y [ k +1] <−− Y [ k ] + h ∗ F ( t [ k ] , Y [ k ] )
Fin F a i r e
Retourner ( t , Y)
Fin
RR8
115
Analyse
Analyse de
de cet
cet algorithme
algorithme ::
Spécification :: La
Spécification fonction1mH2`np2+iQ`B2H
Lafonction 1mH2`np2+iQ`B2Hprend prendenenentrée
entrée
bornes et
les bornes et ## d’un
d’unintervalle,
intervalle,un
uncouple
couplededevaleurs
valeursréelles
réellesinitiales
initiales
uny, une
une fonction
fonction de de deux variables66etetun
deux variables entierM.M.Elle
unentier Elleretourne
retourne
deux listes
listes ::
• une subdivision
subdivision régulière
régulière(t(tkk))k∈[
k∈[[0,n]]du
[0,n]] dusegment
segment[a,
[a,b]b]enenn nsous-
sous-
intervalles
intervalles ;;
• les valeurs
valeurs approchées
approchées (Y (Y[k])
[k])k∈[
k∈[[0,n]]de
[0,n]] delalasolution
solutionduduproblème
problème
Cauchy UC
de Cauchy UC22VV aux
auxpoints
pointsde
delalasubdivision.
subdivision.
Terminaison :: La
Terminaison La terminaison
terminaisonde
delalaboucle
boucleinconditionnelle
inconditionnellenene
pose pas
pas de
de problème.
problème.
Correction :: Un
Correction Un invariant
invariantdedeboucle
boucleestest««après
aprèsk kitérations,
itérations,lesles
k + 1 premiers
premiers termes
termes des
des listes
listesttetetYY correspondent
correspondentà àceuxceuxdesdes
suites (tnn)) et
et (Y
(Ynn)) ».
».
Complexité :: Chaque
Complexité Chaquepassage
passageenenboucle
bouclegénère
génère7 7OPEL.
OPEL.Compte
Compte
tenu des
des initialisations
initialisations etet du
du retour
retourdu
durésultat,
résultat,lelenombre
nombred’OPEL
d’OPEL
s’évalue àà 7n
7n ++ 8.
8.
-F
-F QSPHSBNNF
QSPHSBNNFFO
FO1ZUIPO
1ZUIPO
Si les algorithmes
algorithmes de de lala méthode
méthode d’Euler
d’Eulersont
sontpresque
presqueidentiques
identiques
entre versions
versions scalaire
scalaireetetvectorielle,
vectorielle,leurs
leursimplémentations
implémentationsenenP YTHON
P YTHON
diffèrent
diffèrent plus
plus notablement.
notablement.
commeu(F)
En effet, comme u(F)etet6Ui(F)-u(F)V
6Ui(F)-u(F)Vsont
sontdes
deslistes
listes(couples),
(couples),lelesym-
sym-
d’addition Y
bole d’addition Yserait
seraitinterprété
interprétécomme
commeconcaténation
concaténationdedelistes,
listes,dede
même que
que la multiplication?? 6Ui(F)-u(F)V.
la multiplication 6Ui(F)-u(F)V.
Pour contourner
contourner cette
cette difficulté,
difficulté,on
onpeut
peutfaire
faireces
cesopérations
opérations« «co-
co-
ordonnées
ordonnées par
par coordonnées
coordonnées »,», ouou bien
bienutiliser format``v
utiliserleleformat ``vdede
UMPY..
N UMPY
RRe
RRe
116
def EEuul leerr__vveec ct to or irei le(l a( ,ab, ,bY0
def , Y0, F,,Fn ,)n: ) :
h=h= ((b−a b−a)/ ) /nn
tt=[0
=[0 ffoor r kk i ni n r arnagneg(en(+1)] n +1)]
YY= =[[[[00, ,00] ] f of or r k k i ni n r arnagneg(en(+1)] n +1)]
tt[[00]]== aa
YY[[00]][[: :] ]== Y0 Y0[ [: ]: ]
ffoorr kk i n i n r ar an ng ge e ( n( )n :) :
tt[ [kk+1]
+1] ==t [t k[ ]k ]++h h
YY[ [kk++11] []0[ 0] ]==Y Y [ k[ ]k[ ]0[]0 ]+ +h∗F h∗F( t ([ kt ][ k, Y] [,kY][)k[ ]0)] [ 0 ]
YY[ [kk++11] []1[ 1] ]==Y Y [ k[ ]k[ ]1[]1 ]+ +h∗F h∗F( t ([ kt ][ k, Y] [,kY][)k[ ]1)] [ 1 ]
-F
-FQSPHSBNNF
QSPHSBNNFBWFD
BWFD/VNQZ
/VNQZ
def EEuul leerr11((aa, b, b, Y0
def , Y0, F, F, n, )n :) :
h=
h= ((b−a b−a)/ ) /nn
p=l
p=leenn((Y0 Y0) )
t=np
t=np. .l li inns sppa ac ce e( a( a, b, ,bn+1)
, n+1)
Y=np
Y=np. .zzeer roos s( (s hs ha pa ep=(p e =(p , n,+1)
n +1)
, d ,t dy pt ye=f
p e=f l o al ot )a t )
Y[
Y[ ::,,00] ]== Y0 Y0[ [: :, 0, 0] ]
ffoorr kk i n i n r ar an ng ge e( n( )n :) :
YY[ [: :, ,k+1]=
k+1]=YY [ :[ ,:k]+h∗F
, k ]+h∗F ( t ([ tk [] k, Y] [, Y: ,[ k: ],)k ] )
rreettuurrnn ( (t t, Y), Y)
Remarques
Remarques : :
• Ici,
Ici, les
les vecteurs
vecteursououlistes
listesdedevecteurs
vecteurssont
sont
desdestableaux
tableaux
de type
de type
M/``v.
M/``v.IlIlen enva ainsidedeu-u-uy-
vaainsi uy-i. i.
DeDemême
mêmela fonction
la fonction 6 passée
6 passée
en en
paramètre
paramètreest estune
unefonction
fonctiondededeuxdeux variables
variables
: un: un
réelréel
et un
et tableau
un tableau
(p,1).
(p,1). Elle
Elleretourne
retourneégalement
égalementunun tableau
tableau
(p,1).
(p,1).
• Cette
Cette dernière
dernièreversion
versionpermet
permetdedetraiter
traiter
desdes
équations
équations
différen-
différen-
pp
tielles
tiellesvectorielles
vectoriellesdans
dansRR, soit
, soit
desdes
systèmes
systèmesde de
p équations
p équations
différentielles.
différentielles.
RRd
RRd
117
#PÔUF Ë PVUJMT
RR3
118
Plus précisément, on résout numériquement le problème de Cauchy
d’ordre 2 :
��
y = f (t, y(t), y � (t)) pour tout t ∈ [a, b]
UC3 V
y(a) = d0 , y � (a) = d1
-hBMHPSJUINF
Fonction E u l e r _ o r d r e 2 ( a , b , d0 , d1 , f , n )
Donnees
RRN
119
• les valeurs approchées (Y 0[k])k∈[[0,n]] de la solution du problème
de Cauchy UC3 V aux points de la subdivision.
Terminaison : La terminaison de la boucle inconditionnelle ne
pose pas de problème.
Correction : Un invariant de boucle est « après k itérations, les
k + 1 premiers termes des listes t et Y 0 correspondent à ceux des
suites (tn ) et (Y 0n ) obtenu par la méthode d’Euler ».
Complexité : Chaque passage en boucle génère 9 OPEL. Compte
tenu des initialisations et du retour du résultat, le nombre d’OPEL
s’évalue à 9n + 10.
-F QSPHSBNNF FO 1ZUIPO
def E u l e r _ o r d r e 2 ( a , b , d0 , d1 , f , n ) :
h= ( b−a ) / n
t =[0 f o r k i n r a n g e ( n +1)]
Y0=[0 f o r k i n r a n g e ( n +1)]
Y1=[0 f o r k i n r a n g e ( n +1)]
t [0]= a
Y0 [ 0 ] = d0
Y1 [ 0 ] = d1
for k in range (n) :
t [ k +1] = t [ k ] + h
Y0 [ k +1] = Y0 [ k ] + h∗Y1 [ k ]
Y1 [ k +1] = Y1 [ k ] + h∗ f ( t [ k ] , Y0 [ k ] , Y1 [ k ] )
r e t u r n ( t , Y0 )
Rky
120
3ÏTPMVUJPO OVNÏSJRVF
EhVO TZTUÒNF MJOÏBJSF
AX = B
RkR
121
⎧
⎪
⎪ a0,0 x0 + a0,1 x1 + a0,2 x2 +· · ·+ a0,n−1 xn−1 = b0
⎪
⎪
⎪
⎨ a1,1 x1 + a1,2 x2 +· · ·+ a1,n−1 xn−1 = b1
a2,2 x2 +· · ·+ a2,n−1 xn−1 = b2
⎪
⎪
⎪ .. ..
⎪
⎪ . .
⎩
an−1,n−1 xn−1 =bn−1
-hBMHPSJUINF
Fonction S o l u t i o n _ r e m o n t e e (A , B) :
Donnees
A = A[ i ] [ j ] : matrice carrée
X =X [ i ] [ 0 ] , B=B [ i ] [ 0 ] : m a t r i c e s c o l o n n e s
somme : r é e l
i , j ,n : entiers
Debut
# r e s o u t p a r r e m o n t e e un SEL t r i a n g u l a i r e AX=b
n <−− L o n g u e u r (A) # nombre de l i g n e s ,
X <−− [ [ 0 ] pour i v a r i a n t de 0 à n −1]
Pour i v a r i a n t de n−1 à 0
F a i r e # xi = (bi − ai,i+1 xi+1 + · · · + ai,n−1 xn−1 ) /ai,i
somme <−−0
Pour j v a r i a n t de i +1 à n−1
Faire
somme <−− somme + A [ i ] [ j ] ∗ X [ j ] [ 0 ]
Fin F a i r e
X [ i ] [ 0 ] <−− (B [ i ] [ 0 ] − somme ) /A [ i ] [ i ]
Rkk
122
Fin F a i r e
Retourner (X)
Fin
Rkj
123
Ce qui coïncide également avec xi−1 .
• Conclusion : En sortie de la boucle principale, on a bien
X[n − 1][0] = xn−1 , . . . , X[0][0] = x0 .
-F QSPHSBNNF FO 1ZUIPO
def S o l u t i o n _ r e m o n t e e (A , B) :
# r e s o u t p a r r e m o n t e e un SEL t r i a n g u l a i r e
n= l e n (A)
X= [ [ 0 ] f o r i i n r a n g e ( n ) ]
f o r i i n r a n g e ( n−1,−1,−1) :
somme=0
f o r j i n r a n g e ( i +1,n ) :
somme=somme + A [ i ] [ j ] ∗ X [ j ] [ 0 ]
X [ i ] [ 0 ] = ( B [ i ] [ 0 ] − somme ) /A [ i ] [ i ]
r e t u r n (X)
#PÔUF Ë PVUJMT
Rk9
124
0QÏSBUJPOT ÏMÏNFOUBJSFT TVS MFT MJHOFT EhVO TZT
UÒNF PV EhVOF NBUSJDF
-FT BMHPSJUINFT
Fonction C h e r c h e r _ p i v o t (A , i )
Donnees
A : matrice
i , j ,k,n : entiers
Debut
n <−− L o n g u e u r (A) # nombre de l i g n e s de A
j <−− i
Pour k v a r i a n t de i +1 à n−1
Faire
Si |A[ k ] [ i ] | > |A[ j ] [ i ] |
A l o r s j <−− k
Fin S i
Retourner ( j )
Fin
Fonction E c h a n g e r _ l i g n e (A , i , j )
Donnees
A : matrice
i , j ,k,n : entiers
Rk8
125
temp : r é e l
Debut
n <−− L o n g u e u r (A [ 0 ] ) # nombre de c o l o n n e s de A
Pour k v a r i a n t de 0 à n−1
Faire
temp <−− A [ i ] [ k ]
A [ i ] [ k ] <−− A [ j ] [ k ]
A [ j ] [ k ] <−− temp
Fin F a i r e
Fin
Fonction A j o u t e r _ l i g n e (A , i , j , mu)
Donnees
A : matrice
i , j ,k,n : entiers
mu : r é e l
Debut
n <−− L o n g u e u r (A [ 0 ] ) # nombre de c o l o n n e s de A
Pour k v a r i a n t de 0 à n−1
Faire
A [ i ] [ k ] <−− A [ i ] [ k ] + mu ∗ A [ j ] [ k ]
Fin F a i r e
Fin
Rke
126
Terminaison : Les terminaisons de ces boucles inconditionnelles
ne posent pas de problème.
Complexité :
• Le nombre d’itérations dans la fonction *?2`+?2`nTBpQi est de
n − i − 1. À chaque passage, il y a 5 OPEL, donc la complexité de
cet algorithme est de 5(n − i) − 2.
• Le nombre d’OPEL de la fonction 1+?M;2`nHB;M2 est de 4n+1.
• Le nombre d’OPEL de la fonction DQmi2`nHB;M2 est également
def E c h a n g e r _ l i g n e (A , i , j ) :
n=l e n (A [ 0 ] )# l e nombre de c o l o n n e s
for k in range (n) :
A[ i ] [ k ] ,A[ j ] [ k ] = A[ j ] [ k ] , A[ i ] [ k ]
def A j o u t e r _ l i g n e (A , i , j , mu) :
n=l e n (A [ 0 ] )# l e nombre de c o l o n n e s
for k in range (n) :
A [ i ] [ k ] = A [ i ] [ k ] + mu ∗ A [ j ] [ k ]
Rkd
127
coefficients diagonaux non nuls. En effet, considérons le système de
Cramer :
⎧
⎪ (0) (0) (0) (0)
⎪
⎪ a0,0 x0 + a0,1 x1 + · · · + a0,n−1 xn−1 = b0
⎪
⎪
⎪
⎨ a(0) x0 + a(0) x1 + · · · + a(0) xn−1 = b(0)
1,0 1,1 0,n−1 1
⎪ .. .. .. ..
⎪
⎪
⎪ . . . .
⎪
⎪
⎩ (0) (0) (0) (0)
an−1,0 x0 + an−1,1 x1 + · · · + an−1,n−1 xn−1 = bn−1
(0)
où le pivot ã0,0 est en première position.
[2] Ajouter aux lignes un multiple de celle du pivot : À pré-
sent, nous allons éliminer l’inconnue x0 des n − 1 dernières lignes
du système en leur ajoutant le bon multiple de L0 . Plus précisément,
Rk3
128
on effectue les opérations élémentaires :
(0)
ãi,0
∀i ∈ [[1, n − 1]], Li ← L i − (0)
· L0
ã0,0
-hBMHPSJUINF
Fonction S o l u t i o n _ G a u s s (A , B)
Donnees
A , vA : m a t r i c e s c a r r é e s s o u s f o r m e de l i s t e
B , vB : m a t r i c e s c o l o n n e s s o u s f o r m e de l i s t e
i , j ,k,n : entiers
mu : r é e l
Debut
RkN
129
n <−− L o n g u e u r (A)
vA <−− A #on t r a v a i l l e s u r d e s c o p i e s de A
vB <−− B # et de B que l ‘ on p o u r r a m o d i f i e r
# t r i g o n a l i s a t i o n du s y s t è m e
Pour i v a r i a n t de 0 à n−1
Faire
j <−− C h e r c h e r _ p i v o t ( vA , i )
Si j < i
A l o r s # r e m o n t e r l a l i g n e du p i v o t
E c h a n g e r _ l i g n e ( vA , i , j )
E c h a n g e r _ l i g n e ( vB , i , j )
Fin S i
Pour k v a r i a n t de i +1 à n−1
F a i r e # é c h e l o n n e r s o u s vA [ i ] [ i ]
mu= −vA [ k ] [ i ] / vA [ i ] [ i ]
A j o u t e r _ l i g n e ( vA , k , i , mu)
A j o u t e r _ l i g n e ( vB , k , i , mu)
# r é s o l u t i o n par remontée
Retourner S o l u t i o n _ r e m o n t e e ( vA , vB ) )
Fin
Rjy
130
Conformément à ce qui a été expliqué précédemment, on sait qu’en
sortie de boucle, après n étapes, A(n) est une matrice triangulaire
supérieure à coefficients diagonaux tous non nuls et que
AX = B ⇐⇒ A(n) X = B (n)
-F QSPHSBNNF FO 1ZUIPO
def S o l u t i o n _ G a u s s (A , B) :
" " R é s o l u t i o n de AX = B " "
n = l e n (A)
vA = [ A [ i ] [ : ] f o r i i n r a n g e ( n ) ]
vB = [ B [ i ] [ : ] f o r i i n r a n g e ( n ) ]
# t r i g o n a l i s a t i o n du s y s t è m e
for i in range (n) :
j = C h e r c h e r _ p i v o t ( vA , i )
if j > i :
E c h a n g e r _ l i g n e ( vA , i , j )
E c h a n g e r _ l i g n e ( vB , i , j )
f o r k i n r a n g e ( i +1,n ) :
mu=−vA [ k ] [ i ] / f l o a t ( vA [ i ] [ i ] )
A j o u t e r _ l i g n e ( vA , k , i , mu)
A j o u t e r _ l i g n e ( vB , k , i , mu)
# r e s o l u t i o n par remontee
r e t u r n ( S o l u t i o n _ r e m o n t e e ( vA , vB ) )
RjR
131
#PÔUF Ë PVUJMT
(S) AX = B
Rjk
132
5SPJTJÒNF QBSUJF
Partie 3
Algorithmes
de deuxième année
Algorithme
Le mot algorithme, anagramme du mot logarithme, semble
tout droit tiré de vocables grecs. Il n’en est rien puisqu’il
provient du nom latinisé puis francisé du mathématicien persan
LE SAVIEZ-VOUS ?
Dans tout le chapitre, on décrit des algorithmes pour trier des listes
de nombres. On spécifie ici le type entier pour les éléments des listes
considérées, mais les fonctions P YTHON écrites fonctionnent aussi
bien avec des listes contenant des entiers et/ou des flottants.
Rj9
134
À la dernière étape on a recopié le 4 stocké à la place du dernier
élément déplacé.
-hBMHPSJUINF
Fonction T r i I n s e r t i o n ( L )
Donnees
L : l i s t e d ‘ entiers ,
a , i , j : entier
Debut
Pour i v a r i a n t de 1 à l e n ( L )
Faire
a <−− L [ i ]
j <−− i
Algorithmes de 2e année
Tant Que j > 0 et L [ j −1] > a
Faire
L [ j ] <−− L [ j −1]
j <−−j −1
Fin F a i r e
L [ j ] <−− a
Fin F a i r e
Retourner L
Fin
Rj8
135
Terminaison : La suite des valeurs de j dans la boucle Tant Que
est à valeurs entières et strictement décroissante. Cette boucle ter-
mine donc forcément, ne serait-ce qu’à cause de la condition j > 0.
Correction : On a pour invariant de boucle : "la liste formée des
éléments de G d’indice strictement inférieur à i est triée".
Complexité : On note n la longueur de la liste G. Dans le pire
des cas, la liste est constituée de valeurs décroissantes. On a alors i
passages dans la boucle Tant Que et comme on a 7 OPEL dans cette
boucle ainsi que 3 OPEL dans la boucle Pour on obtient un total de
n
n(n + 1) 7n2 + 13n
3 + 7i = 3n + 7 =
2 2
i=1
-F QSPHSBNNF FO 1ZUIPO
def T r i I n s e r t i o n ( L ) :
for i in range (1 , len (L )) :
a=L [ i ]
j=i
w h i l e j >0 and L [ j −1] > a :
L [ j ]=L [ j −1]
j=j −1
L [ j ]= a
return L
5SJ SBQJEF
Rje
136
Pour faire
faire cela,
cela, on
on commence
commencepar paréchanger
échangerlelepivot
pivotavec
aveclelepremier
premier
élément de G.
élément de G. On
On parcourt
parcourtensuite
ensuiteles élémentsdedeG.G.SiSionontrouve
leséléments trouve
un élément
élément inférieur
inférieur ou
ouégal
égalauaupivot,
pivot,ononéchange
échangelelepivot
pivotavec
aveccetcet
élément
élément puis
puis le
lepivot
pivotavec
avecl’élément
l’élémentprécédemment
précédemmentà àdroite
droite dudupivot.
pivot.
On peut
peut représenter
représenterun unexemple
exemplede decette
cetteopération
opérationavec
aveclesles
diagrammes
diagrammes
suivants
suivants (on
(on aa déjà
déjà considérés
considéréslele44etetlele6,6,que
quel’on
l’ona alaissés
laissésà leur
à leur
place car
car ils
ils sont
sontstrictement
strictementsupérieurs
supérieursauaupivotpivot3)3): :
On donne
donne maintenant
maintenantl’algorithme
l’algorithmededelalapartition
partition: :
-hBMHPSJUINF
-hBMHPSJUINF
Fonction PPaarrtti itti ioonn((LL, ,pp) )
Fonction
Algorithmes de 2e année
Donnees
Donnees
L : ll ii ss tt ee dd‘‘ eenntti ieerrss , ,
p , i , jj :: eennttiieerrss
Debut
Debut
LL [[ 00]] ,,LL[[pp]] <−−
<−− LL[ [pp] ], ,LL[ 0[ 0] ]
ii <−−
<−− 00
Pour jj vvaarri iaanntt de
Pour de 11 àà l el enn( L( L) )
FFaaiirree
SSii LL[[ jj]<=L
]<=L[ [i i] ]
AAlloorrss
LL[[ i i ]], , LL[ [j j] ] <−−
<−− LL[ [j j] ], , L L[ i[ ]i ]
LL[[ jj]], , LL[ [i i+1]+1] <−−
<−−LL[ [i +1] i +1], , L L [ j[ ]j ]
ii <−−
<−− i i+1 +1
Fin
Fin SSii
Fin
Fin FFaaiirree
Retourner ((LL, ,i i))
Retourner
Fin
Rjd
Rjd
137
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée une liste d’entiers
H2MUGV@R itérations.
Correction : On a l’invariant de boucle : "les éléments d’indice
-F QSPHSBNNF FO 1ZUIPO
def P a r t i t i o n ( L , p ) :
L[0] , L[p] = L[p] , L[0]
i = 0
for j in range (1 , len (L )) :
i f L [ j ] <= L [ i ] :
L[ i ] , L[ j ] = L[ j ] , L[ i ]
L [ j ] , L [ i +1] = L [ i +1] , L [ j ]
i = i +1
return (L , i )
Rj3
138
L’algorithme s’arrête ici car les listes sur lesquelles on devrait refaire
l’opération sont de longueur inférieure ou égale à 1.
Nous choisissons ici la position du pivot au hasard dans la partie de
liste considérée. On effectuera ce tirage au hasard en python à l’aide
de la fonction `/X`M/BMiUV de la bibliothèque `M/QK. On pourrait
aussi prendre systématiquement le premier ou le dernier élément.
-hBMHPSJUINF
Fonction T r i R a p i d e ( L )
Donnees
L , L1 , L2 : l i s t e d ‘ e n t i e r s ,
p, k : entiers
Debut
S i l e n ( L)<=1
Alors
Algorithmes de 2e année
Retourner ( L )
Sinon
p <−− e n t i e r au h a s a r d e n t r e 0 et l e n ( L )
L , k <−− P a r t i t i o n ( L , p )
L1 <−− T r i R a p i d e ( L [ 0 : k ] )
L2 <−− T r i R a p i d e ( L [ k +1 :])
Retourner L1+[L [ k ] ] + L2
Fin S i
Fin
RjN
139
inférieures à celle de la liste donnée en entrée. L’arbre d’exécution
de cette fonction récursive est donc de hauteur au plus H2MUGV.
Correction : On démontre la correction de cet algorithme à l’aide
-F QSPHSBNNF FO 1ZUIPO
def T r i R a p i d e ( L ) :
i f l e n ( L)<=1 :
return (L)
p = r d . r a n d i n t ( 0 , l e n ( L) −1)
L , k = P a r t i t i o n (L , p)
L1 = T r i R a p i d e ( L [ 0 : k ] )
L2 = T r i R a p i d e ( L [ k +1 :])
r e t u r n L1+[L [ k ] ] + L2
def P a r t i t i o n 2 ( L , p , a , b ) :
L[a] , L[p] = L[p] , L[a]
i = a
f o r j i n r a n g e ( a +1,b+1) :
i f L [ j ] <= L [ i ] :
L[ i ] , L[ j ] = L[ j ] , L[ i ]
L [ j ] , L [ i +1] = L [ i +1] , L [ j ]
i = i +1
return ( i )
R9y
140
def T r i R a p i d e 2 ( L , a , b ) :
i f b−a>0 :
p = rd . r a n d i n t (a , b)
k = P a r t i t i o n 2 (L , p , a , b)
T r i R a p i d e 2 ( L , a , k −1)
T r i R a p i d e 2 ( L , k +1,b )
Algorithmes de 2e année
-hBMHPSJUINF
Fonction M e d i a n e L o c a l e ( L , a , b )
Donnees
L : liste d‘ entiers
a , b : entiers
Debut
Retourner T r i I n s e r t i o n ( L [ a :b + 1 ] ) [ ( b−a ) / / 2 ) ]
Fin
Fonction MedianeDesMedianes ( L )
Donnees
L , L1 : l i s t e s d ‘ e n t i e r s ,
i : entiers
Debut
Si l e n (L) < 5
R9R
141
Alors
Retourner ( M e d i a n e L o c a l e ( L , 0 , l e n ( L ) −1))
Sinon
L1 <−− [ ]
Pour i v a r i a n t de 0 à l e n ( L ) / / 5
Faire
L1 <−− L1+[ M e d i a n e L o c a l e ( L , 5 ∗ i , 5 ∗ i +4)]
Fin F a i r e
Retourner ( MedianeDesMedianes ( L1 ) )
Fin S i
Fin
-F QSPHSBNNF FO 1ZUIPO
def M e d i a n e L o c a l e ( L , a , b ) :
r e t u r n T r i I n s e r t i o n ( L [ a :b + 1 ] ) [ ( b−a ) / / 2 ]
def MedianeDesMedianes ( L ) :
i f l e n ( L)<5 :
r e t u r n M e d i a n e L o c a l e ( L , 0 , l e n ( L) −1)
L1 = [ ]
for i in range (0 , len (L)//5) :
L1=L1+[ M e d i a n e L o c a l e ( L , 5 ∗ i , 5 ∗ i +4)]
r e t u r n MedianeDesMedianes ( L1 )
R9k
142
On peut maintenant écrire l’algorithme de recherche d’un élément de
rang fixé. On utilisera pour cela les fonctions J2/BM2.2bJ2/BM2b
et S`iBiBQMk.
-hBMHPSJUINF
Fonction ElementRangk ( L , a , b , k )
Donnees
L, : l i s t e d ‘ entiers ,
a , b, k, i , m : entiers
Debut
m <−− MedianeDesMedianes ( L [ a :b +1])
i <−− 0
Tant Que L [ i ] != m
Faire
i <−− i + 1
Fin F a i r e
p <−− P a r t i t i o n 2 ( L , i , a , b , )
S i k == p
Alors
Retourner ( L [ k ] )
Fin SI
Si k < p
Algorithmes de 2e année
Alors
Retourner ( ElementRangk ( L , a , p −1, k ) )
Sinon
Retourner ( ElementRangk ( L , p+1,b , k ) )
Fin S i
Fin
R9j
143
Correction : La définition de la fonction S`iBiBQMk assure que
l’élément de rang k est toujours entre les a et b utilisés dans les appels
à la fonction, ce qui garantit la correction de l’algorithme.
Complexité : C’est ici délicat. On admettra que la complexité
obtenue est linéaire en la longueur de la liste G.
5SJ 'VTJPO
-hBMHPSJUINF
Fonction F u s i o n ( L1 , L2 )
Donnees
L , L1 , L2 : l i s t e s d ‘ e n t i e r s ,
i , j : entiers
Debut
L <−− [ ]
i <−− 0
j <−− 0
Tant Que i < l e n ( L1 ) et j < l e n ( L2 )
Faire
S i L1 [ i ] < L2 [ j ]
Alors
L <−− L + [ L1 [ i ] ]
i <−− i + 1
R99
144
Sinon
L <−− L + [ L2 [ j ] ]
j <−− j + 1
Fin SI
Retourner ( L+L1 [ i :]+L2 [ j : ] )
Fin
Algorithmes de 2e année
d’indices supérieurs à i dans GR et supérieurs à j dans Gk". Donc à
la sortie de la boucle, comme L1[i :] ou L2[j :] est vide, il suffit de
rajouter les deux pour que G contienne tous les éléments de GR et de
L2 et soit triée.
Complexité : On note n1 et n2 les longueurs des listes GR et Gk.
On a au pire, c’est-à-dire dans le cas où on effectue n1 + n2 − 1
passages dans la boucle 4+5(n2+n1−1) OPEL dans cet algorithme.
-F QSPHSBNNF FO 1ZUIPO
def F u s i o n ( L1 , L2 ) :
L=[]
i = 0
j = 0
w h i l e i < l e n ( L1 ) and j < l e n ( L2 ) :
i f L1 [ i ] < L2 [ j ] :
R98
145
L = L+[L1 [ i ] ]
i = i +1
else :
L = L+[L2 [ j ] ]
j=j +1
r e t u r n L+L1 [ i :]+L2 [ j : ]
-hBMHPSJUINF
Fonction T r i F u s i o n ( L )
Donnees
L , L1 , L2 : l i s t e d ‘ e n t i e r s ,
p, k : entiers
Debut
S i l e n ( L)<=1
R9e
146
Alors
Retourner ( L )
Sinon
L1 = T r i F u s i o n ( L [ 0 , l e n ( L ) / / 2 ] )
L2 = T r i F u s i o n ( L [ l e n ( L ) / / 2 : ] )
Retourner F u s i o n ( L1 , L2 )
Fin S i
Fin
une liste de longueur n dans le pire des cas, on voit aisément que l’on
Algorithmes de 2e année
a la relation de récurrence suivante pour tout entier naturel n :
-F QSPHSBNNF FO 1ZUIPO
def T r i F u s i o n ( L ) :
i f l e n ( L)<=1 :
return (L)
L1 = T r i F u s i o n ( L [ 0 , l e n ( L ) / / 2 ] )
L2 = T r i F u s i o n ( L [ l e n ( L ) / / 2 : ] )
r e t u r n F u s i o n ( L1 , L2 )
R9d
147
Pour terminer sur le tri fusion on donne des fonction P YTHON per-
mettant d’appliquer cet algorithme en place, en ne créant pas de
listes intermédiaires en machine, mais en faisant toutes les modifi-
cations dans la liste d’origine. Contrairement au tri rapide on perd
beaucoup en complexité en faisant ce changement, et on n’obtient
qu’un algorithme quadratique en la longueur de la liste.
def F u s i o n E n P l a c e ( L , a , b , c , d ) :
i=a
j=c
w h i l e i <=j −1 and j <=d :
i f L [ i ]<=L [ j ] :
i +=1
else :
k=j
w h i l e k>i :
L [ k −1] , L [ k]=L [ k ] , L [ k −1]
k=k−1
i=i +1
j=j +1
return L
def T r i F u s i o n ( L , a , b ) :
i f b−a<=0 :
return L
else :
return FusionEnPlace ( TriFusion (
T r i F u s i o n ( L , a , ( a+b ) / / 2 ) , ( a+b )//2+1 , b ) ,
a , ( a+b ) / / 2 , ( a+b )//2+1 , b )
"VUSFT USJT
R93
148
du minimum d’une liste (où le premier indice en lequel on le trouve).
L’idée de l’algorithme est alors de construire la liste triée en ajoutant
le minimum de ce qui reste à trier à chaque étape.
-hBMHPSJUINF
Fonction IndiceMinimum ( L , a , b )
Donnees
L : l i s t e d ‘ entiers ,
a , b , m, i : e n t i e r s
Debut
m <−− a
Pour i v a r i a n t de a+1 à b+1
Faire
S i L [ i ] < L [m]
Alors
m <−− i
Fin S i
Fin F a i r e
Retourner (m)
Fin
Fonction T r i S e l e c t i o n ( L )
Algorithmes de 2e année
Donnees
L : l i s t e d ’ entiers ,
i , m : entier
Debut
Pour i de 0 \ ‘ a l e n ( L )
Faire
m <−− IndiceMinimum ( L , i , l e n ( L) −1)
L [ i ] , L [m] <−− L [m] , L [ i ]
Fin Fai re
Retourner (L)
Fin
R9N
149
Terminaison : La boucle inconditionnelle termine après len(L)
itérations.
Correction : On a pour invariant de boucle : "la liste formée des
éléments de G d’indice strictement inférieur à i est triée et tous ses
éléments sont inférieurs ou égaux aux éléments de G d’indice supé-
rieur ou égal à i".
Complexité : On note n la longueur de la liste G. L’appel de la
-F QSPHSBNNF FO 1ZUIPO
def IndiceMinimum ( L , a , b ) :
m = a
f o r i i n r a n g e ( a +1, b+1) :
i f L [ i ] < L [m] :
m = i
return m
def T r i S e l e c t i o n ( L ) :
for i in range (0 , len (L )) :
m = IndiceMinimum ( L , i , l e n ( L) −1)
L [ i ] , L [m] = L [m] , L [ i ]
return (L)
R8y
150
-hBMHPSJUINF
Fonction T r i B u l l e s ( L )
Donnees
L : l i s t e d ‘ entiers ,
b : booléen
i ,m : e n t i e r
Debut
b <−− V r a i
m <−− l e n ( L)−1
Tant Que b
Faire
b <−− Faux
Pour i v a r i a n t de 0 à m
Faire
S i L [ i ] > L [ i +1]
Alors
L [ i ] , L [ i +1] <−− L [ i +1] , L [ i ]
b <−− V r a i
m <−− i +1
Fin S i
Fin F a i r e
Fin F a i r e
Algorithmes de 2e année
Retourner ( L )
Fin
R8R
151
ou égal à la valeur de m forment une liste triée et sont tous supérieurs
ou égaux aux éléments d’indices strictement inférieurs à m"
Complexité : On note n la longueur de G. Dans le pire des cas,
la liste G est triée dans le sens inverse. L’algorithme effectue alors
n passages dans la boucle Tant Que, m prend successivement les
valeurs de n − 1 à 1, et hormis lors du dernier passage, le test du Si
est toujours vérifié. On en déduit que l’on effectue :
n−1
3+n+ 6m + n = 3 + 2n + 3n(n − 1) = 3n2 − n + 3
m=1
-F QSPHSBNNF FO 1ZUIPO
def T r i B u l l e s ( L ) :
b = True
m = l e n ( L)−1
while b :
b = False
f o r i i n r a n g e ( 0 ,m) :
i f L [ i ] > L [ i +1] :
L [ i ] , L [ i +1] = L [ i +1] , L [ i ]
b = True
m = i +1
return L
R8k
152
-hBMHPSJUINF
-hBMHPSJUINF
Fonction T TrriiEEnnuum meerraattiioonn((LL,M)
,M)
Donnees
L , L1 , L2 :: ll ii ss tt ee ss dd‘‘ eennttiieerrss ,,
i , j : e n tt ii ee rr ss
Debut
L1 <−−
<−− [[00 pour pour ii vvaarriiaanntt de de 00 àà M+1]
M+1]
Pour i vv aa rriiaanntt de de 00 àà lleenn((LL))
Faire
L1
L1 [[ LL [[ ii ]] ]] <−−
<−− L1 L1[[LL[[ ii ]]]]++11
Fin F aaiirree
L2 <−−
<−− [[ ]]
Pour i vv aa rriiaanntt de de 00 àà M+1 M+1
Faire
L2
L2 <−− <−− L2 L2 ++ [[ ii pourpour jj de de 00 àà L1
L1[ [i i] ]] ]
Fin F aaiirree
Retourner ((L2
Retourner L2))
Fin
Analyse de cet
cet algorithme
algorithme ::
Spécification :: Cette
Spécification Cette fonction
fonctionprend
prenden
enentrée
entréeune
uneliste
listed’entiers
d’entiers
Algorithmes de 2e année
naturels G et un
un entier
entier naturel
naturelMM majorant
majorantles
leséléments
élémentsdedeGGetetretourne
retourne
la liste triée contenant
contenant les
les mêmes
mêmes éléments queG.G.
élémentsque
Terminaison :: On
Terminaison On aa ici
icideux
deuxboucles
bouclesinconditionnelles
inconditionnellesde
delen(L)
len(L)
et M + 1 itérations
itérations respectivement.
respectivement.
Correction :: La
La première
première boucle
boucle terminée,
terminée,chaque
chaqueentrée
entréededeL1
L1
contient le nombre
nombre d’apparitions
d’apparitions de de l’indice
l’indicelui
luicorrespondant
correspondantdansdans
G. Il suffit donc
donc bien
bien de
de construire
construire L2 L2 comme
comme dans
dans lala deuxième
deuxième
boucle Pour pour
pour obtenir
obtenir la
la liste
liste triée
triéedes
deséléments deG.G.
élémentsde
Complexité :: On
Complexité On note
note nn lala longueur
longueurdedeG.
G.On
Oneffectue
effectueMM++11++
2n + 1 + n OPEL
OPEL au
au total.
total. À
ÀM M fixé,
fixé,l’algorithme
l’algorithmeest
estdonc
donclinéaire
linéaire
en n.
R8j
R8j
153
-F QSPHSBNNF FO 1ZUIPO
def T r i E n u m e r a t i o n ( L ,M) :
L1 = [ 0 f o r i i n r a n g e ( 0 , M+1)]
for i in range (0 , len (L )) :
L1 [ L [ i ] ] = L1 [ L [ i ] ] + 1
L2 = [ ]
f o r i i n r a n g e ( 0 , M+1) :
L2 = L2 + [ i f o r j i n r a n g e ( 0 , L1 [ i ] ) ]
r e t u r n L2
#PÔUF Ë PVUJMT
R89
154
5SBJUFNFOU OVNÏSJRVF
5SBJUFNFOU OVNÏSJRVF
JNBHFT
EFT JNBHFT
3FQSÏTFOUBUJPO EFT
EFT JNBHFT
JNBHFT
Algorithmes de 2e année
et plus
plus particulièrement
particulièrement lele sous-module
sous-module
AK;2 de SAG.
Ainsi, une fois ces modules
modules importés
importés les
les instructions
instructions::
im=Image . open ( ’ image
image ..bmp
bmp ’’ ))
M=np . a r r a y ( im )
permettent de récupérer
récupérer dans
dans M
M lala matrice
matrice correspondant
correspondant ààl’image
l’image
du fichier image.bmp et
et les
les instructions
instructions
im = Image . f r o m aarrrraayy (M)(M)
im . s a v e ( ’ image . bmp
bmp ’’ ))
permettent de sauvegarder
sauvegarder l’image
l’image correspondant
correspondant àà lala matrice
matrice MM
dans un fichier image.bmp.
image.bmp. À À noter
noter que
que les
les nombres
nombres apparaissant
apparaissant
dans M doivent être codés
codés en
en uint8,
uint8, ce
ce qui
qui s’assure
s’assure en
en créant
créant lala
matrice avec MTX``vU -MTXmBMi3V.
-MTXmBMi3V.
R88
R88
155
Terminons en précisant qu’une image im dans P YTHON peut être
affichée à l’écran avec l’instruction
im . show ( )
1SFNJÒSFT NBOJQVMBUJPOT
def S y m e t r i e V e r t i c a l e (M) :
m = l e n (M)
n = l e n (M[ 0 ] )
M2 = np . a r r a y ( [ [ [ 0 , 0 , 0 ] f o r i i n r a n g e ( 0 , n ) ]
f o r m i n r a n g e ( 0 ,m) ] , np . u i n t 8 )
f o r i i n r a n g e ( 0 ,m) :
for j in range (0 , n) :
M2[ i , j ] = M[ i , n−1− j ]
r e t u r n (M2)
def R o t a t i o n Q u a r t D e T o u r (M) :
m = l e n (M)
n = l e n (M[ 0 ] )
M2 = np . a r r a y ( [ [ [ 0 , 0 , 0 ] f o r i i n r a n g e ( 0 , n ) ]
f o r m i n r a n g e ( 0 , n ) ] , np . u i n t 8 )
for i in range (0 , n) :
f o r j i n r a n g e ( 0 ,m) :
R8e
156
M2[ i , j ] = M[ j , n−1− i ]
r e t u r n (M2)
Algorithmes de 2e année
r e t u r n (M2)
Pour rechercher les contours existant dans une image, on peut utiliser
une première approche simple en marquant les points en lesquels les
changements des valeurs codant les pixels sont importants. Pour cela,
on calcule la somme des valeurs absolues des différences des entiers
de pi,j avec tous les pixels l’environnant. On marquera alors le pixel
en noir si le résultat dépasse un seuil que l’on s’est fixé à l’avance.
Pour simplifier le parcours, on ne considèrera que les pixels inté-
rieurs à l’image considérée.
R8d
157
-F QSPHSBNNF FO 1ZUIPO
def C o n t o u r s (M, S ) :
m=l e n (M)
n=l e n (M[ 0 ] )
M2=np . z e r o s ( (m, n ) , np . u i n t 8 )
f o r i i n r a n g e ( 1 ,m−1) :
print ( i )
f o r j i n r a n g e ( 1 , n−1) :
G=0
for a in range (0 ,3) :
for b in range (0 ,3) :
for k in range (0 ,3) :
G=G+a b s (M[ i , j ] [ k ]
−M[ i −1+a , j −1+b ] [ k ] )
i f G>S :
M2[ i , j ]=255
r e t u r n (M2)
R83
158
Suivant le noyau de convolution choisi, l’effet obtenu sur l’image
peut être très varié. Commençons par écrire des fonctions P YTHON
appliquant ce procédé. On utilisera une fonction intermédiaire modi-
fiant simplement un pixel étant donné la matrice de convolution N .
On prendra N à coefficients entiers et on utilisera un éventuel divi-
seur d après le calcul effectué avec N de façon à faire un maximum
de calculs avec des entiers.
Il faut se fixer une convention pour le travail sur le bord de l’image.
On utilisera ici les pixels du bord opposé pour le calcul, on pourrait
aussi simplement enlever les pixels du bord.
-F QSPHSBNNF FO 1ZUIPO
def C o n v o l u t i o n L o c a l e ( i , j ,M, N, d ) :
f o r a i n r a n g e ( 0 , l e n (M) ) ] , np . u i n t 8 )
S=np . a r r a y ( [ 0 , 0 , 0 ] )
for a in range (0 ,3) :
for b in range (0 ,3) :
S=S+(M[ i −1+a , j −1+b ] ∗N [ a , b ] ) / d
r e t u r n [ max ( min ( S [ 0 ] , 2 5 5 ) , 0 ) ,
max ( min ( S [ 1 ] , 2 5 5 ) , 0 ) , max ( min ( S [ 2 ] , 2 5 5 ) , 0 ) ]
Algorithmes de 2e année
def C o n v o l u t i o n (M, N, d ) :
m=l e n (M)
n=l e n (M[ 0 ] )
M=np . a r r a y ( [M[ − 1 ] ]
+[M[ k ] f o r k i n r a n g e ( 0 , l e n (M) ) ] )
M=np . a r r a y ( [ [M[ k ] [ − 1 ] ]
+ l i s t (M[ k ] ) f o r k i n r a n g e ( 0 , l e n (M) ) ] )
M=np . a r r a y ( [M[ k ] f o r k i n r a n g e ( 0 , l e n (M) ) ]
+[M[ 0 ] ] )
M=np . a r r a y ( [ l i s t (M[ k ] ) + [M[ k ] [ 0 ] ]
f o r k i n r a n g e ( 0 , l e n (M) ) ] )
M2 = np . a r r a y ( [ [ [ 0 , 0 , 0 ] f o r i i n r a n g e ( 0 , n ) ]
f o r j i n r a n g e ( 0 ,m) ] )
f o r i i n r a n g e ( 1 ,m+1) :
print ( i )
f o r j i n r a n g e ( 1 , n+1) :
R8N
159
M2[ i −1, j −1] =
C o n v o l u t i o n L o c a l e ( i , j ,M, N, d )
r e t u r n M2
• Floutage ou lissage
Pour flouter une image ou réduire un éventuel bruit on peut prendre
pour noyau la matrice :
⎛ ⎞
1 1 1
1⎝
1 1 1 ⎠
9
1 1 1
• Détection de contours
Pour faire ressortir les contours d’une image on peut prendre pour
noyau la matrice : ⎛ ⎞
0 1 0
⎝ 1 −4 1 ⎠
0 1 0
• Filtrage Gaussien
Pour essayer de faire disparaître un bruit naturel d’une image, on
peut prendre le noyau gaussien :
⎛ ⎞
1 2 1
1 ⎝
2 4 2 ⎠
16
1 2 1
Rey
160
$PEBHF FU USBOTNJTTJPO
Algorithmes de 2e année
sage, un autre caractère. Pour simplifier nous nous contenterons de
prendre des messages écrits en majuscules et nous ne traiterons que
les lettres du message.
Pour fixer la règle de substitution, on fixe une clé qui sera un mot.
On note C ce mot et N sa longueur. On note Ri le rang dans l’al-
phabet de la j-ième lettre de C et ri le rang dans l’alphabet de la
lettre en i-ième position dans le message. Alors la lettre écrite dans
le message chiffré en i-ième position sera la lettre de rang le reste de
la division par 26 de ri + Rj si j est le reste de la division de i par N .
Un exemple sera plus parlant ! Si on prend C = "CAUCHY" et si on
souhaite coder "SCHWARZ" alors :
• Le S sera codé par la lettre de rang 18 (le rang de S dans l’alphabet)
plus 2 (le rang de C dans l’alphabet), soit 20.
ReR
161
• Le C sera codé par la lettre de rang 2 (le rang de C dans l’alphabet)
plus 0 (le rang de A dans l’alphabet), soit 2.
• Le H sera codé par la lettre de rang 7 (le rang de H dans l’alphabet)
plus 20 (le rang de U dans l’alphabet), soit 1 (on prend le reste de la
division de 27 par 26).
• Le W sera codé par la lettre de rang 22 (le rang de W dans l’alpha-
bet) plus 2 (le rang de C dans l’alphabet), soit 24.
• Le A sera codé par la lettre de rang 0 (le rang de A dans l’alphabet)
plus 7 (le rang de H dans l’alphabet), soit 7.
• Le R sera codé par la lettre de rang 17 (le rang de R dans l’alpha-
bet) plus 24 (le rang de Y dans l’alphabet), soit 15 (on prend le reste
de la division de 41 par 26)
• Le Z sera codé par la lettre de rang 25 (le rang de Z dans l’alpha-
bet) plus 2 (le rang de C dans l’alphabet) soit 1 (on prend le reste de
la division de 28 par 26).
Le message chiffré sera donc finalement "UCBYHPB".
On donne l’algorithme de chiffrement et les fonctions P YTHON pour
le chiffrement et le déchiffrement. Le déchiffrement se faisant sim-
plement en soustrayant le rang de la lettre de la clé au lieu de l’ajou-
ter.
-hBMHPSJUINF
Fonction C h i f f r e m e n t V i g e n e r e (M, C)
Donnees
M, C , M1 : c h a î n e s de c a r a c t è r e s ,
i , j , N : entiers
Debut
N <−− l e n (C)
M1 <−− " "
Pour i v a r i a n t de 0 à l e n (M)
Faire
M1 <−− M1 + C a r a c t e r e (
( Rang (M[ i ])+ Rang (C [ i%N] ) ) % 2 6 )
Fin F a i r e
Rek
162
Retourner M1
Retourner M1
Fin
Analyse de cet
cet algorithme
algorithme ::
Spécification :: Cette
Spécification
Cette fonction
fonction prend
prend en
en entrée
entréedeux
deuxchaînes
chaînesdede
caractères J et
et *
* et
et retourne
retourne le
le chiffrement
chiffrement de de Vigenère
Vigenèrede deJJen en
utilisant comme clé *.
comme clé *.
Terminaison :: La
Terminaison
La boucle
boucleinconditionnelle
inconditionnellese setermine aprèsH2MUJV
termineaprès H2MUJV
itérations.
Complexité :: On
Complexité
On obtient
obtient une
une complexité
complexitélinéaire
linéaireen
enlalalongueur
longueur
de J.
-F
-F QSPHSBNNF
QSPHSBNNF FO
FO 1ZUIPO
1ZUIPO
Algorithmes de 2e année
f o r i iinn rraannggee ((00 ,, lleenn(M) (M))) ::
M1
M1 = = M1
M1 + + cchhrr (((((((( oorrdd(M[
(M[ i i ]])) ++
oorrdd(C(C[[ i%N]))
i%N]))−130)%26)+65)
−130)%26)+65)
r e t u r n M1 M1
4PNNFT EF DPOUSÙMF
DPOUSÙMF DPEFT
DPEFT DPSSFDUFVST
DPSSFDUFVST
Toujours dans le
le cadre
cadre de
de la
la transmission
transmission d’information,
d’information,on onconsi-
consi-
dère maintenant
maintenant un
un problème
problème un un peut
peut différent.
différent.Désormais,
Désormais,on onsou-
sou-
haite déterminer
déterminer si
si le
le message
message transmis
transmis aa été
étéaltéré
altéréet,
et,dans
dansl’idéal,
l’idéal,
on souhaite pouvoir
pouvoir retrouver
retrouver le le message
message initial
initialsisides
deserreurs
erreurssont
sont
apparues.
De façon à pouvoir
pouvoir repérer
repérer l’apparition
l’apparitiond’une
d’uneerreur,
erreur,ononvavaagrandir
agrandir
un peu le message
message en
en lui
lui ajoutant
ajoutantune
uneinformation
informationsur
sursasastructure.
structure.SiSi
Rej
Rej
163
le message est modifié
modifié on
on pourra
pourra repérer
repérerune
uneincohérence
incohérenceentre
entrecette
cette
information et la
la nouvelle
nouvelle structure
structureobtenue.
obtenue.
On se limitera àà un
un exemple
exemple très
très simple
simple de
de somme
sommede
decontrôle
contrôle: :lele
bit de parité.
On transmettra ici
ici un
un message
message enen binaire
binairesoussouslalaforme
formed’une
d’unechaîne
chaîne
de caractères. Si
Si le
le message
message est ...bnn on
est bb00...b on appelle
appelle bitbitde
deparité
parité
n+1 de
de
n+1
ce message le bitbit bbn+1
n+1 ∈ ∈ {0, 1} tel
{0,1} tel que
que lala somme
sommeSSnn == i=0 i=0bbii
soit paire. Le nouveau
nouveau message
message est
est alors
alors bb00...b
...bn+1
n+1 et
eton
on pourra
pourra dé-
dé-
tecter une erreur
erreur dans
dans lele message
message reçureçu sisi lala somme
sommeSSnnest estimpaire
impaire
(on détecte plus
plus généralement
généralement s’ils’il yyaaun unnombre
nombreimpairimpaird’erreurs).
d’erreurs).
-F
-F QSPHSBNNF
QSPHSBNNF FO
FO 1ZUIPO
1ZUIPO
def C o n t r oo ll ee P
Paarriittee (M)
(M) ::
S=0
f o r i iinn rraannggee ((00 ,, lleenn(M)
(M))) ::
S=S+i
S=S+i nn tt (M[ (M[ ii ]]))
i f S%2
S%2 == == 00 ::
r e ttuurrnn TrueTrue
else :
r e ttuurrnn FFaallssee
Re9
Re9
164
peut
peutconstruire
construireetetdécrire
décrirede
defaçon
façonplus
plus sophistiquée
sophistiquée que
que ce
ce que
que nous
faisons
faisonsdans
danscet
cetexemple
exemplesimple.
simple.
Nous
Nousconsidérons
considéronslalatransmission
transmission d’und’un message
message constitué
constitué de de quatre
quatre
bitsbb11bb22bb33bb44. . Le
bits Le message
message qui qui sera
sera transmis
transmis serasera constitué
constitué de de sept
bits.
bits.Nous
Nousallonsallonsen eneffet
effetrajouter
rajouterdes
desbits
bitsde
deparité
parité pp11,, pp22 et et pp33 corres-
corres-
pondant
pondantrespectivement
respectivementaux aux messages
messages bb11bb22bb44,, bb11bb33bb44 et
et bb22bb33bb44. Une
erreur
erreursursurun undes desbits
bitssera
seraindiquée
indiquée par
par le
le fait
fait qu’un
qu’un des des bit
bit dede parité
auaumoins
moinsne necorrespondra
correspondra pas. pas. De
De plus,
plus, la
la configuration
configuration des des bits
bits de
parité
paritéerronés
erronésprécise préciselalaposition
position dede l’erreur
l’erreur!! OnOn envoie
envoie en en pratique
pratique
lelemessage
messagepp11pp22bb11pp33bb22bb33bb44 car
car nous
nous verrons
verrons queque cette
cette configuration
configuration
permet
permetd’automatiser
d’automatiserleledécodage.
décodage.
Prenons
Prenonsun unexemple
exemple :: sisi nous
nous recevons
recevons le le message
message ’1111100’
’1111100’ alors
lelebit
bitde paritépp11 est
deparité estfaux,
faux, lele bit
bit de
de parité
parité p2
p2 est
est correct
correct et
et le
le bit de
parité
paritépp33est
estcorrect.
correct.Dans
Danscece cascas la
la seule
seule possibilité
possibilité est
est que
que l’erreur
l’erreur
(qui
(quidoit
doitêtre
êtreunique
unique!)!)aaeueulieu
lieusur
sur pp11!!
Pour
Pourdécoder
décoderefficacement
efficacementlelemessage
messageon on peut
peut recourir
recourir àà une
une matrice
matrice
de
decontrôle
contrôlepour
pource
cecode.
code.On
Ondéfinit
définit la
la matrice
matrice HH par
par ::
⎛
⎛ ⎞
⎞
00 00 00 11 11 11 11
Algorithmes de 2e année
H
H= ⎝ 00 11 11 00 00 11 11 ⎠
=⎝ ⎠..
11 00 11 00 11 00 11
On appelle syndrôme
On appelle syndrôme lele produit
produit de
de cette
cette matrice
matrice par
par la
la colonne
colonne
corespondant
corespondantau au message
message reçu.
reçu. Ainsi,
Ainsi, toujours
toujours avec
avec l’exemple
l’exemple pré-
cédent,
cédent,lelesyndrôme
syndrômesera
sera::
⎛ 11 ⎞
⎛ ⎞
⎛
⎛ ⎞
⎞ 11 ⎛⎛ ⎞ ⎞
00 00 00 11 11 11 11 ⎜ ⎜ 11 ⎟
⎟ 00
⎠⎜⎜ ⎟ ⎟ ⎝
⎝ 00 11 11 00 00 11 11 ⎠
ss==⎝ ⎜ 11 ⎟
⎜ ⎟== ⎝ 00 ⎠
⎠
⎝ 11 ⎠
⎝ ⎠
11 00 11 00 11 00 11 00 11
00
Re8
Re8
165
On peut remarquer que H a été construite⎛ de manière
⎞ à ce que ce
p1
produit donne comme résultat la colonne ⎝ p2 ⎠.
p3
Le positionnement des bits de parité dans le message fait que le syn-
drôme, interprété en binaire, donne le numéro du bit sur lequel une
erreur a été commise. Ainsi ici, (001)2 code 1 en binaire et l’erreur a
bien eu lieu sur le premier bit transmis, p1 .
On peut maintenant écrire des fonctions de codage et décodage pour
le code de Hamming(7,4).
def c o d a g e (M) :
p1 = B i t D e P a r i t e (M[ 0 ] +M[ 1 ] +M[ 3 ] ) [ − 1 ]
p2 = B i t D e P a r i t e (M[ 0 ] +M[ 2 ] +M[ 3 ] ) [ − 1 ]
p3 = B i t D e P a r i t e (M[ 1 ] +M[ 2 ] +M[ 3 ] ) [ − 1 ]
r e t u r n p1+p2+M[ 0 ] + p3+M[ 1 : ]
def d e c o d a g e (M) :
H = np . a r r a y ( [ [ 0 , 0 , 0 , 1 , 1 , 1 , 1 ] ,
[0 ,1 ,1 ,1 ,0 ,0 ,1 ,1] ,[1 ,0 ,1 ,0 ,1 ,0 ,1]])
X = np . a r r a y ( [ [ i n t (M[ i ] ) ] f o r i i n r a n g e ( 7 ) ] )
Y = np . d o t (H, X)
M1 = " "
for i in range (0 ,3) :
M1 = M1 + s t r (Y [ i , 0 ] % 2 )
a = i n t (M1, 2 )
i f a == 0 :
return M
M2=" "
for i in range (0 ,7) :
i f a == i + 1 :
M2 = M2 + s t r ( ( i n t (M[ i ])+1)%2)
else :
M2 = M2 + M[ i ]
r e t u r n M2
Ree
166
(SBQIFT
Algorithmes de 2e année
Red
167
On dit qu’un graphe, orienté ou non, est pondéré si à chaque arête
ou arc du graphe est associé un nombre réel (généralement positif)
appelé poids de cet arc. Ce qui peut se représenter par :
Re3
168
Dans le cas des graphes des trois figures précédentes, on obtient les
matrices suivantes :
⎛ ⎞
0 1 0 1 0 0 0
⎜ 1 0 1 1 1 0 0 ⎟
⎜ 0 1 0 0 1 0 0 ⎟
⎜ ⎟
⎜ 1 1 0 0 1 1 0 ⎟
⎜ ⎟
⎜ 0 1 1 1 0 1 1 ⎟
⎝ 0 0 0 1 1 0 1 ⎠
0 0 0 0 1 1 0
⎛ ⎞
0 0 0 0 0 0 0
⎜ 1 0 0 0 0 0 0 ⎟
⎜ 0 1 0 0 0 0 0 ⎟
⎜ ⎟
⎜ 1 1 0 0 0 0 0 ⎟
⎜ ⎟
⎜ 0 1 1 1 0 0 0 ⎟
⎝ 0 0 0 1 1 0 0 ⎠
0 0 0 0 1 1 0
⎛ ⎞
∞ ∞ ∞ ∞ ∞ ∞ ∞
⎜ 7 ∞ ∞ ∞ ∞ ∞ ∞ ⎟
⎜ ∞ 8 ∞ ∞ ∞ ∞ ∞ ⎟
⎜ ⎟
⎜ 5 9 ∞ ∞ ∞ ∞ ∞ ⎟
⎜ ⎟
⎜ ∞ 7 5 15 ∞ ∞ ∞ ⎟
⎝ ∞ ∞ ∞ 6 8 ∞ ∞ ⎠
Algorithmes de 2e année
∞ ∞ ∞ ∞ 9 11 ∞
ReN
169
du plus court chemin trouvé jusqu’ici menant à ce sommet depuis g
et le dernier sommet emprûnté pour ce chemin.
• On initialise la table à (0, g) pour g et (∞, x) pour le sommet x.
Le sommet g est donc considéré comme traité.
• On détermine le voisin non traité d’un des sommets traités le plus
proche de g en comparant les sommes pour chaque sommet non traité
s1 et chaque sommet traité s2 de la distance entre s1 et s2 et de la
distance stockée dans la table pour s2 .
• On associe au sommet s1 le plus proche trouvé dans l’étape précé-
dente la somme minimale obtenue et le sommet s2 pour lequel elle a
été obtenue.
• On détermine pour chaque sommet si déjà traité avant ce nouveau
sommet s1 si la somme de la longueur de l’arc le joignant à s1 et de
la distance stockée dans la table pour s1 est inférieure à la distance
stockée précédemment pour si . Si c’est le cas on écrit la somme dans
la table et y associe le sommet s1 .
• On recommence jusqu’à obtenir comme sommet le plus proche
le sommet cible, c’est-à-dire a ici, ou jusqu’à avoir traité tous les
sommets du graphe.
Pour écrire cet algorithme on utilisera ici plusieurs sous-fonctions.
• La fonction Dist déterminera la distance au sommet initial d’un
sommet s donné, obtenue en sommant les distances obtenue précé-
demment et la distance au sommet s correspondant.
• La fonction SHmbS`Q+?2 utilisera la fonction Dist pour déterminer
le sommet pour lequel on obtiendra la plus petite distance cumulée.
• La fonction 1MH2p2 permettra d’enlever un sommet de la liste des
sommets restant à traiter.
• La fonction *?2KBM donnera le chemin obtenu une fois la table
terminée.
• La fonction .BDFbi` appliquera l’algorithme.
On ne détaillera pas les algorithmes pour 1MH2p2 et *?2KBM, qui sont
très simples. On peut tout du moins remarquer qu’ils sont linéaires
en la taille de leurs entrées.
Rdy
170
-hBMHPSJUINF
-hBMHPSJUINF
Fonction D D iisstt (A
(A,, Table
Table ,, ss))
Donnees
A , T a b l e :: ll ii ss tt ee ss de
de lliisstteess
s , i : e n tt ii ee rr
Debut
d <−− [[ ii nn ff ii nn ii ,, 00]]
Pour i vv aa rriiaanntt de de 00 àà lleenn(A) (A)
Faire
Si T Taabbllee [[ ii ]][[11]] +
+ AA[[ ii ]][[ ss]] << dd[ [00] ]
A lloorrss
dd <−−
<−− [[ TTaabbllee [[ ii ]][[11]] ++ AA[ [i i ] ][ [ss] ], , i i] ]
Fin
Fin SSii
Fin F aaiirree
Retourner ((dd))
Retourner
Fin
Analyse de cet
cet algorithme
algorithme ::
Spécification :: Cette
Spécification Cettefonction
fonctionprend
prenden entréeune
enentrée uneliste
listede
delistes
listes
décrivant la matrice
matrice d’adjacence
d’adjacence dudu graphe,
graphe,Table,
Table,une
uneliste
listededelistes
listes
contenant la table
table courante
courante pour
pourl’algorithme
l’algorithmede deDijkstra
Dijkstraetetssl’indice
l’indice
Algorithmes de 2e année
du sommet considéré.
considéré. Elle
Elle retourne
retourne lala somme
sommede dedistance
distanceminimale
minimale
obtenue pour le le sommet
sommet ss ainsi
ainsi que
que l’indice
l’indicedudusommet
sommetpourpourlequel
lequel
elle l’a été.
Terminaison :: La
Terminaison La boucle
boucleinconditionnelle
inconditionnellese
setermine aprèsH2MUV
termineaprès H2MUV
itérations, c’est-à-dire
c’est-à-dire en
enautant
autantd’itérations
d’itérationsque
quede
desommets
sommetsdudugraphe.
graphe.
Complexité :: On
Complexité On obtient
obtient une
une complexité
complexitélinéaire
linéairepar
parrapport
rapportau
au
nombre de sommets
sommets du
du graphe.
graphe.
-hBMHPSJUINF
-hBMHPSJUINF
Fonction P PlluussP Prroocchhee (A
(A,, Table
Table ,,LL))
Donnees
A , T a b l e :: ll ii ss tt ee ss de
de lliisstteess
L : l i s t e dd ‘‘ ee nn tt iieerrss
i : entier
m i n i : t r i pp ll ee tt dede nombres
nombres
RdR
RdR
171
Debut
m i n i <−− L [ 0 ] , i n f i n i , L [ 0 ]
Pour i v a r i a n t de 0 à l e n ( L )
Faire
[ d , p ] <−− D i s t (A , Table , L [ i ] )
Si d < mini [ 1 ]
Alors
m i n i <−− [ L [ i ] , d , p ]
FIn S i
Fin F a i r e
Retourner ( m i n i )
Fin
-hBMHPSJUINF
Fonction D i j k s t r a (A , a , b )
Donnees
A , T a b l e : l i s t e s de l i s t e s ,
a , b, i , j : entiers
L : l i s t e d ‘ entiers ,
m i n i : t r i p l e t de nombres
Rdk
172
Debut
n <−−
<−− lleenn (A) (A)
T aabbllee <−−
<−− [[[[aa,, i innf fi inni i] ] pour pour i i dede 0 0 à à n n] ]
T aabbllee [[ aa]] <−−
<−− [[aa, , 00] ]
L <−−[k
<−−[k pour pour kk de de 00 àà aa] + ] +[ k[ k pour
pour k k dede a+1 a+1à àn ]n ]
Pour ii vvaarriiaanntt de
Pour de 11 àà nn
F aaiirree
mmiinnii <−−<−− PPl luussPPrroocchhee(A (A, , Table
Table, , L L) )
TTaabbllee((m miinni i [[00] ]] ] <−−
<−− [ [mmi ni ni i[ 2[ 2] ], , mmi ni ni [i 1[ 1] ]] ]
Pour jj vvaarri iaanntt de
Pour de 00 àà nn
FFaaiirree
SSii TTaabbl lee[ [mmi ni ni i[ [00] ] ][ [11] ] ++AA[ m [ mi ni n
i [i 0[ 0] ]] [] j[ ]j ]
<< TTaabbl lee[ [j j] ][ [11] ]
AAlloorrss
TTaabbl lee[ [j j] ][ [11] ] <−−
<−− TTa ab bl el e[ m[ mi ni in[i 0[ ]0]][]1[ ]1+] +
AA[[mmi inni i[ [00] ] ][ [j j] ]
TTaabbl lee[ [j j] ][ [00] ] <−−
<−− mmi ni ni [i 0[ 0] ]
Fin
Fin SSi i
Fin
Fin FFaaiirree
SSii m miinnii [[00]] == == bb
AAlloorrss
Retourner((Chemin
Retourner Chemin( (Table Table, a, a, b, b) ) )
LL <−−
<−− EEnnl leevvee((LL, , mmi ni ni i[ [00] )] )
Algorithmes de 2e année
Fin
Fin FFaaiirree
Fin
Analyse
Analyse de
de cet
cet algorithme
algorithme ::
Spécification :: Cette
Spécification Cettefonction
fonctionprend entréeune
prendenenentrée uneliste
listededelistes
listes
décrivant
décrivant la
la matrice
matriced’adjacence
d’adjacencedu dugraphe,
graphe,ainsi
ainsique
queleslesindices
indicesa aetet
b des sommets
sommets prispris comme
commepoints
pointsde
dedépart
départetetd’arrivée
d’arrivéeduducheminchemin
cherché.
cherché. Elle
Elle donne
donne comme
commerésultat
résultatlalalongueur
longueurduduchemin
cheminleleplus plus
court reliant
reliant les
les deux
deux sommets
sommetschoisis
choisisainsi
ainsique
quelalaliste
listedes
desindices
indices
des sommets
sommets parcourus
parcourussursurce
cechemin.
chemin.
Terminaison :: Les
Terminaison Les boucles
bouclesinconditionnelles
inconditionnellesseseterminent
terminentenenn n
itérations,
itérations, c’est-à-dire
c’est-à-direen
enautant
autantd’itérations
d’itérationsque
quededesommets
sommetsdudugraphe.
graphe.
Correction :: On
Correction Onaal’invariant
l’invariantde
deboucle
boucle: :««Les
Lesdistances
distancesstockées
stockées
dans la table
table sont
sont les
les distances
distancesminimales
minimalesauausommet
sommetinitial
initialpour
pourlele
Rdj
Rdj
173
sous-graphe des sommets déjà traités ».
Complexité : On ne rentrera pas dans le détail, mais on obtient
-F QSPHSBNNF FO 1ZUIPO
def P l u s P r o c h e (A , Table , L ) :
m i n i=L [ 0 ] , i n f , L [ 0 ]
for i in L :
d , p = D i s t (A , Table , i )
i f d<m i n i [ 1 ] :
mini = i , d , p
return mini
def E n l e v e ( L , i ) :
L1 = [ ]
for j in range (0 , len (L )) :
i f L [ j ] != i :
L1=L1+[L [ j ] ]
r e t u r n L1
Rd9
174
def D i j k s t r a (A , a , b ) :
n = l e n (A)
Table = [ [ a , i n f ] for i in range (0 , n ) ]
Table [ a ] = [ a , 0 ]
L = [ k f o r k i n r a n g e ( 0 , a )]+
[ k f o r k i n r a n g e ( a +1,n ) ]
for i in range (1 , n) :
m i n i = P l u s P r o c h e (A , Table , L )
Table [ mini [ 0 ] ] = [ mini [ 2 ] , mini [ 1 ] ]
for i in range (0 , n) :
i f Table [ mini [ 0 ] ] [ 1 ] + A[ mini [ 0 ] ] [ i ]
< Table [ i ] [ 1 ] :
Table [ i ] [ 1 ] = Table [ mini [ 0 ] ] [ 0 ] +
A[ i ] [ mini [ 0 ] ]
Table [ i ] [ 0 ] = mini [ 0 ]
i f m i n i [0]== b :
r e t u r n Chemin ( Table , a , b )
L=E n l e v e ( L , m i n i [ 0 ] )
Algorithmes de 2e année
On présente un autre problème voisin de celui que nous avons traité
dans le paragraphe précédent. Cette fois-ci il s’agit de trouver le plus
court chemin dans le graphe permettant de passer par tous les som-
mets. Pour résoudre ce problème nous allons utiliser un algorithme
de colonie de fourmis.
Rd8
175
fourmis), ces
ces mobiles
mobilesmarquant
marquantààchaque
chaquefois
foisd’une
d’unemanière
manièreououd’une
d’une
autre leur chemin
chemin dans
dans lelegraphe,
graphe,cecequi
quiinfluencera
influenceralelechemin
cheminchoisi
choisi
par les mobiles
mobiles de
de la
la vague
vaguesuivante.
suivante.On
Oncréera
créerapour
pourcela
celaune
unematrice
matrice
carrée de même
même ordre
ordre que
quelalamatrice
matriced’adjacence
d’adjacencedu dugraphe,
graphe,dans
dansla-
la-
quelle on associera
associera àà chaque
chaque arête
arêtedu
dugraphe
grapheun unnouveau
nouveaupoids
poidsque
que
appellera phéromone.
l’on appellera phéromone.
Il nous reste
reste àà quantifier
quantifier les
les choses.
choses. On
Onnote
noteAAlalamatrice
matriced’adja-
d’adja-
cence du graphe
graphe et
et B
B lala matrice
matricedes
desphéromones.
phéromones.On Oninitialisera
initialiserales
les
phéromones
phéromones àà 0.01
0.01 sur
sur chaque
chaquearête.
arête.
La probabilité
probabilité qu’une
qu’une fourmi
fourmi située
située en
en lelesommet
sommeti iemprûnte
emprûnteune
une
arête menant
menant au
au sommet
sommet jj sera
seradonnée
donnéeparparl’expression
l’expression: :
bbαi,jαi,jaa−β−β
i,j
i,j
ppi,j
i,j =
=
αα −β −β
kkbbi,k i,kaai,k
i,k
où la somme
somme au au dénominateur
dénominateuraalieulieusur
surles
lesindices
indicesdes
dessommets
sommetsnon
non
encore parcourus
parcourus par
par la
lafourmi.
fourmi.On
Onfixera
fixeralalaprobabilité
probabilitéd’un
d’unsommet
sommet
déjà traversé
traversé àà 0.
0.
Rde
Rde
176
À la fin d’un trajet, on actualisera la matrice B en calculant les nou-
velles valeurs des bi,j données par :
1
bi,j ← r.bi,j +
Lf
f
où la somme a lieu sur l’ensemble des fourmis ayant parcouru l’arête
menant de i à j et où Lf est la longueur du parcours de la fourmi f .
La constante r est un réel positif au choix.
On obtient au final un algorithme dépendant de paramètres plus ou
moins ad hoc, α, β et r. En pratique, α = β = 1 et r = 0, 5 donnent
de bons résultats.
On découpe l’algorithme en plusieurs sous-fonctions :
-hBMHPSJUINF
Fonction P o s i t i o n s I n i t i a l e s ( n , N)
Donnees
n , N, i : e n t i e r s ,
L : l i s t e de l i s t e d ‘ e n t i e r s .
Debut
L <−− [ ]
Pour i v a r i a n t de 0 à N
Algorithmes de 2e année
Faire
L <−− L + [ [ e n t i e r au h a s a r d d a n s [[0, n − 1]] ]
Fin F a i r e
Retourner L
Fin
Rdd
177
-F QSPHSBNNF FO 1ZUIPO
def P o s i t i o n s I n i t i a l e s ( n , N) :
L = []
f o r i i n r a n g e ( 0 ,N) :
L = L + [ [ rd . r a n d i n t (0 , n −1)]]
return L
-hBMHPSJUINF
Fonction L i s t e P r o b a b i l i t é s ( i , LS , A , B , n , a l p h a , b e t a ) :
Donnees
i , j , k , n : entier ,
LS : l i s t e d ’ e n t i e r s ,
A , B : m a t r i c e s de f l o t t a n t s ,
LP : l i s t e de f l o t t a n t s .
alpha , beta : f l o t t a n t s
Debut
LP <−− [ 0 p o u r j v a r i a n t de 0 à n ]
S <−− 0
Pour k v a r i a n t de 0 à n
Faire
S i k n ’ e s t p a s d a n s LS
Alors
S <−− S + B [ i ] [ k ] ∗ ∗ a l p h a
∗ A [ i ] [ k ]∗∗( − b e t a )
Fin S i
Fin F a i r e
Pour j v a r i a n t de 0 à n
Faire
S i j n ‘ e s t p a s d an s LS
Alors
LP [ j ] <−− B [ i ] [ j ] ∗ ∗ a l p h a
∗ A [ i ] [ j ] ∗ ∗ a l p h a /S
Fin S i
Fin F a i r e
Retourner LP
Fin
Rd3
178
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée l’indice i du som-
met sur lequel est la fourmi, la liste Ga des sommets parcourus par la
fourmi en cours, la matrice d’adjacence du graphique et la matrice
" des phéromones, le nombre n de sommets et les constantes alpha
et beta correspondant à α et β. Elle retourne la liste des probabilités
que la fourmi choisisse chaque sommet du graphe comme prochaine
étape.
Complexité : Cette fonction est de complexité linéaire par rap-
port au produit n fois la longueur de Ga.
-F QSPHSBNNF FO 1ZUIPO
def L i s t e P r o b a b i l i t e s ( i , LS , A , B , n , a l p h a , b e t a ) :
LP = [ 0 f o r j i n r a n g e ( 0 , n ) ]
S = 0
for k in range (0 , n) :
i f k not i n LS :
S = S+B [ i ] [ k ] ∗ ∗ a l p h a ∗A [ i ] [ k ]∗∗( − b e t a )
for j in range (0 , n) :
i f j not i n LS :
LP [ j ] = B [ i ] [ j ] ∗ ∗ a l p h a ∗A [ i ] [ j ] ∗ ∗ a l p h a
Algorithmes de 2e année
r e t u r n LP
-hBMHPSJUINF
Fonction ChoixSommet ( LP )
Donnees
LP : l i s t e de f l o t t a n t s
S : flottant
i : entier
Debut
a <−− nombre au h a s a r d da n s [ 0 , 1 ]
S <−− LP [ 0 ]
i <−− 0
Tant Que S < a
Faire
i <−− i +1
RdN
179
S <−− S + LP [ i ]
Fin F a i r e
Retourner i
Fin
-F QSPHSBNNF FO 1ZUIPO
def ChoixSommet ( LP ) :
a = r d . random ( )
S = LP [ 0 ]
i = 0
while S < a :
i = i +1
S = S+LP [ i ]
return i
R3y
180
-hBMHPSJUINF
Fonction TourComplet (A , B , n , N, a l p h a , b e t a )
Donnees
A , B : m a t r i c e s de f l o t t a n t s
LP : l i s t e de f l o t t a n t s
S : flottant
n, N , i , j , f : entier
alpha , beta : f l o t t a n t s
Debut
L <−− P o s i t i o n s I n i t i a l e s ( n , N)
Pour i v a r i a n t de 0 à n−1
Faire
Pour f v a r i a n t de 0 à N
Faire
LP <−− L i s t e P r o b a b i l i t é s ( L [ f ] [ − 1 ] ,
L [ f ] , A, B, n , alpha , beta )
j <−− ChoixSommet ( LP )
L [ f ] <−− L [ f ] + [ j ]
Fin F a i r e
Fin F a i r e
Retourner L
Fin
Algorithmes de 2e année
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée la matrice A d’ad-
jacence du graphique et la matrice B des phéromones, le nombre n
de sommets, le nombre N de fourmis et les constantes alpha et beta
correspondant à α et β. Elle retourne la liste des probabilités que la
fourmi choisisse chaque sommet du graphe comme prochaine étape.
Complexité : Cette fonction est de complexité de l’ordre de n3 .N .
-F QSPHSBNNF FO 1ZUIPO
def TourComplet (A , B , n , N, a l p h a , b e t a ) :
L = P o s i t i o n s I n i t i a l e s ( n , N)
f o r i i n r a n g e ( 0 , n−1) :
f o r f i n r a n g e ( 0 ,N) :
LP = L i s t e P r o b a b i l i t e s ( L [ f ] [ − 1 ] , L [ f ] ,
R3R
181
A, B, n , alpha , beta )
j = ChoixSommet ( LP )
L[ f ] = L[ f ] + [ j ]
return L
-hBMHPSJUINF
Fonction A c t u a l i s e P h e r o m o n e s ( L , A , B , n , N, r )
Donnees
A , B : m a t r i c e s de f l o t t a n t s
L : l i s t e de f l o t t a n t s
n, N , i , j , f : entier
r , S : flottants
Debut
Pour i v a r i a n t de 0 à n
Faire
Pour j v a r i a n t de 0 à n
Faire
B [ i ] [ j ] = <−− r ∗ B [ i ] [ j ]
Pour f v a r i a n t de 0 à N
Faire
S <−− 0
Pour i v a r i a n t de 0 à n−1
Faire
S <−− S + A [ L [ f ] [ i ] ] [ L [ f ] [ i + 1 ] ]
Fin F a i r e
Pour i v a r i a n t de 0 à n−1
Faire
B [ L [ f ] [ i ] ] [ L [ f ] [ i + 1 ] ] <−−
B[ L [ f ] [ i ] ] [ L [ f ] [ i +1]] + 1
S
Fin F a i r e
Fin F a i r e
Retourner B
Fin
R3k
182
le nombre N de fourmis et la constante r. Elle retourne la matrice
des phéromones mises à jour.
Complexité : Cette fonction est de complexité de l’ordre de n2 .N .
-F QSPHSBNNF FO 1ZUIPO
def A c t u a l i s e P h e r o m o n e s ( L , A , B , n , N, r ) :
for i in range (0 , n) :
for j in range (0 , n) :
B [ i ] [ j ] = r ∗B [ i ] [ j ]
f o r f i n r a n g e ( 0 ,N) :
S = 0
f o r i i n r a n g e ( 0 , n−1) :
S = S + A[ L [ f ] [ i ] ] [ L [ f ] [ i +1]]
f o r i i n r a n g e ( 0 , n−1) :
B[ L [ f ] [ i ] ] [ L [ f ] [ i +1]] =
B [ L [ f ] [ i ] ] [ L [ f ] [ i + 1 ] ] + 1/S
return B
-hBMHPSJUINF
Algorithmes de 2e année
Fonction C h e m i n L e P l u s C o u r t (A , N, NV, r , a l p h a , b e t a )
Donnees
A , B : m a t r i c e s de f l o t t a n t s
L , L l : l i s t e de f l o t t a n t s
n, N , i , j , f , NV : e n t i e r
r , a l p h a , b eta , S , l m i n : f l o t t a n t s
Debut
n <−− l e n (A)
B <−− [ [ 0 . 0 1 pour i v a r i a n t de 0 à n ]
pour j v a r i a n t de 0 à n ]
l m i n <−− i n f i n i
Pour i v a r i a n t de 0 à NV
Faire
L <−− TourComplet (A , B , n , N, a l p h a , b e t a )
B <−− A c t u a l i s e P h e r o m o n e s ( L , A , B , n , N, r )
Pour f de 0 à N
R3j
183
Faire
S <−−
<−− 00
Pour ii de
Pour de 00 àà n−1n−1
F a i rree
SS <−−
<−− SS + + AA[[LL[[ ff ]][[ ii ]]]][[ LL[[ ff ]][[ ii+
+11]]]]
Fin F Faaiirree
S i SS < < llm miinn
A l o rrss
llm
miinn <−−
<−− SS
LLll <−−
<−− LL [[ ff ]]
Fin S Sii
Fin F a i r e
Retourner l m miinn ,, LLll
Fin
-F QSPHSBNNF
QSPHSBNNF FO
FO 1ZUIPO
1ZUIPO
def C h e m i n L e P l u ssCCoouurrtt (A
(A,,N, N,NV,
NV, rr ,, aallpphhaa ,, bbeettaa)) ::
n = l e n (A)
B = [ [ 0 . 0 1 ff oorr ii iinn rraannggee ((00 ,,nn))]]
f o r j i n rraannggee ((00 ,,nn ))]]
l m i n = f l o a tt (( ’’ ii nn ff ’’ ))
f o r i i n r a nnggee ((00 ,NV) ,NV) ::
L = TourComplet
TourComplet (A (A,,BB,,nn ,,N,
N, aallpphhaa ,, bbeettaa))
B = A c t uuaalliisseeP Phheerroom moonneess ((LL,,AA,,BB,,nn,,N, N,rr))
f o r f i nn rraannggee ((00 ,N) ,N) ::
S = 00
f o r ii iinn rraannggee ((00 ,,n−1) n−1) ::
SS == SS + +A A[[LL[[ ff ]][[ ii ]]]][[ LL[[ ff ]][[ ii +
+11]]]]
R39
R39
184
i f S < lmin :
lmin = S
L l=L [ f ]
return lmin , L l
Algorithmes de 2e année
Chaque sommet à part la racine a a un "père" (situé au-dessus dans
le diagramme) et chaque sommet à part ceux situés en bas du dia-
gramme a deux "fils" (situés au-dessus dans le diagramme).
On appelle tas un arbre binaire dans lequel on associe à chaque som-
met un poids supérieur ou égal à ceux de ses fils. On considère une
liste d’entiers G. Le tri par tas de G se fait en deux étapes. Tout
d’abord on modifie G de façon à ce qu’elle représente un tas, c’est-
à-dire si la construction de l’arbre obtenu en rangeant de bas en haut
et de gauche à droite les éléments de la liste donne un tas. C’est
ainsi le cas avec la liste [10,7,9,4,2,7] qui donne le tas de diagramme
suivant :
R38
185
Dans un deuxième temps, on récupère la liste triée. Pour cela on
sépare notre liste entre une première partie GR correspondant à un tas
et une deuxième Gk donnant la liste triée. On répète alors le processus
suivant :
• On échange le premier élément de GR avec le dernier de GR. La
partie de liste Gk gagne ainsi un élément alors que GR en perd un.
• On fait « descendre » l’élément désormais en première position
dans GR de façon à ce qu’elle corresponde toujours à un tas.
Une fois GR vide, G est triée.
-hBMHPSJUINF
Fonction MiseEnTas ( L )
Donnees
L : liste d‘ entiers
i : entier
Debut
Pour i v a r i a n t de 0 à l e n ( L )
Faire
k<−−i
Tant Que k>0 et L [ ( k −1)//2] < L [ k ]
Faire
L [ ( k − 1 ) / / 2 ] , L [ k ] <−− L [ k ] , L [ ( k −1)//2]
k <−− ( k −1)//2
Fin F a i r e
Fin F a i r e
Retourner L
Fin
R3e
186
Analyse de cet algorithme
algorithme ::
Spécification : Cette
Cette fonction
fonction prend
prend en
en entrée
entrée une
uneliste
listed’entiers
d’entiers
G et retourne une liste contenant
contenant les
les mêmes
mêmes éléments que GG mais
éléments que mais
représentant un tas.
Terminaison : La boucle
boucle Tant
Tant Que
Quetermine
terminecar
carla
lasuite
suitedes
desvaleurs
valeurs
prises par la variable k est
est àà valeurs
valeurs entières
entières et
et strictement
strictement décrois-
décrois-
sante.
Correction : On a l’invariant
l’invariant de
de boucle
boucle :: «« la
la liste
listeformée
forméepar
parles
les
éléments de L d’indices
d’indices inférieurs
inférieurs ou
ou égaux
égaux àà ii représente
représenteun untas
tas».».
Complexité : On notenote nn la
la longueur
longueur dede la listeG.
laliste G.Dans
Danslelepire
piredes
des
cas, on a besoin de l’ordre de HM(i)
l’ordre de HM(i) passages
passages dansdanslalaboucle
boucleTantQue,
TantQue,
on obtient donc une complexité
complexité dansdans lele pire
pire desdes cas
cas de
de l’ordre
l’ordre de
de
n HM(n). Dans le meilleur
meilleur des
des cas,
cas, elle
elle est
est linéaire
linéaire enen n.
n.
-F QSPHSBNNF
QSPHSBNNF FO
FO 1ZUIPO
1ZUIPO
def MiseEnTas ( L )) ::
f o r i i n r a nnggee ((00 ,, lleenn ((LL)))) ::
k = i
while k > > 00 and and LL [[(( kk−1)//2]
−1)//2] < < LL[[kk]] ::
L [ ( kk −
−11))////22]] ,,LL[[ kk ]] = = LL[[kk]] ,, LL[[((kk−1)//2]
Algorithmes de 2e année
−1)//2]
k = (( kk−1)//2
−1)//2
return L
-hBMHPSJUINF
-hBMHPSJUINF
Fonction T r i P a r T Taass ((LL))
Donnees
L : l i s t e d ‘ e n t ii ee rr ss
i , j , n : e n t i e rr
t e s t : booléen
Debut
n <−− l e n ( L ))
L <−− MiseEnTas
MiseEnTas ((LL))
Pour i v a r i aa nn tt de de 00 àà n−1
n−1
Faire
L [ 0 ] , L [ n−1−
n−1−ii ]] <−−<−− LL[[n−1−
n−1−ii ]] ,,LL[[00]]
R3d
R3d
187
j <−− 0
t e s t <−− V r a i
Tant Que t e s t
Faire
S i 2∗ j +1 < n−1− i et
L [ 2 ∗ j +1] >= L [ 2 ∗ j +2] et
L [ 2 ∗ j +1] > L [ j ]
Alors
L [ j ] , L [ 2 ∗ j +1] <−− L [ j ] , L [ 2 ∗ j +1]
j <−− 2∗ j +1
Sinon S i 2∗ j +2 <n−1− i et
L[2∗ j + 2] > L[2∗ j + 1]
et L [ 2 ∗ j +2] > L [ j ]
Alors
L [ j ] , L [ 2 ∗ j +2] <−− L [ j ] , L [ 2 ∗ j +2]
j <−− 2∗ j +2
Sinon
t e s t <−− Faux
Fin S i
Fin F a i r e
Fin F a i r e
Retourner L
Fin
R33
188
-F QSPHSBNNF FO 1ZUIPO
def T r i P a r T a s ( L ) :
n = len (L)
L = MiseEnTas ( L )
f o r i i n r a n g e ( 0 , n−1) :
L [ 0 ] , L [ n−i −1] = L [ n−i −1] , L [ 0 ]
j = 0
t e s t = True
while t e s t :
i f 2∗ j +1 < n−1− i and
L [ 2 ∗ j +1] >= L [ 2 ∗ j +2]
and L [ 2 ∗ j +1]> L [ j ] :
L [ j ] , L [ 2 ∗ j +1] = L [ 2 ∗ j +1] , L [ j ]
j = 2∗ j +1
e l i f 2∗ j +2 < n−1− i and
L [ 2 ∗ j +2] > L [ 2 ∗ j +1] and
L [ 2 ∗ j +2] > L [ j ] :
L [ j ] , L [ 2 ∗ j +2] = L [ 2 ∗ j +2] , L [ j ]
j = 2∗ j +2
else :
test = False
return L
Algorithmes de 2e année
« Si on attend d’une machine d’être infaillible, elle ne peut être
intelligente. »
R3N
189
"SJUINÏUJRVF
-F DSJCMF Eh&SBUIPTUÒOF
-hBMHPSJUINF
Fonction C r i b l e (N)
Donnees
N, n , p , i : e n t i e r s ,
LEntiers , LPremiers : l i s t e s d ‘ e n t i e r s
Debut
L E n t i e r s <−− [ n pour n de 2 a N+1]
L P r e m i e r s <−− [ ]
Tant que L E n t i e r s ! = [ ]
Faire
p <−− L E n t i e r s [ 0 ]
L E n t i e r s <−− L E n t i e r s [ 1 : l e n ( L E n t i e r s ) ]
L P r e m i e r s <−− L P r e m i e r s + [ p ]
n <−− l e n ( L E n t i e r s )
Pour i v a r i a n t de 0 à n
Faire
S i L E n t i e r s [ n−1− i ]%p = 0 A l o r s
L E n t i e r s <−− L E n t i e r s [ 0 : n−1− i ]+
L E n t i e r s [ n−i : l e n ( L E n t i e r s ) ]
Fin S i
Fin F a i r e
Retourner L P r e m i e r s
Fin
RNy
190
Analyse de cet algorithme :
Spécification : Cette fonction prend en entrée un entier naturel
non nul N et retourne la liste des nombres premiers inférieurs ou
égaux à N .
Terminaison : À chaque passage dans la boucle, la liste G1MiB2`b
perd au moins son premier élément. Elle sera donc vide en au pire
N − 1 passages dans la boucle.
Correction : On a pour invariant de boucle : « Les éléments de
la liste G1MiB2`b ne sont pas divisibles par les entiers inférieurs stric-
tement au premier élément de la liste G1MiB2`b ». En particulier, ce
premier élément est bien un nombre premier.
Complexité : On peut majorer le nombre de passages dans la
boucle Tant Que par N . Pour chaque passage dans cette boucle, on
effectue une boucle Pour parcourant les éléments de G1MiB2`b ef-
fectuant une comparaison et un nombre d’affectations borné par la
longueur de G1MiB2`b. On obtient donc une complexité quadratique
en N .
-F QSPHSBNNF FO 1ZUIPO
Algorithmes de 2e année
def C r i b l e (N) :
L E n t i e r s =[n f o r n i n r a n g e ( 2 ,N+1)]
LPremiers =[]
while L E n t i e r s !=[] :
p=L E n t i e r s [ 0 ]
L E n t i e r s=L E n t i e r s [ 1 : l e n ( L E n t i e r s ) ]
L P r e m i e r s +=[p ]
n=l e n ( L E n t i e r s )
for i in range (0 , n) :
i f L E n t i e r s [ n−1− i ]%p==0 :
L E n t i e r s=L E n t i e r s [ 0 : n−1− i ]+
L E n t i e r s [ n−i : l e n ( L E n t i e r s ) ]
return LPremiers
RNR
191
$BMDVM EF MB GPODUJPO ϕ EF &VMFS
-hBMHPSJUINF
Fonction P h i (N)
Donnees
N, P o s i t i o n , n , l , i : entier ,
LEntiers : l i s t e d ‘ entiers
Debut
L E n t i e r s <−− [ n pour n de 2 a N−1]
P o s i t i o n <−− 0
Tant que P o s i t i o n <l e n ( L E n t i e r s )
Faire
n <−− L E n t i e r s [ P o s i t i o n ]
S i N%n=0 A l o r s
Faire
l <−− l e n ( L E n t i e r s )
Pour i de 0 a l −P o s i t i o n
Faire
S i L E n t i e r s [ l −1− i ]%n=0 A l o r s
Faire
L E n t i e r s <−− L E n t i e r s [ 0 : l −1− i ]+
L E n t i e r s [ l −i : l e n ( L E n t i e r s ) ]
Fin F a i r e
Fin S i
Fin F a i r e
Fin F a i r e
Sinon
P o s i t i o n <−− P o s i t i o n +1
Fin S i
Fin F a i r e
Retourner l e n ( L E n t i e r s )+1
Fin
RNk
192
Terminaison : À chaque passage dans la boucle Tant Que, la liste
G1MiB2`b perd au moins un élément ou SQbBiBQM augmente de 1. Par
conséquent, la suite des valeurs prises par la longueur de G1MiB2`b
moins SQbBiBQM est à valeurs entières et strictement décroissante. Elle
prendra donc bien la valeur 0.
Correction : On a pour invariant de boucle : « Les éléments de la
liste G1MiB2`b d’indice inférieur à Position sont premiers avec N ».
Complexité : Dans le pire des cas, le nombre de passages dans
-F QSPHSBNNF FO 1ZUIPO
def P h i (N) :
L E n t i e r s =[n f o r n i n r a n g e ( 2 ,N ) ]
P o s i t i o n =0
w h i l e P o s i t i o n <l e n ( L E n t i e r s ) :
n=L E n t i e r s [ P o s i t i o n ]
Algorithmes de 2e année
i f N%n==0 :
l=l e n ( L E n t i e r s )
f o r i i n r a n g e ( 0 , l −P o s i t i o n ) :
i f L E n t i e r s [ l −1− i ]%n==0 :
L E n t i e r s=L E n t i e r s [ 0 : l −1− i ]+
L E n t i e r s [ l −i : l e n ( L E n t i e r s ) ]
else :
P o s i t i o n=P o s i t i o n +1
r e t u r n l e n ( L E n t i e r s )+1
RNj
193
"MHPSJUINF Eh&VDMJEF ÏUFOEV
-hBMHPSJUINF
Fonction E u c l i d e E t e n d u ( a , b )
Donnees
a ,b : entiers ,
r0 , u0 , v0 , r1 , u1 , v1q , r : e n t i e r s
uIntermediaire , vIntermediare : entiers
Debut
r0 , u0 , v0 <−− a , 1 , 0
r1 , u1 , v1 <−− b , 0 , 1
Tant que r 1 �= 0
Faire
q , r <−− r 0 // r1 , r 0%r 1
u I n t e r m e d i a i r e <−− u0−q∗ u1
v I n t e r m e d i a i r e <−− v0−q∗ v1
r0 , u0 , v0 <−− r1 , u1 , v1
r1 , u1 , v1 <−− r , u I n t e r m e d i a i r e , v I n t e r m e d i a i r e
Fin F a i r e
Retourner ( r0 , u0 , v0 )
Fin
RN9
194
Or Fn est de l’ordre de en , on a donc une complexité globale de
l’algorithme logarithmique en Kt(a, b).
-F QSPHSBNNF FO 1ZUIPO
def E u c l i d e E t e n d u ( a , b ) :
r0 , u0 , v0=a , 1 , 0
r1 , u1 , v1=b , 0 , 1
w h i l e r 1 !=0 :
q , r=r 0 // r1 , r 0%r 1
u I n t e r m e d i a i r e=u0−q∗ u1
v I n t e r m e d i a i r e=v0−q∗ v1
r0 , u0 , v0=r1 , u1 , v1
r1 , u1 , v1=r , u I n t e r m e d i a i r e , v I n t e r m e d i a i r e
r e t u r n r0 , u0 , v0
$IJGGSFNFOU 34"
Algorithmes de 2e année
frement (n, e) en prenant n = pq et e premier avec ϕ(n). La clé
privée est alors d tel que de soit congru à 1 modulo ϕ(n). On va de
plus écrire une fonction calculant d étant donné p et q. La sécurité du
chiffrement repose en effet sur la difficulté de retrouver p et q étant
donné n si ceux-ci sont suffisamment grands.
On donne enfin une fonction permettant de chiffrer un texte. On
utilise la fonction ord de P YTHON donnant un entier associé à un
caractère. On récupère le caractère avec chr.
-hBMHPSJUINF
Fonction C h i f f r e m e n t ( a , b )
Donnees
a ,b : entiers ,
r0 , u0 , v0 , r1 , u1 , v1q , r : e n t i e r s
uIntermediaire , vIntermediaire : entiers
RN8
195
Debut
r0 , u0 , v0 <−− a , 1 , 0
r1 , u1 , v1 <−− b , 0 , 1
Tant que r 1 �= 0
Faire
q , r <−− r 0 // r1 , r 0%r 1
u I n t e r m e d i a i r e <−− u0−q∗ u1
v I n t e r m e d i a i r e <−− v0−q∗ v1
r0 , u0 , v0 <−− r1 , u1 , v1
r1 , u1 , v1 <−− r , u I n t e r m e d i a i r e , v I n t e r m e d i a i r e
Fin F a i r e
Retourner ( r0 , u0 , v0 )
Fin
-F QSPHSBNNF FO 1ZUIPO
def C a l c u l C l e ( p , q , e ) :
r , u , v=E u c l i d e E t e n d u ( ( p −1)∗( q −1) , e )
i f v<0 :
v=v+(p −1)∗( q−1)
return v
def C h i f f r e m e n t ( n , e , a ) :
r e t u r n a ∗∗ e%n
def C h i f f r e m e n t T e x t e ( n , e , T) :
NT= ’ ’
for c in T :
NT=NT+c h r ( C h i f f r e m e n t ( n , e , o r d ( c ) ) )
r e t u r n NT
Pour décoder, il suffit d’utiliser les mêmes fonctions que celles utili-
sées dans le codage mais avec la clé d à la place de e.
RNe
196
"VUPVS EFT QPMZOÙNFT
Algorithmes de 2e année
contentons ici de donner les fonctions P YTHON. On peut juste pré-
ciser que la fonction L2iiQB2 sert à éliminer les premiers termes de
la liste représentant un polynôme si ceux-ci sont nuls ou quasi-nuls.
De tels termes pourront en effet apparaître suite aux calculs effectués
dans la division euclidienne.
def N e t t o i e (P) :
w h i l e ( a b s (P[ −1]) >10∗∗ −15 and l e n (P) >1) :
P=P [ 0 : l e n (P) −1]
return P
def Degre (P) :
i f l e n (P)>1 :
r e t u r n l e n (P)−1
e l i f a b s (P[0]) >10∗∗ −15 :
return 0
else :
r e t u r n −np . I n f
RNd
197
def Somme( P1 , P2 ) :
P= [ ]
m=min ( l e n ( P1 ) , l e n ( P2 ) )
M=max ( l e n ( P1 ) , l e n ( P2 ) )
f o r i i n r a n g e ( 0 ,m) :
P=P+[P1 [ i ]+P2 [ i ] ]
P=P+P1 [m :M]
P=P+P2 [m :M]
return P
def P r o d u i t ( P1 , P2 ) :
P=[0 f o r i i n r a n g e ( 0 , l e n ( P1)+ l e n ( P2 ) −1)]
f o r i i n r a n g e ( 0 , l e n ( P1 ) ) :
f o r j i n r a n g e ( 0 , l e n ( P2 ) ) :
P [ i+j ]=P [ i+j ]+P1 [ i ] ∗ P2 [ j ]
return P
%JWJTJPO FVDMJEJFOOF
-hBMHPSJUINF
Fonction D i v i s i o n E u c l i d i e n n e ( P1 , P2 )
Donnees
P1 , P2 : p o l y n ô m e s
R , Q, P i n t : p o l y n ô m e s
Coeff : f l o t t a n t
Debut
R<−−P1
Q<−−0
Tant que deg (R)>=deg ( P2 )
Faire
C o e f f <−− C o e f f D o m i n a n t (R) / C o e f f D o m i n a n t ( P2 )
P i n t <−−− C o e f f ∗X^( deg (R) − deg ( P2 ) )
R <−− R+P2∗ P i n t
Q <−− Q+C o e f f ∗X^( deg (R) − deg ( P2 ) )
Fin F a i r e
Retourner (Q, R)
Fin
RN3
198
Analyse de c
Analyse
Analyse
Analyse
dede
decet
cet
cetalgorithme
algorithme
algorithme:: : Spécificati
Spécification: :Cette
Spécification
Spécification : Cette
Cettefonction
fonction
fonctionprend
prenden en
enentrée
entrée
entréedeux
deux
deuxpolynômes
polynômes
polynômes P1 et P2 et ret
P1P1et et
P2P2
P2
et et
et
retourne
retourne
retournelelelequotient
quotient
quotientQ
QQetetlelereste
reste
resteRRRde
de
delalaladivision
division
divisiondedeP1P1
par P2.
parpar
P2.P2.
P2. Terminaiso
Terminaison: :La
Terminaison
Terminaison : La
Lasuite
suite
suitedes
des
desdegrés
degrés
degrésdes
des
despolynômes
polynômes
polynômesstockés
stockés
stockésdans
dansla variable R e
la la
variable
variable
variable
R RR
estest
està àvaleurs
à valeurs
valeursentières
entières
entièresetetstrictement
strictement
strictementdécroissante.
décroissante.
décroissante.Elle
Elle
prendra donc l
prendra
prendra
prendradonc
donc
donclala
la
valeur
valeur
valeur0.0.0. Correction
Correction: :On
Correction
Correction : On
Onaapour
apour
pourinvariant
invariant
invariantdedeboucle
boucle
boucle::«:««PPP
111==
=Q.P
Q.P
Q.P 2 2++RR». Comme le d
». ».
Comme
Comme
Comme lele
le
dernier
dernier
dernierRRRest
est
estde
de
dedegré
degré
degréstrictement
strictement
strictementinférieur
inférieur
inférieurà àcelui
à celui
celui
dede
P2, il s’agit bi
P2,P2,
il s’agit
il s’agit
s’agit
bien
bien
biendudu
dureste
reste
restede
de
delalaladivision
division
divisioneuclidienne,
euclidienne,
euclidienne,etetetQQ
Qestest
estdonc
donc
bien le quotien
bien
bien
le le
quotient.
quotient.
quotient. Complexité
Complexité: :À
Complexité
Complexité : ÀÀ
chaque
chaque
chaquepassage
passage
passagedans
dansla
lalaboucle
boucle
boucleTant
Tant
TantQue,
Que,
Que,
lele
le
degré
degré
de R diminue
de de
R Rdiminue
diminue
diminuedudududegré
degré
degréde de
deP2.
P2.
P2.OnOn
Onobtient
obtient
obtientdonc
donc
doncun
un
unnombre
nombre
nombretotal
total
d’opérations li
d’opérations
d’opérations
d’opérations
linéaire
linéaire
linéaireen
en
endeg(P
deg(P 1)1)−
deg(P1) −−deg(P
deg(P
deg(P2).2).
2).
def D i v i s i o
f D iD
d edef Dvii vvsiissoiinoonEnEuEucuclcil ldi ididieienennnneee((P1 (P1P1, P2 , P2) ):: : P1 , P2=N
P1P1
P1 , P2=N
,, P2=N
P2=N e teetttottoioei ie(e(P1 (P1P1 )),), N,NNeetet t ot oi ei e( P2(P2
P2))) R=P1 [ :]
R=P1
R=P1
R=P1 [ :[[]::]] Q= [ 0 . 0
Q= Q=
Q= [ 0[[.00..00f offororr i i i i n i inn rraranann gggeee(( 0( 0, ,l el ennn((P1)−
(P1)−
P1)− l lelenenn( (P2
(P2P2 )+ ))+
+1 )11]) ] w h i l e D
w hwwihh l eiilleeDegre
Degre
Degre (R)>=Degre
(R)>=Degre
(R)>=Degre(( P2 ( P2) ): : C o
Algorithmes de 2e année
Co CCeoofeef=R[
fff=R[
f=R[ −1]/
−1]/
−1]/ P2P2P2 [[−1]
[−1]
−1] Pin
P iPPniitnn=[0tt=[0
=[0f fofororr i i i iinni n rr ar anng ge e((0(00,, l,lelenenn(R)− (R)−
(R)− l ellenen(nP2
((P2
P2 ) ))]) ] P in
P iPPniit=P
nnt=Pt=P i ni intnt+[−1∗
t+[−1∗
+[−1∗CCCoooee ef ff f] ] R=S
R=Somme(R
R=Somme(R
R=Somme(R , ,P,PP rrorododduuuiitti t(( P2
( P2, ,PPPiinni ntt t)))))) Q[ l
Q[Q[ Q[l ellneen(R)−
n(R)−
(R)− l el lenenn((P2
(P2P2 )]=
)]=
)]=CCooe effff f R=N
R=N R=N
R=N e teetttottoioei ie(R)
e(R) (R) r e t u rn
r errteeuttruunrrnnQ,Q, Q,RRR
-hBMHPSJUIN
-hBMHPSJUINF
-hBMHPSJUINF
-hBMHPSJUINFQPVS
QPVS
QPVSMFT
MFT
MFTQPMZOÙNFT
QPMZOÙNFT
QPMZOÙNFT
Il ne reste plu
Il ne
Il ne
reste
reste
reste
plus
plus
plusqu’à
qu’à
qu’àtranscrire
transcrire
transcrirel’algorithme
l’algorithme
l’algorithmeutilisé
utilisé
utilisépour
pour
pourles les
lesentiers
entiers relatifs avec ce
relatifs
relatifs
relatifs
avec
avec
aveccesces
ces
nouveaux
nouveaux
nouveauxoutils.
outils.
outils.Pour
Pour
Pourlaladescription
description
descriptiondede
del’algorithme,
l’algorithme,
l’algorithme, on garde les n
onongarde
garde
gardelesles
les
notations
notations
notationsdes
des
desopérations
opérations
opérationsutilisées
utilisées
utiliséesen
en
enPPYTHON
PYTHON
YTHON avec
avec
aveclesles
entiers.
entiers.
entiers.
entiers.
RNN
RNN
RNN
199
-hBMHPSJUINF
Fonction E u c l i d e E t e n d u ( P1 , P2 )
Donnees
P1 , P2 : polynômes ,
R0 , U0 , V0 , R1 , U1 , V1 , Q, R : p o l y n ô m e s
U I n t e r m e d i a i r e , V I n t e r m e d i a r e : polynômes
Debut
R0 , U0 , V0 <−− P1 , 1 , 0
R1 , U1 , V1 <−− P2 , 0 , 1
Tant que d e g r é ( R1 ) > 0
Faire
Q, R <−− R0//R1 , R0%R1
U I n t e r m e d i a i r e <−− U0−Q∗U1
V I n t e r m e d i a i r e <−− V0−Q∗V1
R0 , U0 , V0 <−− R1 , U1 , V1
R1 , U1 , V1 <−− R , U I n t e r m e d i a i r e , V I n t e r m e d i a i r e
Fin F a i r e
Retourner ( R0 , U0 , V0 )
Fin
kyy
200
-F
-F QSPHSBNNF
QSPHSBNNFFO
FO1ZUIPO
1ZUIPO
d e f E uucclliiddeeEEtteenndduu((P1
def P1, ,P2 P2)): :
R0
R0 ,, U0
U0,,V0=P1
V0=P1,,[[11..00] ] , ,[ [00. .00] ]
R1
R1 ,, U1
U1,,V1=P2
V1=P2,,[[00..00] ] , ,[ [11. .00] ]
whhiillee lleenn ((R1)>1
w R1)>1: :
Q,
Q,R=D
R=Diivviissi ioonnEEuuccl li iddi ei ennnnee( (R0
R0, R1, R1) )
U
UIInntteerrm meeddi iaai irre=N
e=Neet tt tooi ei e( (
Somme(
Somme(U0 U0,,PPrroodduui ti t((PPr roodduui ti t( [( [−−1 1. 0. 0] ,Q)
] ,Q), U1 , U1 ) )))) )
V
VIInntteerrm meeddi iaai irre=N
e=Neet tt tooi ei e( (
Somme(
Somme(V0 V0,,PPrroodduui ti t((PPr roodduui ti t( [( [−−1 1. 0. 0] ,Q)
] ,Q), V1 , V1 ) )))) )
R0
R0,,U0U0,,V0=R1
V0=R1, ,U1 U1, ,V1
V1
R1
R1,,U1U1,,V1=R
V1=R,,UUI Inntteer rmmeeddi ai ai ri re e, ,VVI nI nt et er m
r me de d
i ai iarier e
r eettuurrnn R0R0,,U0U0,,V0V0
#PÔUF
#PÔUF ËËPVUJMT
PVUJMT
module MmKTvXTQHvMQKBH
Le module MmKTvXTQHvMQKBHfournit
fournitune
uneclasse
classededepolynômes
polynômesappelée
appelée
SQHvMQKBH.
SQHvMQKBH. Après
Après avoir
avoirimportée
importéecelle-ci,
celle-ci,on
ondispose
disposedesdesfonctions
fonctions
et méthodes
méthodes suivantes
suivantes::
retourne
retourne lelepolynôme
polynômedont
dontlesles
SQHvMQKBHUGV
SQHvMQKBHUGV
Algorithmes de 2e année
coefficients
coefficientssont
sontdans
dansLL
applique
appliquelelepolynôme
polynômePPà àununouou
SUV
des
deséléments
éléments
donne
donne lele coefficient
coefficientdededegré
degré
SX+Q27()
SX+Q27()
précisé
précisé
SX/2;`22UV
SX/2;`22UV donne
donneleledegré
degrédedePP
SX`QQibUV
SX`QQibUV donne
donneles
lesracines
racinesdedePP
SX/2`BpUV
SX/2`BpUV donne
donnelelepolynôme
polynômedérivé
dérivédedeP P
S ff ZZ donne
donnelelequotient
quotientdedePPpar
parQQ
donne
donnelelereste
restededelaladivision
divisiondede
S W ZZ
PPpar
parQQ
kyR
kyR
201
(BVTT-FHFOESF
1PMZOÙNFT EF -FHFOESF
1 dk
Pk (X) = ((X 2 − 1)k )
2k k! dxk
2k − 1 k−1
Pk (X) = XPk−1 (X) − Pk−2 (X)
k k
kyk
202
-hBMHPSJUINF
Fonction C a l c u l P o l y n o m e L e g e n d r e ( n )
Donnees
n : entiers ,
P1 , P2 ,Q : polynômes ,
k : entier
Debut
P1 <−− [ 1 . 0 ]
P2 <−− [ 0 . , 1 . ]
S i k = 0 a l o r s Retourner P1 F i n S i
Pour k v a r i a n t de 2 à n
Faire
Q <−− P2
P2 <−− ( 2 ∗ k −1)/ k ∗X∗P1 − ( k −1)/ k ∗P2
P1 <−− Q
Fin F a i r e
Retourner P2
Fin
-F QSPHSBNNF FO 1ZUIPO
def C a l c u l P o l y n o m e L e g e n d r e ( n ) :
Algorithmes de 2e année
P1 = [ 1 . ]
P2 = [ 0 . , 1 . ]
i f k==0 :
r e t u r n P1
f o r k i n r a n g e ( 2 , n+1) :
Q=P2 [ : ]
P2=Somme( P r o d u i t ( [ 0 . , ( 2 ∗ k −1)/ k ] , P1 ) ,
P r o d u i t ([ −( k −1)/ k ] , P2 ) )
P1=Q [ : ]
r e t u r n P2
def C a l c u l P o l y n o m e L e g e n d r e D ( n ) :
P1 = [ 0 . ]
P2 = [ 1 . ]
i f k==0 :
r e t u r n P1
f o r k i n r a n g e ( 2 , n+1) :
kyj
203
Q=P2 [ : ]
P2=Somme( C a l c u l P o l y n o m e L e g e n d r e ( k −2) ,
Somme( P r o d u i t ( [ 0 . , ( 2 ∗ k −1)/ k ] , P1 ) ,
P r o d u i t ([ −( k −1)/ k ] , P2 ) ) )
P1=Q [ : ]
r e t u r n P2
def RacApprochee ( k , i , e p s i l o n ) :
u0=np . c o s ( np . p i ∗ ( i − 0 . 2 5 ) / ( k + 0 . 5 ) )
L=C a l c P p r i m e ( u0 , k )
u1=u0−L [ 0 ] / f l o a t ( L [ 1 ] )
w h i l e a b s ( u1−u0)> e p s i l o n :
L=C a l c P p r i m e ( u1 , k )
u0 , u1=u1 , u1−L [ 0 ] / f l o a t ( L [ 1 ] )
r e t u r n u1
ky9
204
Les wk peuvent eux être déterminés en résolvant le système formé
par les équations :
1 n
xp /x = wk xpk
−1 k=1
Algorithmes de 2e année
En utilisant finalement un changement de variable, on peut écrire une
fonction
b permettant de calculer une valeur approchée d’une intégrale
a f (t)/t par la méthode détaillée ci-dessus :
def C a l c L e g e n d r e ( f , a , b , n , N) :
L=C a l c C o e f f ( n )
S=0
f o r i i n r a n g e ( 0 ,N) :
print S , L
g=lambda x :
f ( a+(b−a ) ∗ ( 2 ∗ i +1)/ f l o a t ( 2 . 0 ∗N)+
x ∗ ( b−a ) / ( 2 . 0 ∗N) )
Stemp=sum ( [ f l o a t ( L [ 0 ] [ k ] ) ∗ g ( L [ 1 ] [ k ] )
for k in range (0 , len (L [ 0 ] ) ) ] )
S=S+(b−a ) / ( 2 . 0 ∗N) ∗ Stemp
return S
ky8
205
#PÔUF Ë PVUJMT
kye
206
1SPCBCJMJUÏT
-hBMHPSJUINF
Fonction S i m u l a t i o n U n i f o r m e ( a , b )
Donnees
Algorithmes de 2e année
a ,b : entiers
Debut
t <−− random ( )
t <−− t ∗ ( b−a+1)+a
t <−− P a r t i e E n t i e r e ( t )
Retourner t
Fin
kyd
207
-F QSPHSBNNF FO 1ZUIPO
def S i m u l a t i o n U n i f o r m e ( a , b ) :
t=r d . random ( )
t=t ∗ ( b−a+1)+a
t=i n t ( t )
return ( t )
-hBMHPSJUINF
Fonction S i m u l a t i o n B i n o m i a l e ( n , p )
Donnees
n : entier
p : flottant
Debut
S=0
Pour i v a r i a n t de 1 à n+1
t <−− random ( )
Si t < p
A l o r s S <−− S+1
Fin S i
Retourner S
Fin
ky3
208
Complexité : Lors de l’exécution de cet algorithme, on effectue
3n OPEL et n appels à la fonction `M/QKUV.
-F QSPHSBNNF FO 1ZUIPO
def S i m u l a t i o n B i n o m i a l e ( n , p ) :
S=0
f o r i i n r a n g e ( n+1) :
t=r d . random ( )
if t < p :
S=S+1
return (S)
-hBMHPSJUINF
Fonction S i m u l a t i o n G e o m e t r i q u e ( p )
Donnees
p : flottant
Debut
N <−− 0
Tant Que random ( ) >p
Faire
N <−− N+1
Algorithmes de 2e année
Fin F a i r e
Retourner N
Fin
ment de [0, 1]. Elle retourne un entier naturel non nul tel que la pro-
babilité de chaque résultat possible suive la loi géométrique de para-
mètre p.
∗
Correction : Soit k ∈ N . la probabilité que la variable N soit
kyN
209
Complexité : Lors de l’exécution de cet algorithme, si on fait n
passages dans la boucle on effectue 3n − 2 OPEL et n appels à la
fonction `M/QKUV.
-F QSPHSBNNF FO 1ZUIPO
def S i m u l a t i o n G e o m e t r i q u e ( p ) :
N=0
w h i l e r d . random ( ) >= p :
N=N+1
r e t u r n (N)
-hBMHPSJUINF
Fonction C o m p a r a i s o n B i n o m i a l e P o i s s o n ( λ , n , N)
Donnees
n , N, i , a : e n t i e r s
λ : flottant
LB , LP : l i s t e s de f l o t t a n t s
Debut
LB <−− [ 0 pour i v a r i a n t de 0 à n+1]
Pour i v a r i a n t de 0 à N
Faire
a <−− S i m u l a t i o n B i n o m i a l e ( n , l /n )
LB [ a ] <−− LY [ a ] + 1/N
Fin F a i r e
kRy
210
p l o t ( SommeCumulee ( LY ) , ’ r ’ )
LP <−− [ exp (−λ ) ]
Pour i v a r i a n t de 0 à n
Faire
LP <−− LP + [ LP [ − 1 ] / ( i +1)∗λ ]
Fin F a i r e
T r a c e r ( SommeCumulee ( LP ) , ’ b ’ )
Fin
Algorithmes de 2e année
on montre (par récurrence) que pour tout k de {0, . . . , n} :
λn
LP [n] =
n!
ce qui donne bien par somme cumulée la fonction de répartition théo-
rique de la loi de Poisson de paramètre λ.
-F QSPHSBNNF FO 1ZUIPO
def SommeCumulee ( L ) :
for i in range (1 , len (L )) :
L [ i ]=L [ i ]+L [ i −1]
return (L)
def C o m p a r a i s o n B i n o m i a l e P o i s s o n ( l , N, n ) :
LY=[0 f o r i i n r a n g e ( 0 , n +1)]
f o r i i n r a n g e (N) :
kRR
211
a=S i m u l a t i o n B i n o m i a l e ( n , l /n )
LY [ a ]=LY [ a ]+1/N
p l t . p l o t ( SommeCumulee ( LY ) , ’ r ’ )
LP=[np . exp (− l ) ]
for i in range (0 , n) :
LP=LP+[LP [ − 1 ] / ( i +1)∗ l ]
p l t . p l o t ( SommeCumulee ( LP ) , ’ b ’ )
p l t . show ( )
Pour illustrer la loi faible des grands nombres, on tracera entre deux
entiers n1 et n2 la proportion de tirages obtenus sur N tirages dans
l’intervalle donné par le théorème pour un 2TbBHQM choisi. On utilisera
ici la loi de Bernoulli de paramètre p, mais on pourrait adapter très
facilement à toute loi voulue.
-hBMHPSJUINF
Fonction I l l u s t r a t i o n L F G N ( n1 , n2 , N, p , e p s i l o n )
Donnees
n1 , n2 , N, S , i , j , k : e n t i e r s
LS : l i s t e d ‘ e n t i e r s
p, epsilon : flottants
Debut
LS<−−[0 pour i v a r i a n t de 0 à n2−n1 ]
Pour i v a r i a n t de n1 à n2+1
Faire
kRk
212
Pour j v a r i a n t de 0 à N
Faire
S <−−0
Pour k v a r i a n t de 0 à i
Faire
S i random ()<p
A l o r s S<−−S+1
Fin S i
Fin F a i r e
S i | S/ i −p | >= e p s i l o n
A l o r s LS [ i −n1]<−−LS [ i −n1 ]+1/N
Fin S i
Fin F a i r e
Fin F a i r e
T r a c e r ( LS )
Fin
-F QSPHSBNNF FO 1ZUIPO
def I l l u s t r a t i o n L F G N ( n1 , n2 , N, p , e p s i l o n ) :
LS=[0 f o r l i n r a n g e ( n1 , n2 +1)]
f o r i i n r a n g e ( n1 , n2+1) :
Algorithmes de 2e année
f o r j i n r a n g e ( 0 ,N) :
S=0
for k in range (0 , i ) :
i f r d . random ()<p :
S=S+1
i f a b s ( S/ i −p)>= e p s i l o n :
LS [ i −n1 ]=LS [ i −n1 ]+1/N
p l t . p l o t ( LS )
p l t . show ( )
kRj
213
#PÔUF Ë PVUJMT
kR9
214
$BMDVMT NBUSJDJFMT
Algorithmes de 2e année
def I d e n t i t e ( n ) :
I =[[0 for j in range ( n ) ] for i in range ( n ) ]
for i in range (0 , n) :
I [ i ][ i ] = 1
return I
def T r a c e (A) :
n = l e n (A)
T=0
for i in range (n) :
T=T+A [ i ] [ i ]
return T
def T r a n s p o s e e (A) :
m = l e n (A)
n = l e n (A [ 0 ] )
B= [ [ 0 f o r j i n r a n g e (m) ] f o r i i n r a n g e ( n ) ]
kR8
215
for i in range (n) :
f o r j i n r a n g e (m) :
B[ i ] [ j ] = A[ j ] [ i ]
r e t u r n (B)
def P r o d u i t (A , B) :
m = l e n (A)
n = l e n (A [ 0 ] )
p = l e n (B)
q = l e n (B [ 0 ] )
i f n != p :
print ( ’ erreur :
l e s m a t r i c e s ne s o n t p a s c o m p a t i b l e s ’ )
else :
M= [ [ 0 f o r j i n r a n g e ( q ) ]
f o r i i n r a n g e (m) ]
c o e f f =0
f o r i i n r a n g e (m) :
for j in range (q) :
for k in range (n) :
c o e f f = c o e f f+A [ i ] [ k ] ∗ B [ k ] [ j ]
M[ i ] [ j ] = c o e f f
return M
Pour toute matrice A carrée d’ordre n telle que les valeurs propres
λi de A vérifient |λ1 | > |λi | pour tout i > 1, on a :
h`(An+1 )
HBK = λ1
n→+∞ h`(An )
kRe
216
-hBMHPSJUINF
Fonction VPMAppr (A , N)
Donnees
A , M1, M2 : m a t r i c e s
N, i : e n t i e r s ,
L : l i s t e de f l o t t a n t s
Debut
M1 <−− A
M2 <−− A^2
L <−− [ Tr (M2) / Tr (M1 ) ]
Pour i v a r i a n t de 0 à N+1
Faire
M1 <−− M1 . A
M2 <−− M1 . A
L <−− L + [ Tr (M2) / Tr (M1 ) ]
Fin F a i r e
Tracer (L)
Retourner L [ −1]
Fin
-F QSPHSBNNF FO 1ZUIPO
Algorithmes de 2e année
def VPMAppr (A , N) :
M1=A
M2=P r o d u i t (A , A)
L=[ T r a c e (M2) / T r a c e (M1 ) ]
f o r i i n r a n g e (N+1) :
M1=P r o d u i t (M1, A)
M2=P r o d u i t (M1, A)
L=L+[ T r a c e (M2) / T r a c e (M1 ) ]
plt . plot (L)
p l t . show ( )
r e t u r n L [ −1]
kRd
217
&YQPOFOUJFMMF EF NBUSJDF
-hBMHPSJUINF
Fonction E x p o n e n t i e l l e M (A , N)
Donnees
A , M, E : m a t r i c e s
i : entier
Debut
M <−− I d e n t i t e ( l e n (A ) )
E <−− M
Pour i v a r i a n t de 1 à N+1
Faire
M <−− M∗A/ i
E <−− E + M
Fin F a i r e
Retourner E
Fin
kR3
218
Comme E contient la somme des Mk successifs, la fonction retourne
bien la somme voulue.
-F QSPHSBNNF FO 1ZUIPO
def E x p o n e n t i e l l e M (A , N) :
M=I d e n t i t e ( l e n (A ) )
E=M
f o r i i n r a n g e ( 1 ,N+1) :
M=P r o d u i t (M, A)
f o r i i n r a n g e ( 0 , l e n (A ) ) :
f o r j i n r a n g e ( 0 , l e n (A ) ) :
M[ i ] [ j ] = M[ i ] [ j ] / i
E=E+M
return (E)
#PÔUF Ë PVUJMT
Algorithmes de 2e année
donne un objet, de type ``v
``vUV correspondant à l’entrée (liste ou
liste de listes)
donne la matrice nulle à n lignes
x2`QbUUM-TVV
et p colonnes
donne la matrice identité d’ordre
B/2MiBivUMV
n
i`+2UV donne la trace de la matrice A
donne la transposée de la ma-
i`MbTQb2UV
trice A
donne le produit des matrices A
/QiU-"V
et B
kRN
219
Pour l’exponentielle de matrice on aura cependant recours à une
fonction de la bibliothèque b+BTvXHBMH; :
donne l’exponentielle de la
2tTKUV
matrice A
kky
220
1JMFT
1JMFT
$SÏBUJPO EF MB DMBTTF
DMBTTF 1JMF
1JMF
Algorithmes de 2e année
donc le nouveau sommet
sommet de
de la
la pile
pile;;
• Ajouter un élément an+1
n+1 qui
qui devient
devient le
lenouveau
nouveausommet
sommetde
delalapile.
pile.
On peut se représenter un
un tel
tel objet
objet sous
sous la
la forme
forme ::
33
12
12
67
67
12
12
kkR
kkR
221
qu’au sommet de la pile. On dit pour cela qu’il s’agit d’une structure
last in first out.
Pour définir ces objets en P YTHON, on utilise ici la commande class,
qui permet de créer une structure de données et un ensemble d’opé-
rations ou méthodes possibles avec ceux-ci :
-F QSPHSBNNF FO 1ZUIPO
class Pile :
def __init__ ( s e l f ) :
s e l f . elements =[]
def E s t V i d e ( s e l f ) :
i f s e l f . e l e m e n t s ==[] :
r e t u r n True
else :
return False
def A j o u t e r ( s e l f , x ) :
s e l f . e l e m e n t s = s e l f . e l e m e n t s +[ x ]
def R e t i r e r ( s e l f ) :
i f s e l f . EstVide () :
p r i n t ( ’ I m p o s s i b l e de r e t i r e r :
la pile est vide . ’ )
else :
n=l e n ( s e l f . e l e m e n t s )
s e l f . e l e m e n t s= s e l f . e l e m e n t s [ : n −1]
def Sommet ( s e l f ) :
i f s e l f . EstVide () :
p r i n t ( " I l n ’ y a p a s de sommet :
la pile est vide . ")
else :
r e t u r n s e l f . e l e m e n t s [ −1]
kkk
222
et lui ajouter des éléments en utilisant la méthode DQmi2`. Comme
pour toutes les méthodes, la syntaxe est de la forme :
Q#D2iXK2i?Q/2U`;mK2MibV
Ainsi,
P. Ajouter (12)
P. Ajouter (67)
P. Ajouter (12)
P. Ajouter (3)
Algorithmes de 2e année
• Une fonction superposant deux piles données.
Dans chaque cas, on fait bien attention à ce que les piles d’origine
soient inchangées à la fin de la fonction. En effet, la structure sous-
jacente que nous avons prise pour nos piles est la structure de liste
P YTHON.
-F QSPHSBNNF FO 1ZUIPO
def R e n v e r s e r (P) :
P1 = P i l e ( )
P2 = P i l e ( )
w h i l e not (P . E s t V i d e ( ) ) :
P2 . A j o u t e r (P . Sommet ( ) )
P1 . A j o u t e r (P . Sommet ( ) )
P. Retirer ()
w h i l e not ( P1 . E s t V i d e ( ) ) :
P . A j o u t e r ( P1 . Sommet ( ) )
kkj
223
P1 . R e t i r e r ( )
r e t u r n P2
def A f f i c h a g e (P) :
P1=R e n v e r s e r (P)
w h i l e not ( P1 . E s t V i d e ( ) ) :
p r i n t ( P1 . Sommet ( ) )
P1 . R e t i r e r ( )
def H a u t e u r (P) :
P1 = P i l e ( )
H = 0
w h i l e not (P . E s t V i d e ( ) ) :
H = H + 1
P1 . A j o u t e r (P . Sommet ( ) )
P. Retirer ()
w h i l e not ( P1 . E s t V i d e ( ) ) :
P . A j o u t e r ( P1 . Sommet ( ) )
P1 . R e t i r e r ( )
return H
def S u p e r p o s e r ( P1 , P2 ) :
P3 = P i l e ( )
P4 = P i l e ( )
w h i l e not ( P1 . E s t V i d e ( ) ) :
P3 . A j o u t e r ( P1 . Sommet ( ) )
P4 . A j o u t e r ( P1 . Sommet ( ) )
P1 . R e t i r e r ( )
w h i l e not ( P4 . E s t V i d e ( ) ) :
P1 . A j o u t e r ( P4 . Sommet ( ) )
P4 . R e t i r e r ( )
w h i l e not ( P2 . E s t V i d e ( ) ) :
P3 . A j o u t e r ( P2 . Sommet ( ) )
P4 . A j o u t e r ( P2 . Sommet ( ) )
P2 . R e t i r e r ( )
w h i l e not ( P4 . E s t V i d e ( ) ) :
P2 . A j o u t e r ( P4 . Sommet ( ) )
P4 . R e t i r e r ( )
r e t u r n P3
kk9
224
2VBUSJÒNF QBSUJF
*/%&9
Index
Python
Que vient faire le nom d’un serpent pour nommer un langage
de programmation ? Un groupe d’humoristes britanniques
anima une émission télévisuelle à la BBC sous le titre de Monty
Python’s Flying Circus entre 1969 et 1974. Celle-ci recueillit
un tel succès qu’elle fut reprise par de nombreuses chaînes
LE SAVIEZ-VOUS ?
étrangères.
Le mathématicien hollandais Guido van Rossum, né en 1956,
s’est enthousiasmé pour cette émission. Son autre passion
kk8l’informatique : dès 1986, il commence à concevoir des
fut
langages de programmation. Trois ans plus tard, il en développe
un nouveau qu’il nomme par humour du nom de la troupe de
comiques. La première version publique voit le jour en 1991.
Très philanthrope, van Rossum a souhaité laisser PYTHON
en licence libre et en open data ; il continue régulièrement
à améliorer son œuvre. Les grandes qualités de ce langage,
en particulier sa simplicité et sa lisibilité, ont permis son
développement au point qu’il devenu l’un des plus répandus
dans le monde.
*OEFY EFT DPNNBOEFT
abs, 21 floor, 22
acos, 22 for, 15
alen, 28 frexp, 22
arange, 27 from, 19
array, 27, 219 fsolve, 32, 105
asin, 22 gcd, 22, 59
atan, 22 geometric, 33, 214
axis, 34 grid, 34
bin, 21, 62 help, 21
binomial, 33, 214 hex, 21, 62
choice, 33 id, 9
chr, 21 identity, 27, 219
clf, 34 if, 15
coef, 201 import, 19
complex, 21 in, 67
cos, 22 input, 21
cosh, 22 int, 21, 64
degree, 201 inv, 31
degrees, 22 leggauss, 206
deriv, 201 len, 21
det, 31 linspace, 27
divmod, 21 list, 21
divmode, 52 log, 22
dot, 31, 219 log10, 22
e, 22 log2, 22
eig, 32
matrix, 31
eigvals, 32 max, 21, 75
empty, 27 mean, 30, 77
eval, 21 median, 82
exp, 22 min, 21
factorial, 22 min, 75
float, 21
kke
226
random_integers, 214
randrange, 33
range, 10, 21
roots, 201
round, 21
minimize_scalar, 93 type,
savefig,21 34
ndim, 28 uniform,
set, 21 33
normal, 33 var, 30,28
shape, 79
oct, 62 while,
sin, 22 15
odeint, 33, 118 zeros,
sinh, 2227, 219
ones, 27 size, 28
ord, 21 solve, 32
pi, 22 solve_triangular, 124
plot, 34 sorted, 21, 154
poisson, 33, 214 sqrt, 22
polynomial, 201 std, 79
pow, 21, 22, 46 str, 21
power, 31 sum, 21, 42
print, 21 tan, 22
prod, 30, 42 tanh, 22
quad, 32 trace, 31, 219
radians, 22 transpose, 31, 219
randint, 33 trapz, 111
minimize_scalar,
random, 33 93 type, 21
ndim, 28 uniform, 33
random_integers, 214 kkd
normal,
randrange,33 33 var, 30, 79
oct,
range,6210, 21 while, 15
odeint, 33, 118 zeros, 27, 219
roots, 201
ones, 27
round, 21
ord, 21
savefig, 34
pi, 22
set, 21
plot, 34
shape, 28
poisson, 33, 214
sin, 22
polynomial,
sinh, 22 201
pow, 21,
size, 28 22, 46
power,
solve, 3231
print, 21
solve_triangular, 124
prod,
sorted, 21,42154
30,
quad,
sqrt, 2232
radians,
std, 79 22
randint,
str, 21 33
random,
sum, 21, 3342
random_integers,
tan, 22 214
randrange,
tanh, 22 33
range, 10,219
trace, 31, 21
Index
transpose,
roots, 201 31, 219
round, 21
trapz, 111
savefig, 34
set, 21 227
kkd
shape, 28
sin, 22
*OEFY HÏOÏSBM
tri
récursif, 136, 144
selection, 148
type de données, 2
*OEFY HÏOÏSBM
*OEFY
*OEFY HÏOÏSBM
HÏOÏSBM
uint8, 155
algorithme *OEFY HÏOÏSBM
diviseurs premiers, 54
d’Euclide, 57 division euclidienne,
valeur propre, 216 51, 198
d’Euclide étendu, 194, 199 variance, 77
d’exponentiation rapide, 43
algorithme écart-type,premiers,
diviseurs 79 54
algorithme
de Dijkstra,57169
d’Euclide,
algorithme diviseurs
diviseurs premiers,
exponentielle
division 54
de matrice,
équationeuclidienne,
premiers,
différentielle 218
5451, 198
algorithme
algorithme diviseurs
diviseurs premiers,
premiers, 54
54
algorithme
d’Euclide,
de
algorithme Gauss,
d’Euclide
d’Euclide, 57 57
129
étendu,
57 194, 199 diviseurs
division
diviseurs
division premiers,
euclidienne,
premiers, 541,
d’ordre54
euclidienne,
scalaire 51, 198
51,112
198
d’Euclide,
d’Euclide, 57 division
division euclidienne,
euclidienne, 51,
51, 198
198
d’Euclide
d’Euclide,
de
d’Euclide
d’Euclide, étendu,
57
Hörner,étendu,
d’exponentiation 49
57 194, 199
rapide,
194, 199
43 division euclidienne,
scalaire
division 79d’ordre
1602,
euclidienne,
écart-type,
filtrage gaussien, 51,118
51, 198
198
d’Euclide
d’Euclide étendu,
étendu, 194,
194, 199
199
d’exponentiation
d’Euclide
arbred’Euclide
binaire,
de 185
Dijkstra,
d’exponentiationétendu,
169
étendu, rapide,
194,
rapide,
194, 43
199
43
199 écart-type, 79
vectorielle
exponentielle
écart-type, d’ordre 1,
79 de matrice, 218 115
d’exponentiation
d’exponentiation rapide,
rapide, 43
43 floutage, 160
écart-type, 79
d’exponentiation
de
arc, 167 Dijkstra,
d’exponentiation
de Gauss,
Dijkstra, 169
129
169 rapide,
rapide, 43
43 écart-type,
écart-type,
exponentielle79
79 de matrice, 218
de
de Dijkstra,
Dijkstra, 169
169 écart-type,
exponentielle
fonction
exponentielle79 de matrice,
de matrice, 218
218
arête,de167
de Dijkstra,
Gauss,
Hörner,
Dijkstra,
Gauss, 169
129
49
169
129 exponentielle
exponentielle
φ d’Euler, de matrice,
de192
matrice, 218
218
de
de Gauss,
Gauss, 129
129 exponentielle
filtrage de
gaussien, matrice,
160 218
arbre de
de Hörner,
Gauss,
binaire,
Hörner,
Gauss, 185 49
129
49
129 filtrage gaussien,
définition, 17160
bit deparité,
dede Hörner,
Hörner,164 49
49 floutage,
filtrage 160
filtrage gaussien,
gaussien, 160
160
arbre
arc,
arbre167binaire,
de Hörner,
binaire,
de Hörner, 185
185 49
49 filtrage
filtrage gaussien,
gaussien,
récursive,
floutage, 160 18160
160
arbre
boucle
arbre binaire,
binaire, 185
185 filtrage
fonction
floutage,
floutage, gaussien,
160
160 160
arc,
arbre
arc,
arbre167
arête,
167binaire,
167
binaire, 185
185 15 floutage,
fusion,
floutage, 160
144
160
arc,
arc, 167
conditionnelle, fonction
φ d’Euler,
floutage,
fonction 160 192
arête,167
arc, 167
arête,
arc, 167167
167 fonction
fonctiond’Euler, 192
arête,
arête,
bit 167
inconditionnelle,
167
de 167
parité, 164 15 fonction
φ
définition,
fonction
φ
φ d’Euler,
d’Euler, 17
192
192
arête,
arête, 167 φ d’Euler,
d’Euler,
définition, 192
192
17
bit de
boucle
bit parité, 164 graphe,
φ
φ 167
récursive,
d’Euler,
définition,
définition, 18
192
17
17
bit de
bit de parité,
de parité,de
chiffrement
parité,
164
164
164 Vigenère, 161 définition,
récursive,
définition,
fusion, 144
pondéré, 17
18
17
168
bit de
boucle
bit parité,
de parité, 164
conditionnelle, 15 récursive,
définition,
récursive, 1818
17
18
boucle
boucle
classe,
boucle 221 164 15
conditionnelle,
récursive,
fusion, 144
récursive,
fusion, 144
récursive, 18
18
boucle
boucle inconditionnelle,
conditionnelle,
conditionnelle, 15
15 15 fusion,
fusion, 144
144
clé conditionnelle,
inconditionnelle,
conditionnelle, 15 15 15
1515 fusion,
fusion,
graphe, 144
144
167
inconditionnelle,
conditionnelle,
inconditionnelle,
privée, 195Vigenère, 15 Hörner, 49
inconditionnelle,
chiffrement de
inconditionnelle, 15 161
15 graphe, 167
pondéré,
inconditionnelle,
publique,
chiffrement de 195Vigenère,15 161 graphe,
graphe,
graphe, 167 168
167
167
classe, 221
chiffrement
chiffrement de de Vigenère,
de Vigenère, 161
Vigenère, 161
161 graphe,
graphe, 167
pondéré,
167
pondéré,
intégration 168
168
numérique, 204
chiffrement
chiffrement
code
classe,de221 de
Hamming, Vigenère,
164 161 pondéré,
pondéré, 168
168
clé
chiffrement
classe, 221
classe, 221
221 de Vigenère, 161 pondéré,
pondéré, 168
168 rectangles, 106
classe,
clé
classe,
colonie 221
de fourmis, 175 Hörner, 49
méthode des
clé privée,
classe,
clé 221 195 Hörner, 49
clé
clé privée,
complexité,
publique,
privée, 195
26
195195 méthode
Hörner,
Hörner, 49 des trapèzes, 108
49
clé privée,
privée, 195
195 Hörner,
Hörner, 49
49
privée,
publique,
concaténation,
code privée, 195195
11 164
195195
de Hamming,
publique, Hörner, 49
intégration numérique, 204
publique,
publique, 195
195 intégration
méthode numérique, 204
des rectangles,
code publique,
de
contours, Hamming,
code publique,
colonie
code de de
de 157
Hamming,
Hamming,
195
195 164
fourmis, 164
175
164
intégration
intégration numérique,
lissage, 160
intégration numérique,
numérique, 204 106
204
204
code
code
coloniede
de
conversion Hamming,
Hamming,
de fourmis, 164
164
175 intégration
loi méthode
intégration
méthode numérique,
des
numérique,
des 204 108
rectangles,
204
trapèzes,
rectangles, 106
106
complexité,
code
colonie
coloniede de
de 26
Hamming,
fourmis,
fourmis, 164
175
175 méthode des
méthode des rectangles,
rectangles, 106
106
coloniede
complexité,
colonie de
la
de fourmis,
base
26
fourmis,
b 175
vers la
175 base 10, 62 méthode
binomiale,
méthode des
des rectangles,
trapèzes,
33, 208
rectangles,
trapèzes, 106
108
106
108
concaténation,
complexité,
colonie
complexité,de 26 11
fourmis,
26 175 méthode
méthode des
des trapèzes,
trapèzes, 108
108
complexité,
de la 157
complexité,
concaténation, 26
base
26 10 vers la base b, 59 méthode
faible
méthode des
des trapèzes,
grands
160 des trapèzes, 108 108
nombres,
contours,
complexité,
concaténation,
concaténation, 26 11
11
11
lissage,
concaténation,
crible
contours,
concaténation,157 11
d’Erathostène,
11 190 lissage, 160212
conversion
contours, 157
concaténation,
contours, 157 11 loi
lissage,
lissage, 160
160
géometrique, 33, 209
contours,
cryptage, 157
161 lissage,
lissage, 160
160
loi binomiale,
conversion
contours,
conversion
contours, 157
de la 157
base b vers la base 10, 62 lissage,
loi 160 3333, 208
OEFY HÏOÏSBM
conversion
conversion
de
conversion
de la base
de la
conversion la base
base
bb vers
10 versla
vers
vers
base
base10,
lalabase
la base
62
b, 59
10,
10, 62
62
loi
loi normale,
loi faible
loi binomiale,des 33,
binomiale,
binomiale, 33,
33,
208
grands
208 nombres,
208
dichotomie,
criblede
de la
la base
base bbb vers
94 10
d’Erathostène, vers
versla
lala
190 base
base
base10,
10,
b, 62
62
59 binomiale,
uniforme,
faible
faible des
binomiale,
212
des
binomiale,
33,
33, 208
207
grands
33, 208
grands
33, nombres,
208 nombres,
de
de la
la base
base 10
10 b vers
verslala
vers labase
base10,
base b, 62
59
b, 59 faible
faible des
des grands
grands nombres,
nombres,
crible de
de
cryptage, la base 10
d’Erathostène,
la base
161 10 vers
vers la
190
la base
base b,
b, 59
59 faible 212
géometrique,
faible des
212
des 33,
grands
grands209 nombres,
nombres,
cribleded’Erathostène,
crible d’Erathostène,
la base 10 vers190 190
la base b, 59 212
212
géometrique, 33, 209
crible
cryptage,
crible d’Erathostène,
161
d’Erathostène, 190
190 kk3 212
normale,
géometrique,
212
géometrique,33 33,
33, 209
209
cryptage,
crible
cryptage, 161
d’Erathostène,
161 190 géometrique,
géometrique, 33,
33, 209
209
cryptage,
dichotomie,
cryptage, 16194 normale, 33
uniforme,
géometrique,
normale, 33
33, 33,
207209
cryptage, 161 161 normale,
normale, 33 33
dichotomie,
diviseurs
dichotomie, 94
premiers,
94 54 uniforme,
normale,
uniforme,
normale, 33,
33
33,
33 207
207
dichotomie,
dichotomie, 94 94 uniforme,
uniforme, 33,33, 207
207
dichotomie,
dichotomie, 94
94
division euclidienne, 51, 198 uniforme,
uniforme, 33,33, 207
207
kk3
4, 199 kk3
kk3
kk3
kk3
ide, 43 écart-type, 79 kk3
kk3 kjy
exponentielle de matrice, 218
228
filtrage gaussien, 160
floutage, 160
fonction
matrice, 27, 215 problème du voyageur de com-
d’adjacence,
matrice, 27, 215 168 problème merce, 175
du voyageur de com-
matrice, 27,
27, 215
d’adjacence,
inverse,
matrice, 31 168
215 problème
produit
problème du
d’une
merce, voyageur
du liste de réels,
175
voyageur de
de40com-
com-
d’adjacence, merce, 175
matrice, 31 31168
27, 215
transposée,
d’adjacence,
inverse, 168 produit
problème du voyageur de40com-
d’une
programmation liste
merce, de
175 réels,
orientée objet, 221
inverse, produit
produit d’une liste de
de réels, 40
7331
d’adjacence,
maximum,
inverse, 31 31168
transposée, programmation
puissance merce,
d’une liste175 réels,
orientée 40 221
objet,
transposée, programmation orientée objet,
40 221
inverse,
d’une 7331 31
fonction,
transposée,
maximum, 31 91 produit
puissance
d’und’une
programmationréel,liste
43 de réels,
orientée objet, 221
maximum, 73
transposée, puissance
programmation
puissance orientée objet, 221
médiane,
d’une79,
maximum, 7314131 91
fonction, d’un réel, 43
d’une
méthode
médiane,
d’une79,
maximum, fonction,
73141 91
fonction, 91 d’un
d’un réel,
recherche
puissance réel, 43
43
médiane,
de 79, 141
Lagrange, d’un
recherche mot dans une chaîne, 85
méthode
d’une
médiane, 141 103
fonction,
79, 91 d’un
recherche réel, 43
méthode
de Lagrange,
d’Euler, 113 103 d’un pivot,
recherche mot dans125une chaîne, 85
médiane,
méthode 79, 141 d’un
de
de Lagrange,
Gauss,113
Lagrange,
d’Euler,
méthode 127103
103 d’un mot
recherche pivot,
mot dans
élément
dans une
une chaîne,
125dans 85
une liste,
chaîne, 85
d’Euler, 113 d’un pivot,
d’un 65,
mot 69
pivot, 125
dans
élément une chaîne,
125dans 85
une liste,
Lagrange,
de Newton,
Gauss,113
d’Euler, 127103204
100, d’un élément
de
des Gauss, 127
rectangles,
d’une
d’un 65, 69 125dans
séquence
pivot,
élément dansune
dans une liste,
une liste,
de Newton,
d’Euler,
Gauss, 113 100,106
127 204 65,
83 69
de d’une
d’un 65,séquence dans
69 dans une une liste,
desNewton,
de trapèzes,
Newton, 100,
rectangles,
Gauss, 127108
100, 204
106
204 d’une
élément
séquence dans
des rectangles, 106 dichotomique
83
d’une65, 69
séquence dans une
d’un une liste,
élément,
liste,
de Newton,
des
moyenne, 75 100,
rectangles,
trapèzes, 108 204
106 83
67
dichotomique
83 d’un élément,
des rectangles,
trapèzes, 108 d’une séquence
dichotomique dans
d’un une liste,
des
moyenne, trapèzes,
75 108106 du zéro
67
dichotomique
83 d’un élément,
d’une fonction élément,
moyenne,
des de
moyenne, 75
trapèzes,
75 108 du 67
méthode
zéro
67 d’unede Newton,
fonction 100
niveaux gris, 155 dichotomique
du zéro d’une d’un élément,
moyenne, 75 duméthode
zéro
67 d’unede fonction
du point fixe,100
Newton,
fonction 99
niveaux premier,
nombre de gris, 155
53, 54, 190 méthode de Newton,
niveaux de gris, méthode
dupar d’unedu
zérodichotomie, point94fixe,100
de fonction
Newton, 99
100
niveaux
noyau gris, 155
deconvolution,
nombredepremier, 155
53, 54, 190
158 méthode du point
nombre RSA, 195 méthode de
par dichotomie, point94fixe,
du Newton, 99
fixe,100
99
noyau depremier,
niveaux
nombre 53,
53, 54,
deconvolution,
gris, 155
premier, 54, 190
190
158 par
par dichotomie,
méthode du
dichotomie, 94
point
94 fixe, 99
noyau de convolution, 158 RSA, 195
nombre
noyau depremier, 53,
convolution, 54, 190
158 RSA,
objet RSA, 195
somme d’une
par
195 liste de réels,
dichotomie, 94 40
noyau de convolution,
objetindexable, 3 158 somme de contrôle,
d’une liste de164
réels, 40
RSA,
somme 195
objet
objetmutable,
indexable,3 3 somme d’une
sommet, de167 liste
liste de
contrôle,
d’une réels,
réels, 40
de164 40
somme de contrôle, 164
objetindexable,
indexable,3 33
mutable, suite
somme
sommet,récurrente,
d’une
de167 89de164
liste
contrôle, réels, 40
sommet, de167
objetmutable,
mutable,233 3
indexable,
itérable, somme
suite d’ordre
sommet,
suite
1, 8889 164
contrôle,
récurrente,
167
récurrente,
objet
objetmutable,
itérable,6923
occurrence, système
sommet, 1671, 8889
d’équations
suite d’ordre
récurrente, 89 linéaires, 127
itérable, 22 71 suite d’ordre
système 1,
1, 88
récurrente,
d’équations
triangulaire,
d’ordre 8889
122linéaires, 127
objet nombre
occurrence, d’,
itérable,69 système d’équations
occurrence,
OPEL, 25 69
itérable,
nombre
occurrence, 692 71
d’, d’ordre
système 1, 88122linéaires,
d’équations
triangulaire, linéaires, 127
127
nombre d’, triangulaire,
tableau, 27 122
occurrence,
OPEL, 25 69
nombre d’, 71
71 système d’équations
triangulaire, 122linéaires, 127
OPEL, 25 coupe,
tableau, 27 29 122
triangulaire,
OPEL, nombre
25136d’, 71
partition, tableau, 27
OPEL, 25 tas, coupe,
185
tableau, 27 29
partition,
PGCD, 57136 test coupe,
tableau,
de 27 29
primalité,
coupe,
tas, 185 29 53
partition,
partition,57136 tas,
phéromones,
PGCD,
PGCD,
136176 tas, 185
test coupe,
de
trace,
185 29 53
primalité,
31, 215
PGCD, 22157
partition,57136176
phéromones,
pile, test
tas, de
test 185 primalité,
transposée,
de31,
trace, 215 53
primalité,
215 53
phéromones,
PGCD, 57 176
phéromones,
pile,
pivot,221
136 176 trace, 31, 215
pile, 221 test
tri de31,
trace, primalité,
transposée, 215 53
215
phéromones,
136 176
pile, 221
pivot,
pixel, 155 transposée,
trace,
tri bulles,
31, 215
transposée, 215
150
215
pivot,
pile, 136
221
pivot,court
pixel,
plus 136 chemin, 169
155 tri en place,
bulles,
transposée,
tri 150
215 140
pixel,
pivot,
plus
poids, 155
136
pixel,court
155
168 chemin, 169 bulles, 150
en place,
tri fusion,
bulles, 144
150140
plus
plus court
pixel,
poids, 168 chemin,
155
court
polynôme, 47, 197 169
chemin, 169 en
en place,
bulles,
par 150140
insertion,
place, 140 134
fusion, 144
poids,
plus 168
poids, 168 47, 197 169
court
polynôme,
polynômes chemin, fusion,
en
par place,144140 134152
insertion,
énumération,
fusion, 144
polynôme,
poids, 47,
47, 197 par insertion,
185 134
de168
polynôme,
polynômes Legendre,197202 fusion,
par 144
insertion,
énumération,
tas, 134152
polynômes
polynôme,
polynômes 47,
de Legendre, 197202 par
par énumération,
185 134152
insertion,
énumération,
tas,
rapide, 136 152
orthogonaux,
Index
de
de Legendre,
polynômes Legendre, 202
orthogonaux, 202 par
par tas, 185
énumération,
tas, 136
rapide, 185 152
orthogonaux,
de
orthogonaux, 202
Legendre, 202
202 rapide,
par tas, 136
rapide, 185
136
kkN
orthogonaux, 202 rapide, 136
kkN
kkN
229
kkN
kkN
tri
récursif, 136, 144
selection, 148
type de données, 2
kjy
kjy
230
P R É P A S S C I E N C E S
Une vision claire des savoirs, une mobilisation
rapide des connaissances et des compétences sont
les atouts indispensables à la réussite en prépa.
Ce formulaire d’Informatique Pour Tous (IPT) répond
parfaitement à ces exigences.
Il présente de façon synthétique l’intégralité du programme
d’IPT des classes préparatoires aux grandes écoles scientifiques
première et deuxième années.
-:HSMDOA=UW[XY[: