Documente Academic
Documente Profesional
Documente Cultură
Structures de donnes 01
Cours + TDs + TPs
Version 1.0.0
Ismail Hadjadj
Ce document n'est pas rvis, vous pouvez trouver des erreurs d'orthographes, de saisies et autres.
1 Gnralits
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
Introduction . . . . . . . . . . .
Algorithme(Dnition) . . . . .
Structure d'un algorithme : . .
Sous-Programmes . . . . . . . .
1.4.1 Passage de paramtre . .
L'indcidabilit de terminaison .
Conception d'un algorithme . .
1.6.1 Analyse descendent . . .
1.6.2 Analyse ascendante . . .
1.6.3 mlange des deux . . . .
Conclusion . . . . . . . . . . . .
Exercices . . . . . . . . . . . . .
2 Complexit d'Algorithmes
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introduction . . . . . . . . . . . . . . . .
Qualit d'un algorithme . . . . . . . . .
2.2.1 Qualit d'criture . . . . . . . .
2.2.2 Terminaison . . . . . . . . . . . .
2.2.3 Validit . . . . . . . . . . . . . .
2.2.4 Performance . . . . . . . . . . . .
Complexit d'un algorithme . . . . . . .
Msure de complexit . . . . . . . . . . .
Complexit moyenne et en pire des cas .
2.5.1 Temps le plus mouvais(en pire des
2.5.2 Temps moyenne . . . . . . . . . .
Notation utilises . . . . . . . . . . . . .
2.6.1 Notation "o" . . . . . . . . . . .
2.6.2 Notation "O" . . . . . . . . . . .
Un classement des fonctions . . . . . . .
Exercices . . . . . . . . . . . . . . . . . .
2.8.1 Exercice 01 . . . . . . . . . . . .
2.8.2 Exercice 02 . . . . . . . . . . . .
2.8.3 Exercice 03 . . . . . . . . . . . .
2.8.4 Exercice 04 . . . . . . . . . . . .
2.8.5 Exercice 05 . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
cas)
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
6
7
8
8
8
8
8
9
10
10
10
10
10
10
10
10
11
11
11
11
13
13
13
13
14
14
14
15
16
16
Ismail Hadjadj
3 La rcursivit
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
Introduction . . . . . . . . . . . . . .
Dnition . . . . . . . . . . . . . . .
Exemples . . . . . . . . . . . . . . .
3.3.1 Exemple1 . . . . . . . . . . .
3.3.2 Exemple2 : . . . . . . . . . .
Rgles . . . . . . . . . . . . . . . . .
Rcursivit croise . . . . . . . . . .
3.5.1 Exemple : Paire ou impaire .
Problme(les tours d'Hano) . . . . .
Conclusion . . . . . . . . . . . . . . .
Exercices . . . . . . . . . . . . . . . .
3.8.1 Exercice 01 . . . . . . . . . .
3.8.2 Exercice 02 . . . . . . . . . .
3.8.3 Exercice 03 . . . . . . . . . .
3.8.4 Exercice 04 . . . . . . . . . .
3.8.5 Exercice 05 . . . . . . . . . .
TP . . . . . . . . . . . . . . . . . . .
3.9.1 Recherche un lment dans un
3.9.2 Recherche Squentielle . . . .
3.9.3 Recherche dichotomique . . .
3.9.4 Complexit . . . . . . . . . .
4 Structure de donnes
4.1
4.2
4.3
4.4
5.4
5.5
.
.
.
.
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
tableau
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2 Dnition abstraite . . . . . . . . . . . . . . . . . . . . . . .
5.3.3 Dnition axiomatique . . . . . . . . . . . . . . . . . . . . .
Implimentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Implmentation contigu(Utilisation d'un tableau) . . . . . .
5.4.2 Implmentation chanes(Utilisation d'une structure chane)
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1 Exercice 01 : Pointeurs . . . . . . . . . . . . . . . . . . . . .
5.5.2 Exercice 02 : Pointeurs . . . . . . . . . . . . . . . . . . . . .
5.5.3 Exercice 03 : les listes . . . . . . . . . . . . . . . . . . . . .
5.5.4 Exercice 04 :les listes . . . . . . . . . . . . . . . . . . . . . .
5.5.5 Exercice 05 :les listes . . . . . . . . . . . . . . . . . . . . . .
5.5.6 Exercice 06 :Algorithmes de base . . . . . . . . . . . . . . .
5.5.7 Exercice 07 :Un peu avancs . . . . . . . . . . . . . . . . . .
5.5.8 Exercice 08 : Dirence de deux listes linaires chanes . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
18
18
18
19
19
19
20
21
22
22
22
22
22
22
24
24
24
24
25
26
26
26
26
27
27
28
28
28
28
28
29
29
29
29
33
37
37
37
38
38
38
38
38
39
Ismail Hadjadj
6 Les Piles
6.1
6.2
6.3
6.4
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Ensembles . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Description fonctionnelle . . . . . . . . . . . . . . .
6.2.3 Description axiomatique . . . . . . . . . . . . . . .
implmentation . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Utilisation des tableaux (Implmentation Contigu)
6.3.2 Utilisation des pointeurs (Implmentation chane)
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1 Exercice 02 :Algo. de base sur les Piles . . . . . . .
6.4.2 Exercice 03 :Un peu avancs . . . . . . . . . . . . .
6.4.3 Exercice 03 : Inverser pile et le . . . . . . . . . . .
7 Les Files
7.1
7.2
7.3
7.4
Introduction . . . . . . . . . . . . . . . . . . . .
Dnition abstraite . . . . . . . . . . . . . . . .
7.2.1 Ensembles . . . . . . . . . . . . . . . . .
7.2.2 Description fonctionnelle . . . . . . . . .
7.2.3 Description axiomatique . . . . . . . . .
implantation . . . . . . . . . . . . . . . . . . . .
7.3.1 Utilisation des tableaux (Implmentation
Exercices . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Exercice 01 : . . . . . . . . . . . . . . . .
7.4.2 Exercice 02 :Algo. de base sur les Files .
7.4.3 Exercice 03 :Un peu avancs . . . . . . .
7.4.4 Exercice 03 : Inverser une le . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Contigu)
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
40
40
40
41
41
41
41
41
41
42
42
43
44
44
44
44
45
45
45
45
45
45
46
46
47
47
47
47
47
Chapitre 1
Gnralits
1.1 Introduction
pour rsoudre un problme donne par l'informatique l'utilisateur de l'ordinateur doit mettre au
point un programme et l'excution par la machine
Un programme est une succession logique et ordonne d'instructions
Pour crire un programme il faut :
Bien connatre le problme ;
S'avoir le dcouper logiquement en un ensemble d'oprations lmentaires(actions) ;
Connatre un langue de programmation.
problme Algorithme programme
1.2 Algorithme(Dnition)
Un algorithme est une "Spcication d'un schma de calcule sous forme d'une suite nie d'opration
lmentaire un enchanement dtermin".
Ou encore :
La description des tapes suivre pour raliser un travail.
Ismail Hadjadj
Procdure P1(....)
dbut
n
...
...
...
n
dbut
n
...
...
...
...
P 1(...)
var1 f 1(...)
...
1.4 Sous-Programmes
Une fonction est un algorithme indpendant, l'appel de la fonction dclenche l'excution de son
bloc d'instructions. Une fonction se termine entourant ou non une valeur.
Un procdure est une fonction qui retourne vide.
Par rfrence
Il s'agit de modication du valeur du variable pass.
n
npour
n
npour
Algorithme 2: X
Var : y :entier
dbut
n
y1
Ecrire(y)
Algorithme 3: X2
Var : y :entier
dbut
y1
ntq
n
Ecrire(y)
Proposons l'algorithme :
Ismail Hadjadj
Ismail Hadjadj
Algorithme 4: C
dbut
tant que B(C) faire
ntq
n
Ecrire(y)
Notez bien :
Dans ce cours , On tudiera seulement des problmes pour lesquels il existe des algorithmes dcidables.
1.7 Conclusion
dans ce cours on a introduire des notions de base lies l'algorithmique.
1.8 Exercices
Ismail Hadjadj
Chapitre 2
Complexit d'Algorithmes
2.1 Introduction
Il existe souvent plusieurs algorithmes permettant de rsoudre un mme problme. Exemple : les
algorithmes de tri. Le choix du meilleur algorithme implique une analyse de ses performances. En
gnral, le critre le plus important est celui du temps ncessaire son excution. Celui ci dpend le
plus souvent de la quantit de donnes traiter. Par exemple, le temps ncessaire pour trier un ensemble
d'objets dpend du nombre d'objets.
2.2.2 Terminaison
le rsultat doit tre atteint en un nombre ni d'tapes. Il ne faut donc pas de boucles innies, il faut
tudier tous les cas possibles de donnes.
2.2.3 Validit
le rsultat doit rpondre au problme demande. Attention, un jeu d'essais ne prouve
programme est correct. Il peut seulement prouver qu'il est faux.
jamais qu'un
2.2.4 Performance
Etude du cot (complexit) en temps et en mmoire. On s'intresse dans ce cours qu'au complexit
temporelle.
Ismail Hadjadj
11
Soit A un Algorithme
Dn l'ensemble des entres de taille n
I Dn une entre
1. CoutA (i) = nombre d'opration fondamentales excutes par A sur I .
2. La complexit de A en pire des cas :
Tmoy (n) =
X
iD
Ismail Hadjadj
Exemple
Recherche squentielle :
ntq
si j>n alors
RechercheS 1
sinon
RechercheS j
nsi
n
Comlexit en pire des cas :
Tmax (RS) = n
Complexit moyenne :
-P r[x tab] = q
- Si x tab alors tous les places son quiprobables pour 1 i n soit :
Ii = x tab
et
In+10 = x
/ tab
On a :
P r[Ii ] = q/n pour 1 i n et CoutR S(Ii ) = i
et
P r[In+1 ] = 1 q et CoutR S(In+1 ) = n
Tmoy (RS) =
=
n+1
X
j=1
n
X
i=1
= q/n
n
X
i + (1 q)n
i=1
12
Ismail Hadjadj
13
f (x)
=0
lim
g(x)
limx Ce que veut dire que f crot plus lentement que g quand x est trs grand. Par exemple :
x2 = o(x5 )
sin(x)
= o(x)
14.709 x = o(x/2 + 7 cos(x))
23 log(x) = x0.002
Groupe 03 :e x , 1.032x , 2x
Groupe 04 :x!, xx , xx
Ismail Hadjadj
14
2.8 Exercices
Rappele :Notation "O"
2.8.1 Exercice 01
1. Parmi les fonctions suivantes, quelles sont celles qui ont le mme ordre de grandeur ?
f 1(n) = 4n3 + n
f 2(n) = n2 + log2 (n)
f 3(n) = n2 log3 (n) + 6n3
n(n2 + 1)
f 4(n) =
2
2. En utilisant la dnition de O montrer que f (n) + g(n) = O(max(f (n); g(n)))
3. En utilisant la dnition de O montrer que 3n2 + 4n + 6 = O(n2 )
2.8.2 Exercice 02
Considrer les algorithmes suivantes avec un temps d'excution T (n) pour une longueur de donnes
n. Dterminer leur complexits asymptotiques respectives, et les classez par ordre de grandeur croissant.
Algorithme A1 T (n) = 3n + 2
Algorithme A2 T (n) = 6
Algorithme A3 T (n) = 4n2 + n + 2
Algorithme A4
Excuter A1 ;
Excuter A2 ;
Excuter A3 ;
Algorithme A5
Algorithme 5: A5
dbut
pour i 1 n faire
Excuter A3
npour
Excuter A1
n
Algorithme A6
Ismail Hadjadj
15
Algorithme 6: A6
dbut
pour i 1 5 faire
Excuter A1
n
npour
2.8.3 Exercice 03
Evaluer les complexits des fonctions et des programmes suivants en donnant le nombre d'instructions
ralises.
Algorithme 7: A1
Var : a,b :entier
dbut
n
a0
b0
Af f icher(a)
Af f icher(b)
npour
n
somme res
n
npour
n
npour
Ismail Hadjadj
16
n
npour
npour
npour
2.8.4 Exercice 04
Calculer la complexit de la fonction rcursive :
2.8.5 Exercice 05
tudiez le nombre d'additions ralises par les fonctions suivantes dans le meilleur cas, le pire cas,
pour i 1 n faire
si t[i] > a alors
puis dans le cas moyen en supposant que les tests ont une probabilit de d'tre vrai.
s s + t[i]
nsi
npour
n
Fonction f1(a,b :entier) :entier
Var : s :entier
dbut
s0
si a > b
alors
pour i 1 n faire
ss+a
npour
sinon
ss+b
nsi
n
f1 s
f1 s
Chapitre 3
La rcursivit
3.1 Introduction
la rcurrence ("induction") est un outil mathmatique essentiel. Tout informaticien se doit de la
matriser. Heureusement, la rcurrence est une technique simple, en dpit de sa puissance.
La rcursivit est une notion trs utilise en programmation, et qui permet l'expression d'algorithmes
concis, faciles crire et comprendre. La rcursivit peut toujours tre remplace par son quivalent
sous forme d'itrations, mais au dtriment d'algorithmes plus complexes surtout lorsque les structures
de donnes traiter sont elles-mmes de nature rcursive.
3.2 Dnition
Un algorithme (fonction, procdure) est dite rcursif lorsqu'il s'appelle lui-mme, c--d., dnition
(son code) contient un appel lui-mme.
Un algorithme qui n'est pas rcursif est dit itratif.
Notez Bien
sinon
...
P (...) //l'algorithme P appelle lui-mme une
... //ou plusieurs fois
n
nsi
17
3.3 Exemples
3.3.1 Exemple1
Calcul de la factorielle d'un nombre.
Dnition itrative :
n! = F (n) = n (n 1) (n 2) ... 2 1
Soit en algorithmique :
npour
f actorielle f
n
Dnition rcursive :
F (0) = 1
F (n) = n F (n 1); Soit en algorithmique :
sinon
f actorielle f actorielle(n 1) n
n
nsi
3.3.2 Exemple2 :
La suite des nombres de Fibonacci se dnit comme suit :
f0 = 0
f1 = 1
fn = fn1 + fn2 si n > 1
On peut formuler cette suite sous forme de fonction (n >= 0) :
f ibonacci(n) = n si n <= 1
f ibonacci(n) = f ibonacci(n 1) + f ibonacci(n 2) si n > 1
soit en Algorithmique :
sinon
n
nsi
Ismail Hadjadj
18
Ismail Hadjadj
19
3.4 Rgles
1. Tout algorithme rcursif doit distinguer plusieurs cas, dont l'un au moins ne doit pas comporter
d'appel rcursif.
Les cas non rcursifs d'un algorithme rcursif sont appels cas de base.
Les conditions que doivent satisfaire les donnes dans ces cas de base sont appeles conditions
de terminaison.
2. Tout appel rcursif doit se faire avec des donnes plus proches de donnes satisfaisant une condition
de terminaison.
Procdure P1(x)
dbut
n
...
Q(f (x))
...
Procdure Q1(x)
dbut
n
...
P (g(x))
...
sinon
n
nsi
Ismail Hadjadj
20
sinon
n
nsi
sinon
hanoi(n 1, a, 6 a b)
deplacement(a, b)
hanoi(n 1, 6 a b, b)
n
nsi
Ismail Hadjadj
21
Dans cette procdure, nous avons suppos que les piquets sont numrots 1,2,3. Dplacer un disque
se fait par la procdure dplacement. Pour n = l le dplacement est immdiat, autrement on applique
l'algorithme dcrit ci-dessus, 6-a-b tant le numro du troisime piquet (6=1+2+3, donc en soustrayant
deux des trois possibilits de 6 on obtient la troisime).
3.7 Conclusion
Certains problmes peuvent tre rsolus plus logiquement en utilisant la rcursivit. Les programmes
sont plus compacts, plus faciles crire et comprendre. Son usage est naturel quand le problme
traiter peut se dcomposer en deux ou plus sous-problmes identiques au problme initial mais avec des
valeurs de paramtres direntes. Refuser la rcursivit dans ce dernier cas oblige l'utilisateur grer
lui-mme une pile des direntes valeurs des variables, ce que le systme fait automatiquement lors de
l'utilisation de la rcursivit.
Ismail Hadjadj
22
3.8 Exercices
3.8.1 Exercice 01
Ecrire une fonction rcursive qui calcule le carr d'un entier n2 = n n :
3.8.2 Exercice 02
Ecrire une fonction rcursive qui prend en argument une chane de caractres et qui renvoie un
boolen indiquant s'il s'agit d'un palindrome ou non.
3.8.3 Exercice 03
On dnit la fonction suivante :
Fonction McCarty(n : Entier) : Entier
dbut
si n > 100 alors
M cCarthy n 10
sinon
n
nsi
3.8.4 Exercice 04
Ecrire une procdure rcursive qui reprsente le dplacement d'un cavalier sur un chiquier partir
de la position (X0 , Y0 ).
3.8.5 Exercice 05
Soit une fonction continue f dnie sur un intervalle [a; b]. On cherche trouver un zro de f , c'est-dire un rel x [a; b] tel que f (x) = 0. Si la fonction admet plusieurs zros, n'importe lequel fera
l'aaire. S'il n'y en a pas, il faudra le signaler.
Dans le cas o f (a).f (b) < 0, on est sr de la prsence d'un zro. Lorsque f (a).f (b) > 0, il faut
rechercher un sous-intervalle [; ], tel que f ().f () < 0.
L'algorithme procde par dichotomie, c'est--dire qu'il va diviser l'intervalle de recherche en deux
moitis chaque tape. Si l'un des deux nouveaux intervalles, par exemple [; ], est tel que f ().f () <
0, on sait qu'il contient un zro puisque la fonction est continue : on poursuivra alors la recherche dans
cet intervalle.
En revanche, si les deux demi intervalles sont tels que f a le mme signe aux deux extrmits, la
solution, si elle existe, sera dans l'un ou l'autre de ces deux demi intervalles. Dans ce cas, on prendra
arbitrairement l'un des deux demi intervalles pour continuer la recherche ; en cas d'chec on reprendra
le deuxime demi intervalle qui avait t provisoirement nglig.
Ismail Hadjadj
23
Ismail Hadjadj
24
3.9 TP
L'objective de ce TP et d'exprimenter la rcursivit et la complexit des algorithme
Notez bien :
Un rapport(3 page max) et code source doit tre remis avant le :................
exemple :
8
8
8
8
5
5
5
2
2
2
2
7
7
7
1
1
1
1
3
3
3
3
0
0
0
0
4
4
4
4
Ismail Hadjadj
25
3.9.4 Complexit
1. En dduire la complexit C1 du fonction RechercheS .
2. En dduire la complexit C2 du fonction RechDicho.
C1
3. Calculer lim .
C2
4. Qu'est ce que on peut dduire.
Chapitre 4
Structure de donnes
4.2.1 Exemple
Dclaration :
EntierN aturel.0 EntierN aturel
Description fonctionnelle :
succ : EntierN aturel EntierN aturel
+ : EntierN aturel + EntierN aturel EntierN aturel
: EntierN aturel EntierN aturel EntierN aturel
Description axiomatique
Ismail Hadjadj
27
4. x EntierN aturel; x + 0 = x
5. x; y EntierN aturel; x + succ(y) = succ(x + y)
6. x EntierN aturel; x 0 = 0
7. x; y EntierN aturel; x succ(y) = x + xy
Chapitre 5
Structures linaires-Les Listes
5.1 Introduction
Les structures linaires sont un des modles de donnes les plus lmentaires et utiliss dans les
programmes informatiques. Elles organisent les donnes sous forme de squence non ordonne d'lments
accessibles de faon squentielle. Tout lment d'une squence, sauf le dernier, possde un successeur.
Une squence s constitue de n lments sera dnote comme suit :
s =< e1 , e2 , e3 , . . . , en >
et la squence vide :
s =<>
Les oprations d'ajout et de suppression d'lments sont les oprations de base des structures linaires. Selon la faon dont procdent ces oprations, nous distinguerons direntes sortes de structures
linaires. Les listes autorisent des ajouts et des suppressions d'lments n'importe o dans la squence,
alors que les piles et les les ne les permettent qu'aux extrmits. On considre que les piles et les les
sont des formes particulires de liste linaire. Dans ce chapitre, nous commencerons par prsenter la
forme gnrale, puis nous tudierons les trois formes particulires de liste.
5.2 Dnition
La liste dnit une forme gnrale de squence. Une liste est une squence nie d'lments reprs
selon leur rang. S'il n'y a pas de relation d'ordre sur l'ensemble des lments de la squence, il en existe
une sur le rang. Le rang du premier lment est 1, le rang du second est 2, et ainsi de suite. L'ajout et
la suppression d'un lment peut se faire n'importe quel rang valide de la liste.
28
Ismail Hadjadj
29
5.4 Implimentation
5.4.1 Implmentation contigu(Utilisation d'un tableau)
La mthode qui vient en premier l'esprit, lorsqu'on mmorise les lments d'une liste dans un
tableau, est de conserver systmatiquement le premier lment la premire place du tableau, et de ne
faire varier qu'un indice de n de liste.
L'encodage des listes (version itrative) utilise des tableaux :
Une liste est reprsente par un tableau de taille n et un entier qui reprsente la taille de la liste ;
La liste vide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont la taille est 0 .
Ismail Hadjadj
30
tab:tableau[1..n]d'lment
lg:entier
n
L'algorithme de l'opration ime est trs simple, puisque le tableau permet un accs direct l'lment
de rang r. La complexit de cet algorithme est donc O(1).
n
nsi
L'opration de suppression d'un lment de la liste provoque un dcalage des lments qui se situent
droite du rang de suppression. Pour une liste de n lments, la complexit de cette opration est O(n),
et l'algorithme qui la dcrit est le suivant :
npour
nsi
n
l.lg l.lg 1
L'opration d'ajout d'un lment e au rang r consiste dcaler d'une position vers la droite tous les
lments partir du rang r. Le nouvel lment est insr au rang r. le procdure ajouter doit vrier si
le tableau tab dispose d'une place libre avant d'ajouter un nouvel lment. Comme pour l'opration de
suppression, la complexit de cet algorithme est O(n). L'algorithme est le suivant :
npour
nsi
n
l.tab[r] e
l.lg l.lg + 1
Il est important de remarquer que la suppression de l'lment de tte est trs coteuse puisqu'elle
provoque un dcalage de tous les lments de la liste. Ainsi pour des raisons d'ecacit, il sera prfrable
de grer le tableau de faon circulaire.
Ismail Hadjadj
31
La gestion circulaire du tableau se fait l'aide de deux indices : un indice de tte qui dsigne le premier
lment de la liste, et un indice de queue qui indique l'emplacement libre aprs le dernier lment de la
liste.
la dnition de la structure liste est donc :
type liste=enregistrement
tab:tableau[1..n]d'lment
lg:entier
tete,queue:entier
n
Les indices de tte ou de queue sont incrments ou dcrments de un chaque ajout ou suppression.
Lorsqu'on incrmente un indice en n de tableau, sa prochaine valeur est alors l'indice du premier
composant du tableau. De mme, lorsqu'on dcrmente un indice en dbut de tableau, sa prochaine
valeur est alors l'indice du dernier composant du tableau.
les procedures et fonctions sont crits comme suite :
n
nsi
sinon
l.queue l.queue 1
nsi
sinon
si r==1 alors
si l.tete = n alors
l.tete 1
sinon
l.tete l.tete + 1
nsi
sinon
pour i l.tete + r l.tete + l.lg 1 faire
l.tab[(i 2 mod n) + 1] l.tab[(i 1 mod n) + 1]
npour
si l.queue = 1 alors
l.queue n
sinon
l.queue l.queue 1
nsi
nsi
nsi
l.lg l.lg 1
n
nsi
Ismail Hadjadj
32
Ismail Hadjadj
33
sinon
l.queue l.queue + 1
nsi
sinon
si r==1 alors
si l.tete = 1 alors
l.tete n
sinon
l.tete l.tete 1
nsi
l.tab[l.tete] e
sinon
pour i l.tete + l.lg l.tete+r-2 faire
l.tab[(i 1 mod n) + 1] l.tab[(i 2 mod n) + 1]
npour
l.tab[l.tete + r 1] e
nsi
nsi
l.lg l.lg + 1
n
nsi
Info:lment
suivant:^ cellule
n
type liste=^cellule
Avec cette structure chane, les oprations longueur, ime, supprimer, et ajouter ncessitent toutes
un parcours squentiel de la liste et possdent donc une complexit gale O(n).
Ismail Hadjadj
34
ntq
n
longueur i
sinon
n
nsi
On atteint le noeud de rang r en appliquant r 1 fois l'opration Suivant partir de la tte de liste.
L'algorithme de l'opration ime s'crit :
npour
ieme l .inf o
n
nsi
sinon
n
nsi
nsi
La suppression d'un lment de rang r consiste aecter au lien qui le dsigne la valeur de son lien
suivant. Notez que si r est gal un, il faut modier la tte de liste.
Ismail Hadjadj
35
dbut
si (r<=longueur(l))& (r>=1) alors
si r=1 alors
l l .suivant
sinon
tl
q nil
pour i 1 r 1
qt
t t .suivant
faire
npour
q .suivant t .suivant
n
nsi
nsi
On remarque que pour supprimer un lment de rang r, il sut de supprimer l'lment de rang r 1
de la sous-liste qui commence par le suivant de la tte. alors on peut traduire ceci par l'algorithme :
sinon
supprimer(l .suivant, r 1)
n
nsi
nsi
L'ajout d'un lment e au rang r consiste crer un nouveau noeud c initialis la valeur e, puis
relier le noeud de rang r 1 c, et enn relier le noeud c au noeud de rang r. Si l'lment est ajout
en queue de liste, son suivant est la valeur nil. Comme prcdemment, si r = 1, il faut modier la tte
de liste.
Ismail Hadjadj
36
dbut
si (r<=longueur(l))& (r>=1) alors
new(c)
c .inf o e
si r=1 alors
c .suivant l
lc
sinon
tl
q nil
pour i 1 r 1
qt
t t .suivant
faire
npour
c .suivant t
q .suivant c
n
nsi
nsi
Comme dans la procdure supprimer la procdure ajouter peut se traduire en sa version itrative
suivante :
Procdure ajouter(var l :liste ;e :lment ;r :entier)
Var : c : cellule
dbut
si (r<=longueur(l))& (r>=1) alors
si r=1 alors
new(c)
c .inf o e
c .suivant l
lc
sinon
ajouter(l .suivant, e, r 1)
n
nsi
nsi
5.5 Exercices
5.5.1 Exercice 01 :
Pointeurs
dbut
n
a 4;
b 12;
c 23;
p_x Addr(a)
p_y Addr(b)
p_z p_y
p_x p_x +2
p_y p_y +1
cc+3
- Faites tourner cet algorithme dans un tableau (de 6 colonnes bien sur).
5.5.2 Exercice 02 :
Pointeurs
dbut
n
1. p + 2
2. (p + 2)
3. p + 1
4. Addr(A[4]) - 3
5. A + 3
6. Addr(A[7]) - p
7. p + (p - 10)
8. ( p + (p + 8) - A[7])
Ismail Hadjadj
37
Ismail Hadjadj
38
les listes
tab:tableau[1..n]d'lment
lg:entier
n
listes
listes
Rcrivez les fonctions des exercices 03 et 04 dans le cas d'une liste circulaire.
Ismail Hadjadj
39
4. Ecrire la fonction triee(L) qui retourne vrai si la liste l est trie dans l'ordre croissant et faux
sinon.
5. Ecrire la fonction f usion(l1, l2) qui prend deux listes tries dans l'ordre croissant l1 et l2 et
retourne une liste trie, dans le mme ordre, contenant les deux listes et cela en utilisant les
fonctions prcdentes.
ne
Concevoir un sous-algorithme qui ralise le chanage arrire d'une liste doublement chane dont seul
le chanage avant a t eectu.
Ismail Hadjadj
40
5.6 TP : Dictionnaire
L'objective de ce TP est de vous formalisez avec l'implmentation des listes chanes
an de les utilises pour rsoudre des problmes.
Notez bien :
5.6.1 Problme
Pour grer un dictionnaire. nous avons besoin d'eectuer les oprations suivantes :
lecture d'un ensemble de mots et de leur dnition d'un chier, et les stocks dans une structure
explique en dtail plus bas ;
trier les mots dans l'ordre alphabtique ;
insrer un nouveau mot dans un dictionnaire dans l'ordre ;
supprimer un mot du dictionnaire ;
chercher un mot dans le dictionnaire ;
acher le mots s'il est trouver.
Pour ce TP, un chier texte contenant les mots et leurs dnitions sera fourni.
Un programme exemple sera aussi donn pour montrer comment lire un chier texte ligne par ligne.
Vous devez adapter ce programme dans votre mthode de lecture.
5.6.2 Implmentation
Pour stocker le dictionnaire, on vous demande d'utiliser la structures de donnes Liste ; notre liste
contient un maillon qui contient deux chane de caractre(l'un pour le mot et l'autre pour sa dnition)
et un pointeur au mot suivant
Chapitre 6
Les Piles
6.1 Introduction
Une pile est une squence d'lments accessibles par une seule extrmit appele sommet. Toutes les
oprations dnies sur les piles s'appliquent cette extrmit. L'lment situ au sommet s'appelle le
sommet de pile.
L'ajout et la suppression d'lments en sommet de pile suivent le modle dernier entr premier sorti
(LIFO). Les piles sont des structures fondamentales, et leur emploi dans les programmes informatiques
est trs frquent. Nous avons dj vu que le mcanisme d'appel des sous-programmes suit ce modle de
pile. Les logiciels qui proposent une fonction undo servent galement d'une pile pour dfaire, en ordre
inverse, les dernires actions eectues par l'utilisateur. Les piles sont galement ncessaires pour valuer
des expressions postxes.
Ismail Hadjadj
42
p P ile ; e E
(1) est vide?(pilevide) = vrai
(2) est vide?(empiler(p; e)) = f aux
(3) depiler(empiler(p; e)) = p
(4) sommet(empiler(p; e)) = e
(5) @p; p = depiler(pilevide)
(6) @e; e = sommet(pilevide)
Notez que ce sont les axiomes (3) et (4) qui dnissent le comportement LIFO de la pile. Les
oprations dpiler et sommet sont des fonctions partielles, et les axiomes (5) et (6) prcisent leur domaine
de dnition ; ces deux oprations ne sont pas dnies sur une pile vide.
6.3 implmentation
La complexit des oprations de pile est O(1) quelle que soit l'implantation choisie, tableau ou
structure chane. L'implantation doit donc assurer un accs direct au sommet de la pile.
tab:tableau[1..n]d'lment
sommet:entier
n
Les algorithmes des oprations de pile sont trs simples. L'opration sommet consiste retourner l'lment de queue, alors que depiler et empiler consistent, respectivement, supprimer et ajouter en
queue.
Ismail Hadjadj
type cellule=enregistrement
Info:lment
suivant:^ cellule
n
type pile=^cellule
43
Ismail Hadjadj
44
6.4 Exercices
6.4.1 Exercice 02 :Algo. de base sur les Piles
Ecriver les sous-algorithmes suivants :
1. Suppression de l'ime lment ;
2. Recherche d'un lment ;
3. Concatner deux piles ;
4. Eclater une pile en deux : l'une pour les lments paire, et l'autre pour les lments impaire.
Chapitre 7
Les Files
7.1 Introduction
Les les dnissent le modle premier entr premier sorti (FIFO). Les lments sont insrs dans
la squence par une des extrmits et en sont extraits par l'autre. Ce modle correspond la le
d'attente que l'on rencontre bien souvent face un guichet dans les bureaux de poste, ou une caisse
de supermarch la veille du week-end. tout moment, seul le premier client de la le accde au guichet
ou la caisse.
Le modle de le est trs utilis en informatique. On le retrouve dans de nombreuses situations,
comme, par exemple, dans la le d'attente d'un gestionnaire d'impression d'un systme d'exploitation.
Ismail Hadjadj
46
f F ile ; e E
(1) est vide?(f ilevide) = vrai
(2) est vide?(enf iler(f ; e)) = f aux
(3) est vide?(f ) dernier(enf iler(f ; e)) = e
(4) non est vide?(f ) dernier(enf iler(f ; e)) = dernier(f )
(5) est vide?(f ) def iler(enf iler(f ; e)) = f ilevide
(6) nonest vide?(f ) def iler(enf iler(f ; e)) = enf iler(def iler(f ); e)
(7) @f ; f = def iler(f ilevide)
(8) @e; e = dernier(f ilevide)
7.3 implantation
7.3.1 Utilisation des tableaux (Implmentation Contigu)
au contraire de celle de P ile, l'implantation de l'interface F ile (version itrative) utilise des tableaux
circulaire Pour que ces oprations gardent une complexit gale O(1) :
Une F ile est reprsente par un tableau de taille n et deux entier qui reprsentent, respectivement
l'indice de premier et dernier lment de la le ;
f ilevide est donc un tableau de taille n (comme toutes les autres) dont les valeurs n'ont pas
d'importance et dont les indices de premier et dernier lment est 0 .
la dnition de la structure le est donc :
type le=enregistrement
tab:tableau[1..n]d'lment
premier, dernier:entier
n
Ismail Hadjadj
7.4 Exercices
7.4.1 Exercice 01 :
- Que peut bien vouloir dire FIFO ?
47