Académique Documents
Professionnel Documents
Culture Documents
Introduction
Introduction
Introduction
Introduction
Introduction
Introduction
Introduction
Introduction
Introduction
Introduction
• Données :
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un algorithme possible
Un autre exemple
Un autre exemple
Un autre exemple
Un autre exemple
Un autre exemple
Un autre exemple
Un autre exemple
Un autre exemple
Méthodologie
Méthodologie
Méthodologie
Méthodologie
Méthodologie
Méthodologie
Méthodologie
Méthodologie
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
• Des variables :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
• Des variables :
• Des opérateurs :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
• Des variables :
• Des opérateurs :
• Des expressions :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
• Des variables :
• Des opérateurs :
• Des expressions :
• Des instructions :
Pseudo-langage
Afin d’uniformiser l’écriture des algorithmes, un pseudo-langage
(non normalisé) contenant l’indispensable est utilisé :
• Des données :
• Des variables :
• Des opérateurs :
• Des expressions :
• Des instructions :
• Des fonctions :
Algorithmique Lycée Jean Moulin : NSI 8/29
Algorithmique Analyse des algorithmes
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables :
• Des opérateurs :
• Des expressions :
• Des instructions :
• Des fonctions :
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables : Elles sont modifiables, elles possèdent un type,
contiennent une valeur et sont identifiées par un nom explicite
• Des opérateurs :
• Des expressions :
• Des instructions :
• Des fonctions :
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables : Elles sont modifiables, elles possèdent un type,
contiennent une valeur et sont identifiées par un nom explicite
• Des opérateurs : Chaque type de donnée admet un jeu
d’opérateurs adapté (arithmétiques (+,-..), relationnels (==,>,..)
et logiques (et, ou,..)
• Des expressions :
• Des instructions :
• Des fonctions :
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables : Elles sont modifiables, elles possèdent un type,
contiennent une valeur et sont identifiées par un nom explicite
• Des opérateurs : Chaque type de donnée admet un jeu
d’opérateurs adapté (arithmétiques (+,-..), relationnels (==,>,..)
et logiques (et, ou,..)
• Des expressions : b/a est une expression numérique et a , 0 est
une expression booléenne
• Des instructions :
• Des fonctions :
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables : Elles sont modifiables, elles possèdent un type,
contiennent une valeur et sont identifiées par un nom explicite
• Des opérateurs : Chaque type de donnée admet un jeu
d’opérateurs adapté (arithmétiques (+,-..), relationnels (==,>,..)
et logiques (et, ou,..)
• Des expressions : b/a est une expression numérique et a , 0 est
une expression booléenne
• Des instructions : Elles peuvent être simples comme l’affectation
(x← b/a) ou structurées comme les instructions conditionnelles
(if, else) et répétitives(for ou while)
• Des fonctions :
Pseudo-langage
• Des données : Ce sont des valeurs extérieures introduites dans
l’algorithme. Une constante est une valeur non modifiable (π,...)
• Des variables : Elles sont modifiables, elles possèdent un type,
contiennent une valeur et sont identifiées par un nom explicite
• Des opérateurs : Chaque type de donnée admet un jeu
d’opérateurs adapté (arithmétiques (+,-..), relationnels (==,>,..)
et logiques (et, ou,..)
• Des expressions : b/a est une expression numérique et a , 0 est
une expression booléenne
• Des instructions : Elles peuvent être simples comme l’affectation
(x← b/a) ou structurées comme les instructions conditionnelles
(if, else) et répétitives(for ou while)
• Des fonctions : Elles permettent d’automatiser des tâches
répétitives, d’ajouter de la clarté et d’être utilisées dans d’autres
algorithmes
Algorithmique Lycée Jean Moulin : NSI 8/29
Algorithmique Analyse des algorithmes
Par soustractions :
385-210=175
210-175=35
175-35=140
140-35=105
105-35=70
70-35=35
35-35=0
PGCD→ 35
Par soustractions :
385-210=175
Avec leur
210-175=35
décomposition en
175-35=140
produit :
140-35=105
385 = 7 × 6 × 5
105-35=70
210 = 7 × 5 × 11
70-35=35
PGCD→ 7 × 5 = 35
35-35=0
PGCD→ 35
Par soustractions :
385-210=175
Avec leur L’algorithme
210-175=35
décomposition en d’Euclide :
175-35=140
produit : 385 = 1 × 210 + 175
140-35=105
385 = 7 × 6 × 5 210 = 1 × 175 + 35
105-35=70
210 = 7 × 5 × 11 175 = 5 × 35 + 0
70-35=35
PGCD→ 7 × 5 = 35 PGCD → 35
35-35=0
PGCD→ 35
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Problématique
Problématique
Problématique
Problématique
Problématique
Problématique
Pourquoi faire ?
Pourquoi faire ?
Pourquoi faire ?
Pourquoi faire ?
Quelques anecdotes...
Quelques anecdotes...
Quelques anecdotes...
Quelques anecdotes...
Terminaison : exemple 1
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Terminaison : exemple 1
Données : n ∈ N
La terminaison :
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Terminaison : exemple 1
Données : n ∈ N
La terminaison :
S← 0
Les affectations ne posent pas de
Pour i allant de 0 à n faire
problème et la boucle est bornée
S=S+i
retourner S
Terminaison : exemple 1
Données : n ∈ N
La terminaison :
S← 0
Les affectations ne posent pas de
Pour i allant de 0 à n faire
problème et la boucle est bornée
S=S+i
L’algorithme se termine bien...
retourner S
Terminaison : exemple 2
Données : n ∈ N
S←0
i←0
Tant que i <= n faire
S=S+i
i=i+1
retourner S
Terminaison : exemple 2
La terminaison :
Données : n ∈ N
S←0
i←0
Tant que i <= n faire
S=S+i
i=i+1
retourner S
Terminaison : exemple 2
La terminaison :
Les affectations ne posent pas de
Données : n ∈ N problème
S←0
i←0
Tant que i <= n faire
S=S+i
i=i+1
retourner S
Terminaison : exemple 2
La terminaison :
Les affectations ne posent pas de
Données : n ∈ N problème
Pour savoir si la boucle Tant que se
S←0 termine, il faut exhiber ce que l’on
i←0 appelle un variant de boucle, c’est à
Tant que i <= n faire dire une suite d’entiers strictement
S=S+i croissante majorée (ou strictement
i=i+1 décroissante minorée)
retourner S
Terminaison : exemple 2
La terminaison :
Les affectations ne posent pas de
Données : n ∈ N problème
Pour savoir si la boucle Tant que se
S←0 termine, il faut exhiber ce que l’on
i←0 appelle un variant de boucle, c’est à
Tant que i <= n faire dire une suite d’entiers strictement
S=S+i croissante majorée (ou strictement
i=i+1 décroissante minorée)
La suite des itérateurs i fera l’affaire, à
retourner S chaque tour de boucle, i est incrémenté
de 1 et ne peut dépasser n
Terminaison : exemple 2
La terminaison :
Les affectations ne posent pas de
Données : n ∈ N problème
Pour savoir si la boucle Tant que se
S←0 termine, il faut exhiber ce que l’on
i←0 appelle un variant de boucle, c’est à
Tant que i <= n faire dire une suite d’entiers strictement
S=S+i croissante majorée (ou strictement
i=i+1 décroissante minorée)
La suite des itérateurs i fera l’affaire, à
retourner S chaque tour de boucle, i est incrémenté
de 1 et ne peut dépasser n
L’algorithme se termine bien...
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
La terminaison :
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
La terminaison :
Les affectations ne posent pas de
fonction pgcd(a,b)
problème
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
La terminaison :
Les affectations ne posent pas de
fonction pgcd(a,b)
problème
u←a
À chaque tour de boucle, on calcule la
v←b
différence u − v ou v − u.
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
La terminaison :
Les affectations ne posent pas de
fonction pgcd(a,b)
problème
u←a
À chaque tour de boucle, on calcule la
v←b
différence u − v ou v − u.
Tant que u , v faire
La suite abs(u-v) est une suite d’entiers
Si u > v alors
strictement décroissante et positive
u ← u-v
(donc minorée par 0) et comme elle ne
Sinon peut décroître indéfiniment, elle
v ← v-u
atteindra donc 0
retourner u
Terminaison : exemple 3
Données : (a,b)∈ N∗ × N∗
La terminaison :
Les affectations ne posent pas de
fonction pgcd(a,b)
problème
u←a
À chaque tour de boucle, on calcule la
v←b
différence u − v ou v − u.
Tant que u , v faire
La suite abs(u-v) est une suite d’entiers
Si u > v alors
strictement décroissante et positive
u ← u-v
(donc minorée par 0) et comme elle ne
Sinon peut décroître indéfiniment, elle
v ← v-u
atteindra donc 0
L’algorithme se termine bien...
retourner u
La
suite de Syracuse d’un nombre entier N > 0 est définie par :
u0 = N > 0
un
un+1 = si un est pair
2
n+1 = 3un + 1 sinon
u
La conjecture de Syracuse, affirme que quelque soit l’entier N > 0
la suite aboutit sur le nombre 1 !
Il n’existe aucune preuve mathématique de ce résultat
Données : :N ∈ N∗
fonction syracuse(N)
u←N
Tant que u , 1 faire
Si u est pair alors
u ← u/2
Sinon
u ← 3*u+1
retourner u
Données : :N ∈ N∗
fonction syracuse(N)
u←N La terminaison :
Tant que u , 1 faire
Si u est pair alors
u ← u/2
Sinon
u ← 3*u+1
retourner u
Données : :N ∈ N∗
fonction syracuse(N)
u←N La terminaison :
Tant que u , 1 faire Comme il n’existe pas de preuve
Si u est pair alors mathématique, et même si tous les
u ← u/2 nombres testés aboutissent bien sur 1
Sinon
u ← 3*u+1
retourner u
Données : :N ∈ N∗
fonction syracuse(N)
u←N La terminaison :
Tant que u , 1 faire Comme il n’existe pas de preuve
Si u est pair alors mathématique, et même si tous les
u ← u/2 nombres testés aboutissent bien sur 1
Sinon On ne peut prouver la terminaison...
u ← 3*u+1
retourner u
Correction : exemple 1
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Correction : exemple 1
La correction :
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Correction : exemple 1
La correction :
On considère la propriété : S
contient la somme des entiers
jusqu’à n
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Correction : exemple 1
La correction :
On considère la propriété : S
contient la somme des entiers
jusqu’à n
Données : n ∈ N Lors de l’initialisation, S contient
0 donc S contient bien la somme
S← 0 des entiers jusqu’à 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Correction : exemple 1
La correction :
On considère la propriété : S
contient la somme des entiers
jusqu’à n
Données : n ∈ N Lors de l’initialisation, S contient
0 donc S contient bien la somme
S← 0 des entiers jusqu’à 0
Pour i allant de 0 à n faire Pour i=k, S contient la somme
S=S+i des k premiers entiers, à l’étape
suivante i=k+1 S contiendra la
retourner S somme des k+1 premiers entiers
Correction : exemple 1
La correction :
On considère la propriété : S
contient la somme des entiers
jusqu’à n
Données : n ∈ N Lors de l’initialisation, S contient
0 donc S contient bien la somme
S← 0 des entiers jusqu’à 0
Pour i allant de 0 à n faire Pour i=k, S contient la somme
S=S+i des k premiers entiers, à l’étape
suivante i=k+1 S contiendra la
retourner S somme des k+1 premiers entiers
Puisque l’algorithme se termine
pour k=n, et que S contient la
somme des n premiers entiers,
l’algorithme est donc correct
Algorithmique Lycée Jean Moulin : NSI 22/29
Algorithmique Analyse des algorithmes
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
La correction :
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
La correction :
On considère la propriété :
fonction pgcd(a,b)
pgcd(a,b)=pgcd(u,v)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
La correction :
On considère la propriété :
fonction pgcd(a,b)
pgcd(a,b)=pgcd(u,v)
u←a
Un théorème de mathématique nous
v←b
assure que :
Tant que u , v faire
pgcd(u, v) = pgcd(u−v, v) = pgcd(u, v−u)
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
La correction :
On considère la propriété :
fonction pgcd(a,b)
pgcd(a,b)=pgcd(u,v)
u←a
Un théorème de mathématique nous
v←b
assure que :
Tant que u , v faire
pgcd(u, v) = pgcd(u−v, v) = pgcd(u, v−u)
Si u > v alors
Comme c’est exactement ce qu’il se
u ← u-v
passe à chaque itération et que celle-ci
Sinon se termine sur pgcd(u, u)
v ← v-u
retourner u
Correction : exemple 2
Données : (a,b)∈ N∗ × N∗
La correction :
On considère la propriété :
fonction pgcd(a,b)
pgcd(a,b)=pgcd(u,v)
u←a
Un théorème de mathématique nous
v←b
assure que :
Tant que u , v faire
pgcd(u, v) = pgcd(u−v, v) = pgcd(u, v−u)
Si u > v alors
Comme c’est exactement ce qu’il se
u ← u-v
passe à chaque itération et que celle-ci
Sinon se termine sur pgcd(u, u)
v ← v-u
L’algorithme calcule bien ce qu’il
promet...
retourner u
Complexité : exemple 1
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Complexité : exemple 1
La complexité :
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Complexité : exemple 1
La complexité :
S ← 0 une opération
Données : n ∈ N
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Complexité : exemple 1
La complexité :
S ← 0 une opération
Données : n ∈ N
Il y a n + 1 additions et n + 1
affectations
S← 0
Pour i allant de 0 à n faire
S=S+i
retourner S
Complexité : exemple 1
La complexité :
S ← 0 une opération
Données : n ∈ N
Il y a n + 1 additions et n + 1
affectations
S← 0
Il y a également les n
Pour i allant de 0 à n faire
incrémentations de la boucle for
S=S+i
retourner S
Complexité : exemple 1
La complexité :
S ← 0 une opération
Données : n ∈ N
Il y a n + 1 additions et n + 1
affectations
S← 0
Il y a également les n
Pour i allant de 0 à n faire
incrémentations de la boucle for
S=S+i
Il y a au total 3n + 3 opérations
élémentaires. Dans ce cas on dira
retourner S que la complexité est linéaire et
cela se note : O(n) ou Θ(n)
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
fonction pgcd(a,b)
u←a
v←b
Tant que u , v faire
Si u > v alors
u ← u-v
Sinon
v ← v-u
retourner u
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
retourner u
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
retourner u
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
retourner u
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
retourner u
Complexité : exemple 2
Données : (a,b)∈ N∗ × N∗
retourner u
Complexité : exemple 3
Données : n n ∈ N
S← 0
Pour i allant de 1 à n faire
Pour j allant de 1 à n faire
S=S+i+j
retourner S
Complexité : exemple 3
La complexité :
Données : n n ∈ N
S← 0
Pour i allant de 1 à n faire
Pour j allant de 1 à n faire
S=S+i+j
retourner S
Complexité : exemple 3
La complexité :
1 affectation
Données : n n ∈ N
S← 0
Pour i allant de 1 à n faire
Pour j allant de 1 à n faire
S=S+i+j
retourner S
Complexité : exemple 3
La complexité :
1 affectation
Pour chaque i on fait 2n
Données : n n ∈ N additions et n affectations
S← 0
Pour i allant de 1 à n faire
Pour j allant de 1 à n faire
S=S+i+j
retourner S
Complexité : exemple 3
La complexité :
1 affectation
Pour chaque i on fait 2n
Données : n n ∈ N additions et n affectations
Il y aura donc n × (3n) + 1
S← 0 opérations élémentaires
Pour i allant de 1 à n faire
Pour j allant de 1 à n faire
S=S+i+j
retourner S
Complexité : exemple 3
La complexité :
1 affectation
Pour chaque i on fait 2n
Données : n n ∈ N additions et n affectations
Il y aura donc n × (3n) + 1
S← 0 opérations élémentaires
Pour i allant de 1 à n faire De plus chaque incrémentation
Pour j allant de 1 à n fairede i ou j compte pour une
S=S+i+j opération élémentaire soit : n × n
opérations supplémentaires
retourner S Au total il y a : 4n2 + 1 opérations
élémentaires. Soit une
complexité quadratique notée
Θ(n2 ) ou O(n2 )