Académique Documents
Professionnel Documents
Culture Documents
L’algorithmique
Pr Oubedda Latifa
Introduction à L’algorithmique 2023/2024
Un algorithme peut être assimilé à un raisonnement que l’on peut traduire avec
un langage que toute personne peut comprendre. Ce langage est appelé LDA :
Langage de Description d’Algorithme qui n’est pas un langage informatique
mais un pseudo-code utilisé pour simplifier l’écriture algorithmique.
Introduction à L’algorithmique 2023/2024
Le programme informatique est donc la traduction du LDA à un autre langage
compréhensible pour la machine (Pascal, Visual Basic, C, C++, C#, Java…)
3
La programmation commence par un raisonnement logique et chronologique qui sera explicité
dans un algorithme par des instructions élémentaires suivant un certain ordre logique afin
d’aboutir aux résultats souhaités. Ces instructions sont écrites avec le langage LDA dans un
premier temps pour bien magner la structure de l’algorithme et dans un deuxième temps ces
instructions seront traduisent avec un langage informatique compréhensible par l’ordinateur
qui va exécuter ces instructions.
Exemple-1
Ecrire un plan d’algorithme qui permet de résoudre l’équation ax+b = 0
Début algorithme
Retenir (saisir, lire) la valeur de a.
Retenir (saisir, lire) la valeur de b.
Si a est égal à zéro il y aura pas de solution.
Sinon la valeur de x est obtenue en divisant -b par a.
Afficher la valeur de x
Fin algorithme
a. Début algorithme.
b. Retenir (saisir, lire) le mot à rechercher.
c. Ouvrir le dictionnaire à la première page.
d. Tant que le mot ne se trouve pas sur la page courante et la page courante n'est pas la
dernière exécuter l'étape e) sinon passer à l'étape f).
e. Passer à la page suivante.
f. Si le mot s'y trouve lire la définition sinon ce mot ne se trouve pas dans le
dictionnaire.
g. Fin de l'algorithme.
Bien évidement cette méthode n’est pas rapide. Et ce c’est pas la méthode qu’on utilise pour
faire ce genre de recherche ? . La méthode de recherche la plus intuitive est la suivante :
a. Début algorithme.
b. Retenir (saisir, lire) le mot à rechercher.
c. Ouvrir le dictionnaire à la page du milieu.
d. Tant que le mot ne se trouve pas sur la page courante et la page courante n'est pas la
dernière exécuter l'étape e) et f) sinon passer à l'étape g).
e. Si le mot se trouve dans la partie droite ouvre la page du milieu de cette partie
f.Sinon ouvre la page du milieu de la partie gauche g.
Si le mot s'y trouve lire la définition sinon ce mot ne se trouve pas dans le
dictionnaire.
h. Fin de l'algorithme.
Introduction à L’algorithmique 2023/2024
D’après l’exemple-2 on peut conclure que plusieurs résonnement (algorithmes) peuvent
aboutir aux mêmes résultats. Donc il est toujours préférable de garder l’algorithme qui donne
5le résultat le plus rapidement possible sans consommer beaucoup de mémoire.
C’est pourquoi on utilise généralement une série de conventions appelée « pseudo-code », qui
ressemble à un langage de programmation dont on aurait évacué la plupart des problèmes de
syntaxe. Ce pseudo-code est susceptible de varier légèrement d’un livre (ou d’un enseignant)
à un autre. C’est bien normal : le pseudo-code, encore une fois, est purement conventionnel ;
aucune machine n’est censée le reconnaître.
Dans ce "langage", les algorithmes sont représentés par des blocs d'actions. On appellera bloc
d'actions un ensemble d'actions enchaînées séquentiellement dont l'exécution ne peut
commencer que par la première action du bloc et ne peut se terminer que par la dernière.
D'où la notation:
Début bloc
Action 1;
Action 2;
…………
Action n;
Fin bloc
Introduction à L’algorithmique 2023/2024
2.1.1 Structure fondamentale d’un algorithme
Nom de l’algorithme :
Les déclarations :
Le corps de l’algorithme :
Les commentaires :
Les Constantes :
o Elles représentent des chiffres, des nombres, des caractères, des chaînes de
caractères, … dont la valeur ne peut pas être modifiée au cours de l’exécution
de l’algorithme.
Les Variables :
o Elles peuvent stocker des chiffres des nombres, des caractères, des chaînes de
caractères,… dont la valeur peut être modifiée au cours de l’exécution de
l’algorithme.
Introduction à L’algorithmique 2023/2024
Les Structures :
o Elles permettent de rassembler plusieurs variables ou constantes sous un même
7
identificateur, on parle également d’entités ou d’objets.
Exemples :
Il ne peut prendre que deux états possibles : VRAI ou FAUX (True ou False)
8
Les différents types de variables données en langage C sont représentés dans le tableau ci-
dessous.
Arithmétique Comparaison
Logique
Opérateur Algo
Fonction ET ET
Fonction OU OU
Fonction OU Exclusif OUX
Fonction NON NON
Dans les instructions Il y a un certain ordre d’exécution de ces opérateurs. Cette est mentionné
ci-dessous :
Variables A, B, C en Entier
Début
A ←5
B ←3
C←A + B
A ←2
C ← B –A + B
Fin
Variables A, B en Entier
Début
A ➛5
B ➛A+ 4
A ➛A+ 1
B ➛A –7
B ➛A -B -7
Fin
Après exécution de cet algorithme on aura A=6, B=0
Var A, B, K : entiers
Lire (A)
Lire (B)
K A
A B
B K
Ecrire (A, B)
Cet algorithme permet d’échanger les valeurs de deux variables A et B, et ce quel que soit
leur contenu préalable.
4 Structures de contrôles
Sans ces structures un algorithme va s’exécuter d’une manière linéaire c.-à-d. une exécution
suivant l’ordre où elles sont énoncées.
Traitement 1
Traitement 2
Traitement 3
11
Traitement 4
Introduction à L’algorithmique 2023/2024
Les structures de contrôles permettent de contrôler l’exécution linaire d’une suite
d’instructions. Il existe deux catégories de structures de contrôles
11
Structures de contrôle alternatives
Structures de contrôle itératives (répétitives)
Si la condition est vérifiée les traitements se font dans cet ordre : (T1 T2 T3).
Si la condition n’est pas vérifiée les traitements se font dans cet ordre : (T1 T3).
Cette structure est utilisée dans un algorithme de la manière suivante :
SI <condition> ALORS
[<bloc d'actions-1>]
FIN SI
[<bloc d'actions-2>]
12
Si la condition est vérifiée les traitements se font dans l’ordre suivant: (T1 T2 T4).
Si la condition n’est pas vérifiée les traitements se font dans l’ordre suivant: (T1 T3 T4).
Dans un algorithme on écrit :
SI <condition> ALORS
[<bloc d'actions 1>]
SINON
[<bloc d'actions 2>]
FIN SI
[<bloc d'actions 3>]
Si on n’a pas d’instruction à mettre entre le «sinon » et « si », on peut les écrire sur la même
ligne. Dans ce cas on aura besoin de fermer avec « FinSi » que le premier « si » utilisé.
Si <condition1> Alors
Traitement 1;
Sinon Si <condition2> Alors
Traitement 2;
Sinon Si <condition3> Alors
Traitement 3;
Sinon Si <condition4> Alors
Traitement 4;
Sinon
Traitement 5;
Fin Si
Var a, b, c : entiers
Var x1, x2, D : réels
Lire (a, b, c)
Si (a=0) alors
Si (b=0) alors
Si (c=0) alors
Ecrire(«la solution est I R »)
Sinon
E crire(«impossible»)
Finsi
Sinon
x1 -c/b
Ecrire(«la solution est :», x1)
Finsi
Sinon
D b^2 – 4*a*c
Si (D>0) alors
Ecrire(«les solutions sont: », (-b+sqrt(D))/(2*a), (-b-sqrt(D))/(2*a))
Sinon
Si (D=0) alors
Ecrire(«la solution est: », -b/(2*a))
sinon
Ecrire (« pas de solution dans I R »)
FinSi
FinSi
F inSi
Fin
Introduction à L’algorithmique 2023/2024
2. Structures de contrôle itératives
Les structures itératives permettent de répéter l’exécution d’un ensemble d’instructions une ou
16plusieurs fois. Ces structures sont regroupées sous deux grandes familles selon si : le nombre
de répétitions est connu ou pas.
Dans cette structure, la sortie de la boucle d’itération s’effectue lorsque le nombre souhaité de
répétition est atteint.
On utilise donc une variable d’itérations caractérisée par :
• sa valeur initiale V i
• sa valeur finale Vf
• son pas de variation p
En pseudo-code on écrit :
Dans le cas où la valeur finale de l’indice est inférieure à sa valeur initiale le pas de variation
est négatif, la structure est dite «décroissante». Dans le cas contraire, le pas est positif et la
structure est dite «croissante ».
Exemple :
L’algorithme qui permet de faire la somme de N valeurs est :
Var V, S, N, i entiers
S0
Lire (N)
Pour i 1 à N Ecrire
(« V= ») Lire
(V)
SS+ V
Suivant i
Ecrire(« la somme est : », S)
La simulation de l’exécution de cet algorithme pour N=3 est donnée par le tableau ci-
dessous :
Introduction à L’algorithmique 2023/2024
Donc après l’arrêt de la boucle, les valeurs qui reste en mémoire de i et S sont : i=4, S=-5
i V0
Tant que <condition> faire
[<bloc d’actions >]
i i+1
Fin tant que
Exemple :
Nous voulons écrire un algorithme qui calcul la somme des valeurs saisies à l’entrée. On
arrête le calcul de la somme lorsque l’utilisateur saisi la valeur var = -1. La valeur -1 ne doit
être intégrée dans le calcul de la somme.
Introduction à L’algorithmique 2023/2024
Var S, var : entier
i1
18S 0
Ecrire ("saisir la valeur", i)
Lire (var)
Tant que (var < > -1) faire
S S + var
ii+ 1
Ecrire ("saisir la valeur", i)
Lire (var)
Fin tant que
Ecrire("La somme est :", S)
Ecrire("Le nombre de valeur sommées est :", i-1)
i V0
Répéter
[<bloc d’actions >]
i i+1
Tant que <condition>
Dans ce cas la vérification de la condition se fait après l’exécution du bloc d’instruction. Donc
le bloc d’instruction s’exécute au moins une fois.
Introduction à L’algorithmique 2023/2024
Exemple :
Nous voulons écrire un algorithme qui calcul la somme des valeurs saisies à l’entrée. On
19arrête le calcul lorsque la somme devienne supérieure à 1000.
Le choix entre les structures de répétition déjà mentionnées se fait suivant deux critères :
Est que le nombre d’itération connu ou pas ?
Est que le Traitement doit être exécuté avant ou après le test d’arrêt de la boucle ?
Introduction à L’algorithmique 2023/2024
6 Les tableaux
Dans la plus part du temps, on aura besoin dans des algorithmes de garder en mémoire
plusieurs valeurs. Dans ce cas on doit déclarer des tableaux. Ces dernières permettent de
stoker plusieurs variables de même type sous un même identificateur. On peut déclarer des
tableaux d’entiers de réels ou de caractères. Chaque tableau possède des dimensions, on
parlera de tableau à :
Les cases sont numérotées à partir de zéro, autrement dit que le plus petit indice est zéro. Lors
de la déclaration d’un tableau on doit préciser sa dimension. C-a-d le nombre de cases qu’on
doit réserver dans la mémoire pour stocker toutes les valeurs qu’on aura besoin dans notre
traitement. On précise donc dans la déclaration la plus grande valeur de l'indice qui est
différente du nombre de cases du tableau. Si, par exemple, on veut 12 emplacements, le plus
grand indice sera 11.
Syntaxe en pseudo-code :
En mémoire un tableau occupe un seul bloc continu et linéaire. Chaque case du tableau
déclaré correspond à une allocation d’un ensemble continu d’emplacement mémoire appelé
« élément mémoire ». Chaque case est adressée par l’adresse mémoire qui correspond au
premier emplacement mémoire réservé pour stocker le contenu de cette case. La taille de
Introduction à L’algorithmique 2023/2024
l’élément mémoire dépond du type de données stockées dans le tableau. La figure-1
représente l’implantation dans la mémoire centrale d’un tableau à deux dimensions.
22
Exemple-1 :
Dans cet algorithme on a déclaré un tableau T(19). On peut stocker donc 20 valeurs.
Dans cet algorithme on a déclaré une variable Tab. On va stocker donc en mémoire que la
dernière valeur saisie.
Exemple-2:
On veut saisir une suite de nombres, puis afficher cette suite après avoir divisé tous les
nombres par la valeur maximale de la suite. Nécessité donc de conserver les nombres en
mémoire.
Introduction à L’algorithmique 2023/2024
Pour un ensemble de 5 valeurs, l’algorithme qui permet de résoudre le problème est :
Exemple-1:
Donner un algorithme qui stocke n notes dans un tableau de valeur et calcule et affiche la
moyenne. L’utilisateur peut saisir un nombre n de note.
Exemple-2:
Exercice:
Donner un algorithme qui stocke un certain nombre inconnu de notes dans un tableau de
valeur et calcule et affiche la moyenne. L’utilisateur peut arrêter la saisie en entrant (-1).
Introduction à L’algorithmique 2023/2024
var Note() : réels
Var S, Moy : réel
25Var i, n : entier
i=0
Dim(Note, 1)
Ecrire(« donner la note », i+1)
Lire(Note(0))
S0
Tant que (Note(i)<>-1) faire
SS+Note(i)
i i+1
Redim(Note, i+1)
Ecrire(« donner la note », i+1)
lire(Note(i))
Fin tant que
Moy S/n
Ecrire(« la moyenne est : », Moy)
1. Structuration
Les fonctions et les procédures présentent donc un intérêt primordial dans les conceptions des
algorithmes. Ils ont comme rôles de :
Regrouper un ensemble d’instruction dans le même algorithme afin de pouvoir y faire
appel autant de fois que nécessaire.
Avoir un algorithme principal qui fait appel aux différents fonctions et/ou procédures
Avoir une lisibilité et identification faciles des erreurs.
Introduction à L’algorithmique 2023/2024
Il est inutile de connaître comment est définie une fonction ou une procédure pour y faire
appel. Par contre il est nécessaire de connaître sa déclaration (son manuel d’utilisation):
26 Quel est son rôle?
Quels sont les arguments à fournir?
Quelles est la valeur retournée?
Un paramètre de sortie est une variable dont la valeur est affectée par les instructions du
sous-programme
3. Les fonctions
Les fonctions sont des sous-programmes admettant des paramètres et retournant un seul
résultat (comme les fonctions mathématiques y=f(x,y,. . .)
les paramètres sont en nombre fixe (n>0)
une fonction possède un seul type, qui est le type de la valeur retournée
la valeur de retour est spécifiée par l'instruction « retourner (renvoyer) »
Généralement le nom d’une fonction doit être explicite: Maximum() ; Minimum()
Syntaxe en pseudo-code
Remarque :
Dans la syntaxe, on précise qu’un paramètre est d’entrée ou de sortie si on précède le
paramètre par, respectivement, la lettre « E » ou « S ». Si ne précède le paramètre par aucune
lettre on le considère comme d’entrée. Un paramètre est noté d’entrée-Sortie s’il est précédé
par « E/S ».
Introduction à L’algorithmique 2023/2024
Exercice1 : Ecrire un algo qui permet de calculer les termes U1, U2, …., U10 d’une suite
arithmétique connaissant le premier terme U0, la raison « r » et le rang « n ».
27
Solution :
1. Début
2. Var n, U0, U, r : entier
3. Ecrire(« premier terme ?»)
4. Lire(U0)
5. Ecrire(« raison ?»)
6. Lire(r)
7. Ecrire(« les termes U0, U1, …U10 sont: »)
8. Pour n=1 à 10
9. U terme(n, r, U0)
10. Ecrire(U)
11. Ecrire(« »)
12. Suivant n
13. Fin
Exercice2 : Ecrire une fonction Maximum(T, n) qui permet de trouver le maximum d’un
tableau d’un certain nombre de valeurs. Ecrire un algorithme test qui appelle cette fonction.
Solution
Maximum(T(): réel, n : entier)
Var Max : reél
Var i : entier
Max T(0)
POUR i 1 à n-1
SI(T(i) > Max) ALORS
Max T(i)
FIN SI
suivant i
Renvoyer(Max)
Introduction à L’algorithmique 2023/2024
Tableau V( ) : réels
Var M : reél
28Var N, k : entiers
Début
Ecrire(‘’’N=‘’)
Lire (N)
Dim(V, N)
POUR k 0 à N-1
Ecrire(« donner la valeur », k)
lire(V(k))
SUIVANT k
M Maximum(V, N) Ecrire
(« le max est : », M)
Les procédures sont des sous-programmes qui ne retournent aucun résultat. Par contre elles
admettent des paramètres d’entrés, de sorties ou d’Entrés/Sorties.
Syntaxe en pseudo-code
Exercice-1 :
Ecrire une procédure permute(a, b) qui permute les valeurs de ceux variables entiers.
Ecrire une autre procédure Tri (x, y, z) qui tri dans l’ordre croissant en appelant la procédure
permute(a, b). Ecrire un algorithme d’essai.
Solution :
Permuter (a : entier, b: entier)
Début
Var k : entier
K a
ab
bk
Fin
Introduction à L’algorithmique 2023/2024
Trier (x: entier, y : entier, z : entier)
Début
29Si (x<y) alors
Permuter(x, y)
Fin si
Si (y<z) alors
Permuter(y, z)
Fin si
Si (x<y) alors
Permuter(x, y)
Fin si
Fin
Attention!!!!
Dans le langage C la permutation ne va pas s’effectuer à cause des noms des paramètres
fictifs et formels qui ne sont pas les mêmes. Dans ce cas les adresses de ces paramètres seront
différentes. Par conséquent La permutation va se faire seulement pour les valeurs stockées
dans les adresses des paramètres fictifs.
Pour surmonter ce problème on propose deux solutions :
Prendre les mêmes noms des paramètres ce qui est impossible dans ce cas.
Copier dans les paramètres d’entrées les adresses des variables et non pas les valeurs
donc nécessité d’utiliser les pointeurs
Exercice-2 :
Créer une fonction max2(a, b) qui renvoi le maximum de deux variables:
Créer une fonction VMAX(T) qui permet trouver le maximum des éléments d’un vecteur de 4
valeurs et ceci en appelant la fonction max2().
Créer un algorithme d’essai.
Introduction à L’algorithmique 2023/2024
Solution :
VMAX(T(3)): réel
Début
Var M :réel
M Max2(Max2(Max2(T(0), T(1)),T(2)),T(3))
Renvoyer (M)
Afin de pouvoir manipuler les adresses mémoires, nous utilisons les pointeurs. Ces derniers
sont des variables qui contiennent l’adresse des variables d’un certain type. On parle des
pointeurs d’entiers des pointeurs des réels etc….
Il y a deux façons pour manipuler les adresses des variables
En déclarant une variable d’un certain type de valeur. L’adresse sera manipuler par
« &nomvariable » tandis que la valeur stockée dans cette adresse sera donnée par
« nomvariable »
Syntaxe:
Var x : entier
Lire(x)
Ecrire (« l’adresse de x est : &x)
Ecrire (« la valeur de x est : x)
Introduction à L’algorithmique 2023/2024
En déclarant un pointeur sur une variable d’un certain type. L’adresse sera manipulée par
« nompointeur » et la valeur stockée dans cette adresse est donnée par « *nompointeur »
31
Syntaxe:
Var x : entier
Var p : pointeur_entier
Lire(x)
P = &x
Ecrire (« l’adresse de x est : p)
Ecrire (« la valeur de x est : *p)
Exemple de Récursivité
n! = 1*2*…..*(n-1)*n
Introduction à L’algorithmique 2023/2024
n! = n*(n-1)!
Pour calculer la valeur de n!, il suffit donc de savoir calculer (n-1)! Et ensuite de multiplier
33
cette valeur par n.
Le sous problème du calcul (n-1)! Est le même problème initial, mais pour un cas « plus
simple » car (n-1 < n)
1. Exemples
1. Fonction Factoriel
Ecrire l'algorithme de la fonction factorielle en employant les deux méthodes itérative et
récursive.
34Fact(5)=5*Fact(4)
=5*4*Fact(3)
=5*4*3*Fact(2)
=5*4*3*2*Fact(1)
=5*4*3*2*1
On constate que la récursivité ne porte pas sur la variable principale du problème A (variable
dont on cherche la racine : A) mais la récursivité porte sur une autre variable X
Solution :
1. Var Z réel
2. Ecrire(‘’Z=‘’)
3. lire(Z)
4. Ecrire(‘’la racine carré de’’, z, ‘’est’’, racine(Z, 1))
5. Fin
Introduction à L’algorithmique 2023/2024
Simulation A=2, X=1
Ecrire une fonction récursive « RecMax(V, n) » qui renvoi le maximum des valeurs d’un
tableau V de dimension n. cette fonction aura pour argument les éléments du vecteur V et la
dimension n
Solution
36Pour trouver le maximum des valeurs d’un tableau de dimension n (V(0..n-1)) en utilise la
méthode « diviser pour régner ». Cette méthode se compose de trois étapes
Algorithme :
On suppose qu’on dispose d’une fonction Max() qui permet de trouver la maximum de deux
valeurs.
Soit les variables :
Deb : indice du premier élément du tableau
Fin : indice du dernier élément du tableau
Med : indice du milieu d tableau
Max1 : le maximum du premier demi-tableau
Max2 : le minimum du deuxième demi-tableau
Il existe plusieurs méthodes de tri qui se différencient par leur complexité d'exécution et leur
complexité de compréhension pour le programmeur.
Le tri à bulles
Introduction à L’algorithmique 2023/2024
Dans ces deux méthodes de tri, on doit utiliser une procédure qui permet d'échanger (de
permuter) la valeur de deux variables.
37
1. Permuter (E/S a, b : Entier)
2. var T : Entier
3. Début
4. T a
5. ab
6. bT
7. Fin
8.1 Le tri par la méthode du Min ou Max successif (Tri par sélection)
Cette méthode consiste à parcourir le tableau de gauche à droite, on cherche le plus petit
élément puis on le positionne dans l’indice i du tableau. On recommence la même opération
pour le sous-tableau de droite qui commence par l’indice i+1.
Par exemple, pour trier [221, 215, 130, 163, 147, 120] suivant un ordre croissant, on va avoir
les boucles suivantes :
- une fonction Index_min() qui soit capable de déterminer l’indice du petit élément d'un
tableau à partir d'un certain rang.
- Une procédure Tri() qui appelle la fonction Index_Min() pour trouver l’indice i_min
correspondant au minimum puis permute l’élément i_min avec l’élément i.
Algo test
Tableau Tab() : entiers
Var i, D : entiers
Début
Ecrire(« donner le nbre de valeurs)
Lire(D)
Dim(tab, D)
Pour i 0, D-1
Ecrire(« Tab() », i)
lire(Tab(i))
Suivant i
Tri(tab, D)
Pour i 0, D-1
Ecrire(Tab(i)
) Suivant i
Par exemple, pour trier [130, 156, 213, 230, 300] suivant un ordre décroissant, on va avoir les
boucles suivantes :
Introduction à L’algorithmique 2023/2024
39
i=2 ; ………….
Recherche(T(), X , Nb)
Var i, R : entier
i0
Tant que (i<=Nb-1 ET T(i) < X) Alors
i i+1
Fin tant que
Si (i = Nb) alors
Ecrire (« le nombre est introuvable »)
Sinon
Ecrire (« le nombre de trouve dans l’indice »)
Renvoyer (i)
Fin
Une personne choisi un nombre compris entre 1 et 100, on doit deviner ce nombre. Nous
allons faire des propositions et la personne répond "trop grand", "trop petit" ou "gagné". Le
jeu s’arrête lorsqu’on va trouver le nombre.
Var X , N, P
41Ecrire (« donner un nombre entre 0 et 100)
Lire (N)
L ire (P)
Tant que (P < > N) faire
Si (P > N) alors
Ecrire (« trop grand »)
Sinon
Ecrire (« trop petit »)
Fin Si
Lire (P)
Fin tant que
Ecrire (« gagné »)
Si on procède avec cette méthode, nous allons passer beaucoup de temps à chercher le nombre
caché. Quelles techniques de jeu peut-on employer pour gagner le plus rapidement possible ?
Chaque fois qu’on propose un nombre on limite plus l’intervalle de recherche en écrasant les
valeurs de Min et Max.
Simulation
Le nombre caché est 72
Min Max Proposition milieu
Pour trouver la solution le plus rapidement possible nous allons utiliser la méthode de
dichotomie. On prendra pour P le milieu de [a, b].
On itérera le processus jusqu’à obtenir par exemple ƒ ( ᵄ ) < s avec s → 0
Complexité Algorithmique
44
Différents algorithmes, donnant le même résultat, ont des couts différents en termes de temps
d'exécution (nombre d'opérations effectuées par l'algorithme) et taille mémoire (taille
nécessaire pour stocker les différentes structures de données pour l'exécution). Le but d’un
algorithme est de proposer une solution à un problème posé, en minimisant le temps de
traitement et la taille de mémoire consommée. Ces deux concepts sont appelés la complexité
en temps et en espace de l'algorithme.
1. L’analyse de la complexité :
Il existe plusieurs méthodes pour analyser la performance d’un algorithme. Par exemple on
peut citer l’analyse moyenne et l’analyse pessimiste. L’analyse pessimiste est la plus
courante. Elle informe sur le nombre de calculs à prendre en compte dans le pire des cas.
Contrairement à l’analyse moyenne, qui informe sur le temps moyen des calculs.
Dans un algorithme de recherche d’une donnée parmi N données initiales on doit parcourir,
dans le pire des cas, toutes les données. L’analyse pessimiste indique que la recherche
effectue N comparaison. Dans ce cas la complexité est dite linéaire et elle notée O(N). la
notation O formalise que l’analyse de performance porte sur la limite supérieure.
L’intérêt principal de cette analyse pessimiste est d’évaluer les algorithmes dans leur
fonctionnement extrême. Le pire des cas est connu à l’avance.
2. Règles générales
Les règles générales utilisées pour calculer la complexité algorithmique sont :
2. Le temps d'une séquence d'instructions est la somme des TE des instructions qui la
composent.
Introduction à L’algorithmique 2023/2024
3. le temps d'un branchement conditionnel est égal au TE du test plus le max des deux TE
correspondant aux deux alternatives (dans le cas d'un temps max).
45
4. Le temps d'une boucle est égal au coût du test de sortie de boucle plus le corps de la
boucle.
Var T : Entier
Début
T a
ab
bT
fin
début
R <-- 0
i <-- 1
TantQue i < = n Faire
R <-- R+T[i]
i <-- i+1
FinTantQue
Fin
46
L’algorithme est donc asymptotiquement linéaire en n. Cet algorithme à une complexité O(n).
R <-- 0
i <-- 1
TantQue i < = N Faire
R <-- R+T[i]
Si R>1000 Alors
R<-- 2*R
FinSi
i <-- i+1
FinTantQue
t1 : affectation
t2 : test
t3 : somme
t4 : incrémentation
t5: multiplication
t1: test
t2: multiplication
Dans le cas d’un traitement récursif les deux branchements vont être exécutés
T(n) = t1 + t2 + T(n-1)
B<--0
i <--1
Pour i <-- 1 à n Faire
B<--B+2
Pour j <-- 1 à n Faire
T[i,j] <-- (1+T[i,j])*B
Suivant j
Suivant i
Soient :
t1: affectation
t2: somme
t3: test
t4: multiplication
t5: incrémentation
Introduction à L’algorithmique 2023/2024
48
Le Pire des cas est celui où l’élément cherché est absent du tableau. On va effectuer n tests:
49
T(n)=n*C
La complexité est donc linéaire : O(n).
Le temps d’exécution est proportionnel aux nombres de données. Il existe un algorithme plus
efficace
Recherche dichotomique :
N=2k
Donc
Introduction à L’algorithmique 2023/2024