Vous êtes sur la page 1sur 20

FST - Universit Hassan 1er

Description du
Cours
Droulement du
Cours
Comptences
Attendues

Contenu du cours

LICENCE UNIVERSITAIRE SPECIALISEE

Algorithmique & Structures de Donnes


Cours + TD + (TP)

Connaissance des algorithmes classiques (Recherche, parcours, tris, )


Concevoir, dfinir et utiliser une structure de donnes.
Etablir et implmenter des algorithmes de traitement des structures de donnes
(listes chanes, piles, files, arbres,..)

- Introduction lAlgorithmique
- Les Objets et structures Algorithmiques
- Les fonctions et les procdures
- La rcursivit
- La complexit dun algorithme
- Les types complexes (Tableaux ou vecteurs, matrices, les chanes)
- Les algorithmes de Tri
- Les pointeurs
- Les listes simple chanage
- Les listes double chanage
- Les piles
- Les files
- Les arbres

Pr requis du Cours

Notions de logique binaire

Evaluation du
Cours

- Contrles crits et oraux


- Travaux pratiques.

Support

- polycopies

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

Chapitre 1 :

LICENCE UNIVERSITAIRE SPECIALISEE

Introduction lalgorithmique

1. Dfinitions :
Un Algorithme est une spcification d'un schma de calcul, sous forme d'une suite
finie d'oprations lmentaires obissant un enchanement dtermin .
Un Algorithme est un ensemble de rgles opratoires dont l'application permet de
rsoudre un problme donn au moyen d'un nombre fini d'oprations .
2. Proprits d'un algorithme:
Un algorithme doit tre:
PRECIS:
Il doit indiquer:
- l'ordre des tapes qui le constituent
- quel moment il faut cesser une action
- quel moment il faut en commencer une autre
- comment choisir entre diffrentes possibilits
DETERMINISTE
- Une suite d'excutions partir des mmes donnes doit produire des rsultats
identiques.
FINI DANS LE TEMPS
Cest--dire s'arrter au bout d'un temps fini.
3. Les Phases de rsolution d'un problme informatique
La rsolution d'un problme informatique se dcompose en quatre phases:
Phase d'tude
Inventorier les paramtres connus ou observables et dfinir les objectifs
raliser.
Phase de ralisation du modle
Dterminer l'enchanement des oprations. Cette phase aboutit l'laboration
d'un schma de rsolution.
Phase de spcification
Exprimer le schma de rsolution de manire plus prcise en utilisant
ventuellement un pseudo-langage. Cette phase dbouche sur des algorithmes.
Phase de traduction
Mettre en uvre les algorithmes en les traduisant en un langage de programmation.
Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

4. Le Pseudo langage.
Il permet d'crire tout algorithme de faon formelle, c'est--dire suffisamment prcise,
tout en restant comprhensible pour l'ensemble des informaticiens.
La phase de programmation se trouvera ncessairement allge, puisqu'elle se
rsumera adapter l'ensemble des oprations dcrites aux spcificits du langage
utilis.
Il est bas sur les instructions disponibles dans la plupart des langages.
Exemple:
Calculer la factorielle de N (version itrative)
VAR
N, F: Entier
DEBUT
ECRIRE (Entrer un entier N=)
LIRE (N)
F1
POUR I allant de 1 N FAIRE
F F* I
FIN POUR
ECRIRE (la Factorielle de N est :, F)
FIN
5. Les Structures lmentaires:
Entres/Sorties: LIRE, ECRIRE
Exemple:
ECRIRE (Entrer un entier N=)
LIRE (N)
Affectation:
Exemple:
XY
X x+1
Instruction conditionnelle:
SI (Expression Vraie) ALORS instructions
SINON instructions
FINSI
Exemple:
Si (Somme<= Solde) Alors Retrait
Sinon Ecrire (Solde Insuffisant)
Rptition (boucles)

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

TANT QUE (Expression Vraie) FAIRE instructions


FIN TANT QUE
POUR I Allant de 0 N
FAIRE instructions
I I+1
FIN POUR
FAIRE instructions TANT QUE (Expression Vraie)

6. LOrganigramme:
Il permet de reprsenter graphiquement un algorithme.

Test
(Alternative)

Instruction

6. METHODES D'ANALYSES
a. Types de mthodes d'analyse:
Analyse descendante
C'est une mthode de dcomposition des problmes (du gnral au particulier)
.
Analyse ascendante
Elle consiste identifier ds le dbut les actions lmentaires qu'il faudra
savoir rsoudre.
Les mthodes diriges par les donnes

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Dans un systme de gestion de base de donnes (SGBD), le programmeur


commence par dcrire les donnes de l'application (Merise).
Analyse pour la programmation Oriente objet
L'accent est mis sur la rutilisation et l'adaptation en utilisant les mcanismes
d'hritage et la programmation par interface (UML).
b. Intrt des Les mthodes danalyse:
Obtenir une analyse et une programmation de haut en bas selon une
dcomposition arborescente qui autorise le fractionnement des programmes
en modules de taille facilement lisible
Rendre possible la lecture des modules de haut niveau par des nonspcialistes.
Faciliter la maintenance et l'extensibilit en donnant la possibilit de
modifier une arborescence, sans affecter ce qui est au niveau suprieur.
Diminuer les risques d'erreurs de programmation.
Fournir aux programmeurs un mode commun de dcomposition des
problmes.

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

Chapitre 2 :

LICENCE UNIVERSITAIRE SPECIALISEE

Objets et Actions lmentaires

1.Type de Variable (ou d'objet)


Toute Variable (objet) doit tre caractrise par:
Un identificateur (Nom de la variable)
Un type qui indique l'ensemble des valeurs que peut prendre la variable et les
actions autorises sur elle.
Exemple:
X, Y:Entier; // dclaration de deux entiers.
Type

Dfinition

entier

prend ses valeurs dans un sous-ensemble des entiers relatifs. C'est un ensemble fini
dans lequel chaque lment possde un successeur et un prdcesseur.

rel

prend ses valeurs dans un sous-ensemble de rels dcimaux signs. Dans la plupart
des langages, cet ensemble n'est pas un ensemble fini. On ne peut trouver de
successeur ou de prdcesseur un rel donn.

caractre

prend ses valeurs dans l'ensemble des caractres de la table ASCII

chane de
caractre

se compose d'une suite de symboles de type caractre

boolen

type logique qui peut prendre les valeurs VRAI (1) ou FAUX (0)

2. Oprateurs sur les types simples

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Exemples:
25 DIV 3 =8 division entire
25 MOD 3 = 1 Reste de la division entire
Etat, Test: boolen
Etat 1
Test 0 (Etat OU Test) = Vraie.
3. Les Structures Fondamentales:
a-

Enchanement des actions

T1

On utilise cette structure lorsqu'une action doit succder une autre (T1, T2)
T2
b-

Structure alternative ou conditionnelle


SI

Expression Vraie

ALORS

T1
SINON

T2

FINSI

Exemple :
Ecrire un algorithme permettant dditer de 2 nombres Entiers.
Algorithme Edition du Sup(X, Y)
Var X, Y : Entier
DEBUT
Ecrire (Entrer deux Entiers)
Lire(X, Y)
Si (X>Y) Alors Ecrire(X)
Sinon Ecrire(Y)
FINSI
FIN
Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

DEBUT

Ecrire (Entrer deux Entiers)


Lire(X, Y)

X>Y
Ecrire (X)

Ecrire (Y)

FIN

c-

Structure itrative
TANTQUE Expression Vraie
FAIRE
T1
FINTANTQUE

Le test (si lexpression est vraie) est effectu avant lexcution du bloc dinstructionsT1, il
est donc possible de navoir aucune excution du bloc.
Exemple :
Effectuer une multiplication de 2 Entiers positifs en utilisant que laddition.
P=A x B = A+A+A++A
B fois

Algorithme MULTI
Var P, A, B : Entier
BEBUT
P0
ECRIRE (Entrer deux entiers positifs)
LIRE (A, B)
Tant que (B<>0) FAIRE
P P+A
B B -1
FIN Tant que
ERIRE (P)
FIN

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

DEBUT

P 0
Ecrire (Entrer deux Entiers Positifs)
Lire (A, B)

B<>0
P P+A
B B-1

Ecrire (P)

FIN

d- La rptition
REPETER T1 Tant que (Expression Vraie)
Le bloc dinstructions T1 est dabord excut puis on teste
(Si lexpression est toujours vraie).
Le bloc T1 est excut au moins une fois.

e- La Boucle :
Pour I allant de Val1 Val2
Faire T1
I I+1
FIN Pour

Algorithmique & Structures de Donnes

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Exemple : ( Algorithme MULTI)


Algorithme MULTI2
Var P, A, B,I : Entier
BEBUT
P0
I 0
ECRIRE (Entrer deux entiers positifs)
LIRE (A, B)
Pour I allant de 0 B
FAIRE
P P+A
II+1
FIN Pour
ERIRE (P)
FIN
f-L'alternative gnralise( Structure de Cas)
Suivant la valeur de l'expression, un des traitements T1, T2, T3 ou T4 est excut.

Exemple : (Menu)
Ecrire un algorithme permettant dafficher un Jour selon sa position dans la semaine.
Algorithme CAS
Var Choix : Entier
DEBUT
ECRIRE (Entrer un entier entre 1 et 7)
LIRE (Choix)
Selon (Choix)
Cas 1 : ECRIRE (Lundi)
Cas 2 : ECRIRE (Mardi)

Cas 7 : ECRIRE (DIMANCHE)


Fin Selon
Algorithmique & Structures de Donnes

1
0

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

FIN
3. Les Fonctions :
Lorsqu'un traitement peut tre rpt dans le programme et doit rendre un rsultat
unique de type simple, il est commode de le dfinir comme une fonction dont l'utilisation est
analogue celui des fonctions mathmatiques usuelles (SIN(x), TANG(x), COS(x) etc...).
Une fonction est caractris par :
o Son identificateur (Nom de La fonction)
o Sa liste darguments ou de paramtres (prcise lidentificateur et le type de
chacun deux)
o Le type du rsultat de retour.
FONCTION Id_Fonction ( parametre_formel : type du paramtre) : type_resultat
VAR
i : ENTIER
DEBUT
TRAITEMENT
RETOURNER (RESULTAT)
FIN
Remarque :
Une Fonction qui ralise un certain traitement et ne retourne pas de rsultat peut tre
nomm une Procdure.
Dans le programme principal, l'appel ce sous-programme se fera de la faon suivante:
ALGORITHME Nom_algo
VAR i, j, k : ENTIER
DEBUT
...
i Id_Fonction(j)
...
FIN
a) Exemple:
Ecrire une fonction qui calcule la somme des N premiers lments de la suite Un=3*n+1.
CL_Somme ( N :Entier) : Entier
VAR
S,U, I: ENTIER
DEBUT
S0
Pour I allant de 1 N Faire:
U 3*I + 1
S S+U
I I+1
Fin Pour
RETOURNER (S)
FIN

Algorithmique & Structures de Donnes

1
1

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Utilisation dans un programme:


ALGORITHME Algo1
VAR
A, B, D: ENTIER
DEBUT
Ecrire ('Entrer un Entier positif A')
Lire (A)
Ecrire ('Entrer un Entier positif B')
Lire (B)
D (CL_Somme (A) - CL_Somme (B))
Ecrire (D)
FIN
b) Le passage darguments (paramtres) la fonction :
la faon dont les valeurs des paramtres sont transmises la fonction est importante et
doit tre comprise pour viter des effets pervers et inattendus. La question est de savoir si les
arguments effectifs passs la fonction sont-ils modifis par lexcution de la fonction ? Si
oui, quelles valeurs auront-ils la fin de la fonction ?
Selon le Langage de programmation, On distingue 3 types de transmission :
Le passage de paramtre par valeur.
Le passage de paramtre par adresse.
Le passage de paramtre par rfrence.

Exercice 1:
Soit x un nombre reprsentant un temps exprim en secondes. crire un algorithme qui
transforme ce nombre en heures, minutes et secondes.
Exercice 2:
crire l'algorithme de rsolution d'une quation du second degr.
Exercice 3 :
crire un algorithme qui lit une suite de nombres non nuls termine par le marqueur 0 et affiche
la moyenne des nombres lus.

Algorithmique & Structures de Donnes

1
2

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

La rcursivit

Chapitre 3 :

1. Dfinition:
Une fonction F, qui s'appelle elle-mme ou qui appelle une autre fonction F' contenant un
appel de F est une fonction rcursive.
F()
{

F();

}
Niveau 1

F()
{

F();

F()
{

F();

Niveau 2

Niveau 3

2. Proprits:
Une Fonction rcursive doit possder les deux proprits suivantes:
Existence des critres darrt pour lesquels les appels cessent.
Chaque fois que la fonction s'appelle, elle doit tre plus proche des ses critres d'arrt
Remarque:
On dit qu'il y a:
* Rcursivit simple lorsqu'une fonction sappelle elle-mme en cours d'excution.
* Rcursivit croise lorsqu'une fonction A appelle une fonction B qui elle-mme appelle
la fonction A.
3. Exemple:
Calcul de Factorielle de n(entier)
n! = n(n-1)(n-2) ... 2*1 si n > 0
n! = 1

La Solution itrative Classique


FONCTION Fact( n: ENTIER): ENTIER
VAR
F: ENTIER
DEBUT
F 1
TANT QUE n > 1
F F*n
Algorithmique & Structures de Donnes

1
3

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

n n-1
FINTANTQUE
FIN
Connaissant la relation mathmatique:
N!=n*(n-1)!
On peut en dduire :

La Solution Rcursive :
FONCTION Fact(n : ENTIER):ENTIER
DEBUT
SI n=1 ALORS RETOURNER (1)
SINON RETOURNER (n*Fact(n-1))
FINSI
FIN
Lexistence dune partie auto imbrique conduit la ncessit de grer une pile
destine emmagasiner temporairement les informations relatives lexcution de la
fonction un certain niveau dimbrication.
Ainsi, le calcul de Fact(3), par exemple, s'effectue de la manire suivante:
Fact(3)=3*Fact(2)=3*2*Fact(1)=3*2*1=6

4. Transformation de boucle en fonction rcursive:


On peut transformer en une fonction rcursive, nimporte quelles instructions de type :
Pour x allant de val1 val2

faire

instructions

x val1;

Tant que x< val2

faire

x val1;

faire

Tant que x< val2

instructions

Algorithmique & Structures de Donnes

1
4

instructions

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Exemple:
a et b tant deux entiers positifs ou nuls ,
On peut Calculer la somme a+b suivant le principe :
a+b=a+ (b-1) +1
FONCTION Somme(a,b : entiers) : retourne un entier
DEBUT
si b=0 alors retourner (a)
sinon retourner (1+Somme(a,b-1))
finsi
FIN
Ainsi:
Somme(4,3)=1+ Somme(4,2)= 1+(1+ Somme(4,1))=1+(1+(1+ Somme(4,0)))= 1+(1+(1+ Somme(4,0)))=7

Cet exemple montre que le choix d'une solution rcursive n'est pas toujours pertinent,
cependant ils existent des types de problmes o la rcursivit est la bonne solution.
5. Quelques algorithmes rcursifs:
Calcul des lments de la suite Fibonacci:
- Les deux premiers lments sont gaux 0 et 1
- Chaque lment de la suite est gal a la somme de ses deux prdcesseurs.
F(0) = 0; F(1) = 1
n > 1; F(n) = F(n-1)+ F(n-2)

FONCTION Fibo(n : entiers) : retourne un entier


DEBUT
si (n=0 ou n=1) alors
retourner (1)
sinon
retourner (Fibo(n-1)+Fibo(n-2));
finsi
FIN
Exercice: Calculer les lments de cette suite de Fibonacci par une mthode itrative. Faites la
comparaison avec la solution itrative.
Recherche du Plus Grand Diviseur Commun par l'Algorithme dEuclide:
Calcul du pgcd de deux nombres par soustractions successives :
pgcd(a; b) = pgcd(a - b; b) si a > b
pgcd(a; b) = pgcd(a; b- a) si b > a
pgcd(a; b) = a si a = b
On suppose que les oprandes sont des entiers positifs.

Algorithmique & Structures de Donnes

1
5

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Algo pgcd(a,b:entier) : retourne un entier


DEBUT
si a=b alors
retourner a
sinon si a>b alors retourner pgcd(a-b,b)
sinon retourner pgcd(b-a,a)
finsi
finsi
FIN
Exemple :
pgcd(114,42)=pgcd(72,42)=pgcd(30,42)=pgcd(12,30)=pgcd(18,12)=pgcd(6,12) = pgcd(6,6)=6
Problme de Tours de Hanoi:
Il sagit de dplacer les disques dun pilier un autre en utilisant un pilier intermdiaire et en
respectant une simple rgle : un disque d'un certain diamtre ne peut pas tre plac au dessus d'un
disque de diamtre infrieur.

La rsolution dun tel problme est un algorithme rcursif :

ALGORITHME Hanoi(Nb_disque:entier, Depart:entier, Destination:entier)


Var: intermdiaire:entier
Debut
Si (Nb_disque=1)
Afficher (On dplace de , Depart,a, Destination)
Sinon
intermdiaire=6-(Depart+Destination)
Hanoi(Nb_disque -1, Depart, intermdiaire)
Hanoi(1, Depart, Destination)
Algorithmique & Structures de Donnes

1
6

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Hanoi(Nb_disque -1, intermdiaire, Destination)


Finsi
Fin
Exemple : Dplacer 3 Disques du pilier 1 vers le pilier 3.

Ce Traitement ncessite ( 2nb_Disque 1) dplacements, soit 23 1 pour cet exemple.


Rsum:
La rcursivit est lgrement moins rapide quun algorithme itratif quivalent cause du
temps ncessaire lempilage et au dpilage des donnes
La rcursivit utilise plus de ressources mmoire pour empiler les contextes
Algorithmique & Structures de Donnes

1
7

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

La rcursivit est plus lgante


Les algorithmes rcursifs sont souvent plus faciles crire

La complexit dun algorithme

Chapitre 4 :

1) Introduction:
Pour rsoudre un problme la question du choix de lalgorithme se pose souvent.
Lalgorithme choisi doit satisfaire un compromis entre deux besoins souvent contradictoires:

Simplicit comprendre et facilit de mise en uvre.

Exploitation optimale des ressources de lordinateur (mmoire) et plus prcisment


sexcuter le plus rapidement possible (vitesse dhorloge).

2) Le Temps dexcution du programme :


Il dpend des facteurs suivants:

Le type et la taille des donnes entrants


La qualit du code gnr par le compilateur.
La vitesse dexcution des instructions du P utilis.
La complexit algorithmique.

3) La Notation en O :
Pour comparer les performances dalgorithmes, on peut considrer une mesure
base sur leur temps dexcution. On utilise la notion dite de Landau qui traite de
lordre de grandeur du nombre doprations effectues par un algorithme donn. Cest la
notation O qui donne une majoration de lordre de grandeur du nombre doprations.
Pour dterminer cette majoration, il faut:

Connatre la taille n de la donne en entre du problme (ex. nombre de


donnes traiter, le degr dun polynme, taille dun fichier, le codage dun
entier, etc.)

Dterminer les oprations fondamentales qui interviennent dans ces


algorithmes et qui sont telles que les temps d'excution seront directement
proportionnels au nombre de ces oprations.

Dfinition de la O-notation
Une fonction f(n) est O(g(n)) s'il existe deux constantes positives K et n0 tel que |
f(n)| K|g(n)| pour tout nn0
En dautres termes, f(n) est O(g(n)) si partir dune certaine valeur n0 de n
tous les f(n) sont infrieurs g(n) en valeur absolue.

Algorithmique & Structures de Donnes

1
8

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Le O(g(n)) reprsente le cot de lexcution de la fonction f(n). Il permet de


classer la complexit de la fonction f parmi les classes de complexit connues. Le but de
cette classification est danticiper le comportement de la fonction en prsence de grande
quantit de donnes.
4) Exemple :
On dsire calculer Exp(x) par lapproximation suivante:
S=Exp(x) 1+x/1! + x/2! + x^3/3! + + x^n/n!
Algorithme 1:
Dbut
S1
I 1
Tant que I <=n rpte
P 1
J1
Tant que J <= I rpte
P P*x/J
J J+1
Fin tant que
SS+P
I I +1
Fin Tant que
Fin
la Boucle interne sexcutera :
1 + 2 + 3 + 4 + + n = n(n+1)/2 Fois

T(n) est en O(n).

Algorithme 2:
Dbut
S1
I 1
P1
Tant que I <=n rpte
P P*x/I
S S+P
I I +1
Fin tant que
Fin
Le corps de la fonction nest excut que n fois

T(n) est en O(n).

C/C : le deuxime Algorithme est nettement intressant que le premier !

5) Les complexits les plus couramment.


Soit E un ensemble de n donnes:
Algorithmique & Structures de Donnes

1
9

A.RADOUANE

FST - Universit Hassan 1er

LICENCE UNIVERSITAIRE SPECIALISEE

Algorithme

Complexit

Access au 1er lment de E


Recherche dichotomique (E trie)
Parcours de E
Tri rapide
Parcours de E pour chaque lment d'un
ensemble F de mme dimension
Gnration de tous les sous-ensembles de E
Gnration de toutes les permutations de E

O(1)
O(log n)
O(n)
O(n log n)
O(n)
O(2^n)
O(n!)

Le tableau suivant donne les ordres de grandeurs des diffrentes complexits en fonction
de la taille de l'ensemble de donnes:
La complexit

N=4 n=16

n=64

O(1)
O(log n)
O(n)
O(n log n)
O(n)
O(2^n)
O(n!)

1
2
4
8
16
16
24

1
1
6
8
64
256
384
2048
4096
65536
18446744073709551616 .
.
..

1
4
16
64
256
65536
..

Algorithmique & Structures de Donnes

2
0

n=256 n=4096
1
12
4096
49152
16777216
..
..

A.RADOUANE