Académique Documents
Professionnel Documents
Culture Documents
l’Algorithmique
2023
Plan du cours
1. Présentation
2. Langage de description
3. Les structures Conditionnelles
4. Les boucles
5. Fonctions et Procédures
6. La Récursivité
7. Les Tableaux
8. Les Méthodes de Tri
9. Complexité des Algorithmes
2
Objectifs du cours
Ce cours a pour but de résoudre des
problématiques données, tout en définissant
et en additionnant des critères qui
permettront d’obtenir des résultats répondant
justement à ces problématiques.
1. Présentation
Présentation informelle
Considérons les étapes qui interviennent dans la résolution problème
quelconque :
1. concevoir une procédure qui une à fois appliquée amènera à une
solution du problème ;
2. résoudre effectivement le problème en appliquant cette méthode.
Le résultat du premier point sera nommé un algorithme. Quant au
deuxième point, c'est-à-dire la mise en pratique de l'algorithme, nous
l'appellerons un processus.
Ces notions sont très répandues dans la vie courante. Un algorithme
peut par exemple y prendre la forme :
d'une recette de cuisine,
d'un mode d'emploi,
d'une notice de montage,
d'une partition musicale,
d'un texte de loi,
d'un itinéraire routier.
Dans le cas particulier de l'informatique, une étape supplémentaire vient
se glisser entre la conception de l'algorithme et sa réalisation à travers un
processus : l'algorithme doit être rendu compréhensible par la machine
que nous allons utiliser pour résoudre effectivement le problème.
Le résultat de la traduction de l'algorithme dans un langage connu de la
machine est appelé un programme.
Rapide historique
C'est un mathématicien perse du 8ème siècle, Al-Khawarizmi, qui a donné son
nom à la notion d'algorithme. Son besoin était de traduire un livre de
mathématiques venu d'Inde pour que les résultats et les méthodes exposés dans
ce livre se répandent dans le monde arabe puis en Europe. Les résultats
devaient donc être compréhensibles par tout autre mathématicien et les
méthodes applicables, sans ambiguïté.
En particulier, ce livre utilisait une numérotation de position, ainsi que le
chiffre zéro que ce type de représentation des nombres rend nécessaire. Par
ailleurs, le titre de ce livre devait être repris pour désigner une branche des
mathématiques, l'algèbre.
Si l'origine du mot algorithme est très ancienne, la notion même d'algorithme
l'est plus encore : on la sait présente chez les babyloniens, 1800 ans avant JC.
Une tablette assyrienne provenant de la bibliothèque d'Assurbanipal et
datée de -640 expose une recette pour obtenir des pigments bleus
(notons que pour avoir un algorithme satisfaisant, il faudrait préciser ici
les temps de cuisson !) :
tu ajouteras à un mana de bon tersitu un tiers de mana de verre sirsu
broyé, un tiers de mana de sable, cinq kisal de craie,
tu broieras encore,
tu le recueilleras dans un moule, en le fermant avec un moule
réplique,
tu le placeras dans les ouvreaux du four,
il rougeoira et uknû merku en sortira.
En résumé, il doit être bien clair que cette notion d'algorithme dépasse,
de loin, l'informatique et les ordinateurs. Nécessite un vocabulaire
partagé, des opérations de base maîtrisées par tous et de la précision.
2. Langage de description
Premiers éléments
Instructions de sorties
On se donne une instruction Écrire pour afficher du texte, ainsi
qu'une instruction ALaLigne pour poursuivre l'affichage à la
ligne suivante.
Patron d'un algorithme
Le patron général est le suivant :
Algorithme NomAlgorithme
Début
... actions
Fin
La première ligne, appelée profil donne essentiellement le nom
de l'algorithme. On trouve ensuite un délimiteur de début puis
les différentes actions composant l'algorithme et enfin un
délimiteur de fin.
Ainsi, l'algorithme suivant est valide :
Algorithme Bonjour
Début
Écrire('Hello world !!!')
ALaLigne
Fin
Quelles sont les quantités des trois seaux que Asmae a reçues?
22 Notions Fondamentales (2/2)
Notion d’algorithme : si les huis phrases sont bien exécutée par Karim,
alors l’histoire est un algorithme
Notion d’instruction : chacune de huis phrases est une instruction (un
ordre)
Notion de valeur : { 0, 3, 5, 6, 8, 10 }
Notion de mémoire : elle est matérialisée par les seaux qui
« mémorisent » les quantités de liquide
Notion de variable : une variable est un emplacement mémoire, ici on
a trois variables (le seau en plastique, le seau en bois et le seau en fer)
Notion d’environnement : c’est l’ensemble des objet, informations,
personnes qui on une existence hors de l’histoire mais qui
interviennent dans son déroulement.
Notion des valeurs d’entrée et de sortie : c’est les valeurs que le
processeur reçoit de l’environnement et celles qu’il donne à
l’environnement durant l’exucution. Valeurs en entrée :{6, 10}
Valeurs en sortie = {0, 3, 8}
23
Notion de variable
Dans les langages de programmation une variable sert à stocker
la valeur d’une donnée
un nom (Identificateur)
un type (entier, réel, caractère, chaîne de caractères, …)
24
Choix des identificateurs (1)
Le choix des noms de variables est soumis à quelques règles qui
varient selon le langage, mais en général:
Ex valides: i ←1 j ←i k ←i+j
x ←10.3 OK ←FAUX ch1 ←"SMI"
ch2 ←ch1 x ←4 x ←j
(voir la déclaration des variables dans le transparent précédent)
Variables A, B, C: Entier
Début
A←3
B←7
A←B
B ← A+5
C←A+B
C←B–A
Fin
31 Exercices simples sur l'affectation (2)
Variables A, B : Entier
Début
A←1
B←2
A←B
B←A
Fin
^ : (élévation à la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple: 2 + 3 * 7 vaut 23
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer la valeur de A ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
Fin
38
Exercice (lecture et écriture)
Ecrire un algorithme qui vous demande de saisir votre nom puis
votre prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom & Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
Exercice (respect des règles)
Chacun de ces quatre algorithmes contient une erreur. Laquelle?
Algorithme1 Algorithme2
Variables Variables
Quantité : entier X, Y, Z : réel
Prix_unit : réel Début
Début Lire (X, Y, Z)
Lire (Quantité, Prix_unit) Z :=X-Y
Prix_total := Quantité * Prix_unit Écrire (Z)
Écrire (Prix_total) Fin
Fin
Algorithme3 Algorithme4
Variables Variables
A1, A2: entier X : réel
A3 : réel Début
Début Lire (X)
Lire (A1, A2) X := X-1
A2 := A1 * A3 X :=Pi * X
Écrire (A2) Écrire (X)
Fin Fin
3
40
Méthode de construction d’un algorithme
simple (1/4)
Exemple :
Algorithme
Calcul_Aire
Constantes
Pi = 3,14159
Variables
Rayon, Surface : réels
Début
lire (Rayon)
Surface := Pi * (Rayon)2
écrire (Surface)
Fin
4
Méthode de construction d’un algorithme simple
(3/4)
4
3. Les structures
Conditionnelles
Besoin a des concepts de ruptures de séquence
4
46
Les structures conditionnelles et les boucles
la condition peut être une condition simple ou une condition composée de plusieurs
conditions
48 Tests: instructions conditionnelles (2)
Si condition alors
instruction ou suite d'instructions1
Finsi
49 Exemple (Si…Alors…Sinon)
Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
5
54
Tests imbriqués
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
55
Tests imbriqués: exemple (version 1)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors
Ecrire ("Ce nombre est négatif")
Sinon
Si n = 0 alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
56
Tests imbriqués: exemple (version 2)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si n < 0 alors Ecrire ("Ce nombre est négatif")
Finsi
Si n = 0 alors Ecrire ("Ce nombre est nul")
Finsi
Si n > 0 alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que
dans la version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer
d'abord les conditions les plus probables(minimiser la complexité)
57 Tests imbriqués: exercice
Variables
A, B, C, Delta, X1, X2 : réels
Début
Lire (A, B, C)
Delta ← B2 – 4 AC
Sinon
X1 ← (-B ) / 2A
Ecrire (« le trinome possède une racine réelle : », X1)
Finsi
Finsi
Fin
4. Les boucles
Les types de boucle
62
TantQue (condition)
instructions
FinTantQue condition
Vrai instructions
Faux
64
Boucle Tant que : exemple simple
Un algorithme qui détermine le premier nombre entier N tel que
la somme de 1 à N dépasse strictement 100
pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15
68 Méthode d’Euclide : Algorithme
Soient r0, r1 deux entiers strictement positifs, tels que r0=r1.q+r2 avec
0≤r2<r1
instructions
FinPour
i ←initiale
Vrai
i n'a pas atteint finale instructions i ← i + pas
Faux
71
Les boucles Pour
Remarques :
Pas est un entier qui peut être positif ou négatif. Pas peut ne
pas être mentionné, car par défaut sa valeur est égal à 1.
Dans ce cas, le nombre d'itérations est égal à finale - initiale+ 1
a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas
positif (ou si compteur est < à finale pour un pas négatif), on sort de
la boucle et on continue avec l'instruction qui suit FinPour
b) Si compteur est <= à finale dans le cas d'un pas positif (ou si
compteur est >= à finale pour un pas négatif), instructions seront
exécutées
instructions
FinPour
peut être remplacé par : compteur ← initiale
(cas d'un pas positif) TantQue compteur <= finale
instructions
compteur ← compteur+pas
FinTantQue
Lien entre Pour et TantQue: exemple
76
Calcul de x à la puissance n
avec la boucle Pour et la
boucle TantQue
Exemple: Exécution
Pour i allant de 1 à 5 OX
Pour j allant de 1 à i OOX
écrire("O") OOOX
FinPour OOOOX
écrire("X") OOOOOX
FinPour
84 La boucle Faire…Tant Que
Faire
Instruction(s)
Tant que (condition) Instruction(s) de la
boucle
do
Instruction;
while (condition)
condition
do Vraie
{
La boucle s’exécute tant que la Fausse
f :=n; condition est vraie. La boucle
n--; cesse lorque la condition est
} while (n>1); fausse. À utiliser si l’on veut que la
boucle soit exécutée au moins une
fois
85
Les boucles Répéter … jusqu’à …
Répéter
instructions instructions
Jusqu'à condition
Faux
condition
Vrai
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et
leur exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est
fausse)
86
Boucle Répéter jusqu’à : exemple
Problème: Écrire
l’algorithme qui calcul la racine carrée
d’un nombre sans avoir recours a la fonction
mathématique Racine Carrée prédéfinie.
Procédure : si
n est le nombre dont on souhaite extraire la
racine carrée. On construit une suite de nombres Xi
dont le premier vaut 1 et dont le terme générale a
pour expression :
Xi = (n/xi-1 + xi-1) / 2
Rq : Cette suite converge systématiquement vers
racarrée (n)
Algorithme de la racine carrée
Utiliser l’algorithme qu’on a déjà fait estPremier (le plus petit nombre
premier p supérieur à un entier n) en tant que fonction.
Fait appel a cette fonction a l’intérieur de l’algorithme premier-plus-grand
La fonction de recherche des nombres premiers
Fonction estPremier
Fonction est-premier (m : entier) : booléen
Pour i := 2 à ENT(m/2) Faire
Si m mod i = 0 alors // i divise m
Retourne (Faux)
Retourne (Vrai)
FinFonction est-premier
10
Entrée: Un entier positif m Entrée: Un entier positif n
Sortie: Vrai si m est premier, Faux si non. Sortie: Le plus petit nb premier m > n
Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure
FinProcédure
Remarque : une procédure peut ne pas avoir de paramètres
103 Appel d'une procédure
L'appel d'une procédure, se fait dans le programme principale ou dans une autre
procédure par une instruction indiquant le nom de la procédure :
FinProcédure
Algorithme exepmleAppelProcédure
Début
exemple_proc (…)
…
Fin
Remarque : le paramètre effectif doit être une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse
Algorithme Test_incrementer1
variables n, m : entier
Début
n←3
m←3
incrementer1(n, m) résultat :
écrire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
Transmission par valeur, par adresse : exemples
107
• Conseil : Il faut utiliser autant que possible des variables locales plutôt
que des variables globales. Ceci permet d'économiser la mémoire et
d'assurer l'indépendance de la procédure ou de la fonction
6. La Récursivité
111
Récursivité
Définition :Un algorithme est dit récursif lorsqu’il est défini en fonction de lui-
même.
Récursivité simple
La fonction puissance x xn. Cette fonction peut être définie récursivement :
112
Types de Récursivité
Récursivité multiple : Une définition récursive peut contenir plus d’un appel récursif. Nous
voulons calculer ici les combinaisons Cnp en se servant de la relation de Pascal
Récursivité mutuelle : Des définitions sont dites mutuellement récursives si elles dépendent les
unes des autres. Ça peut être le cas pour la définition de la parité :
113
Itération et Récursivité : Exemple
Calcul de factoriel :
Calcul fact,
Variables
N,f : entier
Debut
f 1
tantque (n > 1)
Version itérative
f f * (n−1);
fintantque
Ecrire(f)
End;
114
Itération et Récursivité : Exemple
Le corps d’une fonction récursive doit toujours exprimer un choix, soit par une
expression conditionnelle, soit par une définition par cas
Au moins un cas terminal rend une valeur qui n’utilise pas la fonction définie
117
Fonctions récursives : exercice
nbre ← 0
Si (N1 >10) alors nbre ←nbre+1 FinSi
….
Si (N30>10) alors nbre ←nbre+1 FinSi
c'est lourd à écrire
Heureusement, les langages de programmation offrent la possibilité de
rassembler toutes ces variables dans une seule structure de donnée
appelée tableau
123
Tableaux
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus
souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce
cas, notes[i] désigne l'élément i+1 du tableau notes
En tous cas, un tableau est inutilisable tant qu’on n’a pas précisé le nombre de
ses éléments
Un grand avantage des tableaux est qu'on peut traiter les données qui y
sont stockées de façon simple en utilisant des boucles
125 Tableaux : exemples (1)
Pour le calcul du nombre d'étudiants ayant une note supérieure
à 10 avec les tableaux, on peut écrire :
Algorithme Tableaux
variable p : entier
tableau A[10] : réel
Début
p ← 10
SaisieTab(p, A)
AfficheTab(p,A)
Fin
128 Tableaux : fonction longueur
La plus part des langages offrent une fonction longueur qui donne la dimension
du tableau. Les procédures Saisie et Affiche peuvent être réécrites comme suit :
Procédure SaisieTab( tableau T : réel par référence )
variable i: entier
Pour i allant de 0 à longueur(T)-1
écrire ("Saisie de l'élément ", i + 1)
lire (T[i] )
FinPour
Fin Procédure
Procédure AfficheTab(tableau T : réel par valeur )
variable i: entier
Pour i allant de 0 à longueur(T)-1
écrire ("T[",i, "] =", T[i])
FinPour
Fin Procédure
129
Tableaux à deux dimensions
Algorithme Matrices
variables tableau M1[3][4],M2 [3][4],M3 [3][4] : réel
Début
SaisieMatrice(3, 4, M1)
SaisieMatrice(3, 4, M2)
AfficheMatrice(3,4, M1)
AfficheMatrice(3,4, M2)
SommeMatrice(3, 4, M1,M2,M3)
AfficheMatrice(3,4, M3)
Fin
134 Tableaux : trouver l’erreur
Algorithme 1 Algorithme 2
Essai de tableau 1 Essai de tableau 2
Variables Variables
i : entier i, x : entiers
Tab(10) : tableau d’entiers Tab(10) : tableau d’entiers
Début Début
tant que (i <= 10) pour i variant de 1 à 10
lire tab(i) Si Tab(i+1) < Tab(i) alors
i ← i+1 permute Tab(i), Tab(i+1)
Fin de tant que Fin de Si
Fin Fin de pour
Fin
135 Tableaux : Exemple d’exercice
Recherche séquentielle
Recherche dichotomique
La complexité dans le pire des cas est d'ordre N, (on note O(N))
N 103 106 109
Pour un ordinateur qui effectue 106 tests par seconde on a :
temps 1ms 1s 16mn40s
142 Recherche dichotomique
Dans le cas où le tableau est ordonné, on peut améliorer
l'efficacité de la recherche en utilisant la méthode de
recherche dichotomique
Considérons le tableau T : 4 6 10 15 17 18 24 27 30
Si la valeur cherché est 20 alors les indices inf, sup et milieu vont
évoluer comme suit :
inf 0 5 5 6
sup 8 8 5 5
milieu 4 6 5
La méthode de tri
148 Les algorithmes de Tri
Tris avancées
Tri rapide
…..
149 Tri par sélection
Tri par sélection : méthodologie
15
151 Tri par sélection : algorithme
temp ← T[indice]
T[indice] ← T[i] Permutation des deux valeurs
T[i] ← temp
FinPour
152 Tri par sélection : exemple
Exemple : 9 4 1 7 3
Étape 1: on cherche le plus petit parmi les 5 éléments du tableau. On
l’identifie en troisième position, et on l’échange alors avec l’élément
1:
1 4 9 7 3
Étape 3: 1 3 4 7 9
154
Tri par sélection : complexité
155 Tri par insertion
156 Tri par insertion : algorithme
Tri par insertion : exemple
Simuler l’algorithme du tri par insertion sur le tableau suivant on montrant les
étapes d’exécution.
2 56 4 7 0
15
158 Tri par insertion : Exemple
- Prendre l’élément i
- Insérer i dans l’ordre entre 0 et i
- Continuer à partir de i+1
2, 56, 4, 7, 0
2, 56, 4, 7, 0
2, 56, 4, 7, 0
2, 4, 56, 7, 0
2, 4, 7, 56, 0
0, 2, 4, 7, 56
159 Tri à bulles
160 Tri à bulles : algorithme
Tri à bulles : exemple
4 1 5 3 2
16
162
Tri à bulles : exemple
Un balayage
2 2 2 2 1
3 3 3 1 2
Sens de
5 5 1 3 3
lecture de 1 1 5 5 5
tableau
4 4 4 4 4
variable q: entier
Si p <r alors
Partition(T,p,r,q)
TriRapide(T,p,q-1)
TriRapide(T,q+1,r)
FinSi
Fin Procédure
2 2 1 7 3 4 3 6
<3 3
2 2 1 3 3 4 7 6
Suite du tri
TRI TRI
1 2 2 3 3 4 6 7
9. Complexité des Algorithmes
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur :
temps de calcul pour exécuter les opérations, et l'occupation de la mémoire pour
contenir et manipuler le programme et ses données.
Donnée : entier n
Résultat : entier
Variable locale : entier som
début
som n * (n+1) div 2
retourner som
fin
Le temps ne dépend pas de n.
Complexité linéaire O(n)
Algorithme 73 : recherche_tableau (tab: tableau, n : entier, but:
173 T): booléen
2. fin = 4
milieu = 2
tab[2] = 12 < 15
3. début = 3
milieu = 3
tab[3] = 13 <15
4. début = 4
milieu = 4
tab[4]=15
but = 24
1. milieu = 5
177 tab[5]= 16<24
2. début = 6
milieu = 7
tab[7] = 21<24
3. début = 8
milieu = 8
tab[8] = 25 >24