Vous êtes sur la page 1sur 232

Algorithmique (objet)

et
Structure de donnes
Dr. Bienvenu FASSINUT-MOMBOT

Licence 2me anne


Facult des Sciences USTM

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Remerciements & Copyright


Certains transparents sont bass sur des supports trouvs sur :
Web
Et dautres trouvs dans des Livres et cours sur le sujet

Copyright 2009-2012 Bienvenu Fassinut-Mombot; all rights reserved


Ce support de cours est soumis aux droits dauteur et nest donc pas dans le
domaine public. Sa reproduction est cependant autorise condition de
respecter les conditions suivantes :

Si ce document est reproduit pour les besoins personnels du reproducteur, toute


forme de reproduction (totale ou partielle) est autorise la condition de citer
lauteur.
Si ce document est reproduit dans le but dtre distribu des tierces personnes,
il devra tre reproduit dans son intgralit sans aucune modification. Cette notice
de copyright devra donc tre prsente. De plus, il ne devra pas tre vendu.
Cependant, dans le seul cas dun enseignement gratuit, une participation aux frais
de reproduction pourra tre demande, mais elle ne pourra tre suprieure au
prix du papier et de lencre composant le document.
Toute reproduction sortant du cadre prcis ci-dessus est interdite sans accord
pralable crit de lauteur.

2 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Un problme mtaphysique ?

Comment Organiser au Mieux lInformation


dans un Programme ?
Tableaux
int tab[10];

Structures
struct Data_t {
int index_;
char* value_;
} Data_t;

Structures de
donnes

3 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Objectifs
Concevoir et raliser un algorithme correct et efficace pour un
problme donn.
Sensibilisation aux problmes algorithmiques et leur performance,
que ce soit sous la forme de complexit asymptotique ou la
performance sur des machines daujourdhui en tenant compte de la
performance du cache, et de la capacit multiprocesseur.
Introduire des types abstraits, discuter leurs implmentations
possibles

Connatre les structures de donnes squentielles simples, complexes et


arborescentes : tableaux, listes chanes, piles, files, arbres et graphes
Faire un choix argument sur l'utilisation de telle ou telle structure de
donnes ainsi que sur l'algorithme qui la manipule.

Mettre en uvre des structures de donnes et les algorithmes


associs dans des programmes crits en langage C/C++ dont laspect
orient objet sera rduit au minimum
Il ne s'agit pas d'un cours de programmation pur et dur en C/C++ !

4 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Contenu
Notions de bases de lalgorithmique

Algorithmique et Programmation
Procdure de ralisation dun programme

Structures de donnes

Structures de donnes lmentaires


Tableaux
Types composs ou structures

Preuve et complexit algorithmique

Notion de complexit algorithmique


Notion de Rcursivit

Structures de donnes linaires ou squentielles


Listes
Piles et Files

Structures de donnes non-linaires ou arborescentes


Arbres
Graphes

Programmation

Notion de base du langage C/C++


Environnement de programmation
5 / 232

Notions de bases de lalgorithmique

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Algorithmique et Programmation
Quest-ce quun algorithme ?

Vous avez dj ouvert un livre de recettes de cuisine?


Avez-vous dj dchiffr un mode demploi traduit de langlais pour faire
fonctionner un magntoscope, un rveil, digicode?
Si oui?
Sans le savoir vous avez dj excut des algorithmes.

Encore plus fort :

Avez-vous indiqu un chemin un individu gar?


Avez-vous fait chercher un objet quelquun par tlphone?
Si oui?
Vous avez dj fabriqu - et fait excuter - des algorithmes

Dfinition (selon lEncyclopdia Universalis) amliore : Un algorithme


est la spcification dun schma de calcul, sous forme dune suite [finie]
doprations lmentaires [dcrites dans un langage universel] obissant un
enchanement dtermin [reprsentant les calculs ncessaires la production
de la valeur dune certaine fonction gnrale utilisant certaines donnes].
7 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Algorithmique et Programmation
Exemple : Algorithme de rsolution dune quation
Un algorithme de rsolution de l'quation ax+b = 0
donnes : a et b entiers
Algorithme :
ecrire("Rsolution de lquation : ax+b=0")
lire(a), lire(b)
Si a est non nul Alors,
on obtient la solution : x = -b/a
Sinon Si b est non nul Alors,
l'quation est insoluble
Sinon tout rel est solution
Rsultat : la solution de lquation ax+b=0; si elle existe
8 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Algorithmique et Programmation
Quest-ce quun programme ?

Un programme est la description (traduction) dun algorithme


dans un langage de programmation obissant des rgles trs
prcises.
Un langage de programmation est un langage commun entre
machine et programmeur qui implante et ralise un algorithme.
#include <stdio.h>
Exemple: le langage C/C++

ALGORITHME:
ecrire("Rsolution de lquation: ax+b=0")
lire(a), lire(b)
Si a est non nul Alors,
on obtient la solution : x = -b/a
Sinon Si b est non nul Alors,
l'quation est insoluble
Sinon tout rel est solution

Structure de contrle
conditionnelle

#include <stdlib.h>
int main (void) {
int a,b;
puts("Rsolution de lquation:
ax+b=0\n");
printf("a?\n"); scanf("%d",&a);
printf("b?\n"); scanf("%d",&b);
if(a 0) printf("x=%f\n",-b/a);
else if (b 0) puts("lquation
est insoluble\n");
else puts("tout rel est
solution\n");
return EXIT_SUCCESS;
9 / 232
}

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Algorithmique et Programmation
Quelle est la diffrence ?
En utilisant des images :

Si un programme tait une construction, lalgorithme serait le plan


Si un programme tait une toile de peinture, lalgorithme serait
lesquisse

Algorithme :

10 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Algorithmique et Programmation
Quelle est la diffrence ?
En utilisant des images :

Si un programme tait une construction, lalgorithme serait le plan


Si un programme tait une toile de peinture, lalgorithme serait
lesquisse

Programme :

11 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Un Langage Algorithmique : Comment faire?


dcrire lalgorithme dans une forme telle que la passage au
programme ne pose plus aucun problme, pour que cette opration de
codage devienne une simple mcanique de traduction du Langage
Algorithmique vers le langage cible
Historiquement, plusieurs types de notations ont t utilises pour
reprsenter des algorithmes
Descriptions littraires
Organigrammes
Pseudo-codes

Les pseudo-codes

Dfinition : un pseudo-code est une srie de conventions qui ressemble


un langage de programmation authentique dont on aurait vacu la plupart
des problmes de syntaxe.
Remarque : un pseudo-code est susceptible de varier dune rfrence
une autre. En effet, un pseudo-code est purement conventionnel. Aucune
machine nest cense le reconnatre.
12 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Un Langage Algorithmique : Comment faire?


Squelette dun algorithme
ALGORITHME : nom_algorithme

Nom de lalgorithme

//BUT : cet algorithme effectue ...


//ENTREE : une liste de M noms
//SORTIE : une liste trie par ordre alphabtique

Spcifications
de lalgorithme

// CONSTANTES : les constantes


// linitialisation est obligatoire
// au moment de leur dclaration
CONST : pi <-- 3,1416
: REEL
nom <-- "Bonjour"
: CHAINE
// VARIABLES : les variables (au sens strict)
// linitialisation est facultative
// au moment de leur dclaration
VAR :
prix, quantite
: REEL
prenom <-- "Bruno"
: CHAINE

Dclaration des
constantes et des
variables

DEBUT
// instructions : suite de squences
// et ruptures de squences
FIN

Corps de lalgorithme
(traitements)
13 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion dinstruction
Une instruction est un ordre lmentaire - au sens
algorithmique, que peut excuter un programme.
Les donnes manipules par les instructions sont:

des variables proprement dites


des variables constantes
des valeurs littrales ("bonjour", 45, VRAI)
des expressions complexes (combinaisons de variables, constantes
et valeurs littrales avec des oprateurs)

Loprateur dAFFECTATION, une "mise en mmoire" :

Loprateur daffectation permet de donner (ou daffecter) une


valeur une variable
Sa syntaxe est la suivante :
nom_de_la_variable <-- valeur__affecter

Loprateur dGALIT

le symbole du test dgali :

=
14 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion dinstruction
Oprateurs d'entre/sortie
Clavier et cran
LIRE(x)

: donnes du problme (usercomputer)


permet de lire au clavier la valeur de la variable x
ECRIRE(x) : affichage l'cran (computeruser)
permet dafficher la valeur de la variable x

Fichiers texte

Le type FICHIER permet de lire et dcrire dans un fichier

VAR : file : FICHIER


File <-- ouvrir("nom.txt", "lect")

"lect"
: lecture seule
"ecr"
: criture seule
"lectEcr" : lecture-criture

lireF(x,file) : met dans x la premire valeur lue dans le fichier


ecrireF(x,file) : permet dcrire la valeur de x dans le fichier
15 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de squence
DEBUT

Une squence est une suite d'oprations


lmentaires (ou ACTIONS) dont l'excution est
squentielle.

ACTION 1 :

CORRESPONDANCE :

LIRE(valeur)

Organigramme <--> Algorithmique

ACTION 2 :
produit <-- valeur *
valeur

ACTION 3 :
ECRIRE(produit)

FIN

ALGORITHME: carre
//BUT :
calcul le carr dun nombre
//ENTREE : entier saisi par lutilisateur
//SORTIE : valeur de lentier au carr
VAR :
valeur, produit : ENTIER
DEBUT
LIRE( valeur )
//ACTION 1
produit <-- valeur * valeur //ACTION 2
ECRIRE( produit )
//ACTION 3
FIN
16 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de rupture de squence


DEBUT
ACTION 1 :
LIRE(valeur)
RUPTURE
de
SEQUENCE

L'excution des oprations lmentaires (ou


ACTIONS 2a et 2b) n'est pas systmatique.
Elle dpend d'une "condition".
La lecture dune rupture de squence s'effectue
en fonction des lments transmis " titre de
condition".

ACTION 2a :

ACTION 2b :

ECRIRE("choix a")

ECRIRE("choix b")

FIN
17 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure algorithmique
La structure algorithmique concerne la concatnation et
les imbrications de squences et ruptures de squences.
Ruptures de squences ou structures de contrle :
Rupture conditionnelle (et non rptitive) dinstructions
SIALORS...FINSI

SI...ALORSSINON...FINSI
CAS...PARMI...FINCASPARMI
CASPARMIPARDEFAUT...FINCASPARMI

Rupture rptitive (itrations et boucles) dinstructions :


TANTQUEFAIREFINTANTQUE
REPETERJUSQU'A...
REPETERTANTQUE...
POURFAIRE...FINPOUR
18 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture conditionnelle (et non rptitive)


SIALORSFINSI
ALGORITHME: valeur_absolue
//BUT :calcule la val.abs. dun entier saisi par lutil.
//ENTREE :un entier relatif saisi par lutilisateur
//SORTIE :la valeur absolue de lentier saisi
VAR:
x
:ENTIER
DEBUT
LIRE( x )
//affectation dune valeur par lutil.
SI( x < 0 ) //si cette valeur est ngative
ALORS
//alors cette condition est vraie
x <-- -x //et la variable se trouve raffecte
FINSI
ECRIRE( "La val.abs. du nombre saisi vaut : ", x )
FIN
19 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture conditionnelle (et non rptitive)


SI..ALORS..SINON..FINSI
ALGORITHME: max_deux_nombres
//BUT : cherche la valeur max. parmi 2 valeurs saisies
//ENTREE : deux rels saisis par lutilisateur
//SORTIE : le maximum des deux valeurs
VAR:
a, b, max
:REEL
DEBUT
LIRE( a, b)
SI( a >= b ) ALORS
max <-- a //instructions 1
SINON
max <-- b //instructions 2
FINSI
ECRIRE ("Le Max entre", a, " et ", b," est:", max )
FIN
20 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture conditionnelle (et non rptitive)


CAS..PARMI..FINCASPARMI
ALGORITHME: nom_mois
//BUT : affiche le nom du mois en fonction du numro
//ENTREE : un entier saisi par lutilisateur
//SORTIE : le nom du mois correspondant au chiffre saisi
VAR:
mois
:ENTIER
DEBUT
LIRE( mois )
CAS( mois )PARMI:
CAS1:
1
ECRIRE( " Janvier" )
CAS2:
2
ECRIRE( " Fvrier" )
...
CAS12: 12
ECRIRE( " Dcembre" )
FINCASPARMI
FIN
21 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture conditionnelle (et non rptitive)


CAS..PARMI..PARDEFAUT..FINCASPARMI
ALGORITHME: nom_mois2
//BUT : affiche le nom du mois en fonction du numro
//ENTREE : un entier saisi par lutilisateur
//SORTIE : le nom du mois correspondant au chiffre saisi
VAR:
mois
:ENTIER
DEBUT
LIRE( mois )
CAS( mois )PARMI:
CAS1:
1
ECRIRE( " Janvier " )
CAS2:
2
ECRIRE( " Fvrier " )
...
CAS12: 12
ECRIRE( " Dcembre " )
PARDEFAUT:
ECRIRE( " Erreur de saisie ! " )
FINCASPARMI
FIN
22 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture rptitive (et conditionnelle)


TANTQUE..FAIRE..FINTANTQUE
ALGORITHME: compteur_rebours
//BUT : affiche la valeur d'un compteur rebours
//ENTREE : un entier saisi par lutilisateur
//SORTIE : la valeur du compteur rebours
VAR:
nombre
:ENTIER
DEBUT
LIRE( nombre )
TANTQUE( nombre > 0 )
FAIRE
ECRIRE( "Valeur du compteur rebours: ", nombre )
nombre <-- nombre - 1
FINTANTQUE
FIN
23 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture rptitive (et conditionnelle)


REPETER..JUSQU'A..
ALGORITHME: compteur_rebours2
//BUT : affiche la valeur d'un compteur rebours
//ENTREE : un entier saisi par lutilisateur
//SORTIE : la valeur du compteur rebours
VAR:
nombre
:ENTIER
DEBUT
LIRE( nombre )
REPETER
ECRIRE( "Valeur du compteur rebours: ", nombre )
nombre <-- nombre - 1
JUSQU'A( nombre < 0 )
FIN

24 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture rptitive (et conditionnelle)


REPETER..TANTQUE..
ALGORITHME: compteur_rebours3
//BUT : affiche la valeur d'un compteur rebours
//ENTREE : un entier saisi par lutilisateur
//SORTIE : la valeur du compteur rebours
VAR:
nombre
:ENTIER
DEBUT
LIRE( nombre )
REPETER
ECRIRE( "Valeur du compteur rebours: ", nombre )
nombre <-- nombre - 1
TANTQUE( nombre > 0 )
FIN

25 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rupture rptitive (et inconditionnelle)


POUR..FAIRE..FINPOUR
ALGORITHME: compteur_rebours4
//BUT : affiche la valeur d'un compteur rebours
//ENTREE : un entier saisi par lutilisateur
//SORTIE : la valeur du compteur rebours
VAR:
nombre
:ENTIER
DEBUT
LIRE( nombre )
POUR( compteur <-- nombre :ENTIER a 0 au pas de -1 )
FAIRE
ECRIRE("Valeur du compteur rebours: ", compteur)
FINPOUR
FIN
26 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de variable
La notion de variable est trs importante en
programmation
Dans un programme informatique, on a, en permanence,
besoin de stocker
provisoirement des valeurs :
donnes issues du disque dur ;
donnes fournies par l'utilisateur (frappes au clavier) ;
rsultats (intermdiaires ou dfinitifs) obtenus par le
programme.

27 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de variable
Du point de vue smantique, une variable est une entit
qui possde trois caractristiques :

Une variable possde un nom, on parle didentifiant


Une variable possde une valeur qui volue au cours de lexcution
du programme
Une variable possde un type qui caractrise lensemble des
valeurs quelle peut prendre

Du point de vue pratique, une variable est une manire


mnmotechnique pour dsigner un emplacement mmoire
repre par une adresse (numro de la case ou cellule
mmoire que la variable occupe au sein de lordinateur)
Il nest pas possible de choisir ladresse dune variable, cette
adresse est attribue automatiquement par lordinateur
Toute variable possde une et une seule adresse

28 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de variable
Le type dune variable indique au compilateur la manire de stocker la
variable en mmoire
En employant une image
Une variable est un rcipient, que l'ordinateur va reprer par une
tiquette (un nom). Pour avoir accs au contenu du rcipient, il suffit de
le dsigner par son tiquette.

Il existe plusieurs type de rcipients!

De la mme manire, il existe plusieurs type de variable


29 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de variable
Lorsqu'on dclare une variable, il ne suffit pas de crer
un rcipient (rserver un emplacement mmoire).
Il faut encore prciser ce que l'on voudra mettre dedans, car de
cela dpendent la taille et la nature du rcipient.

Il est important de connatre comment sont stockes les


variables
car C/C++ propose de nombreuses manipulations au niveau bit.

La mmoire est une suite de bit structure en octets (8


bits) puis en mots (4 octets, 32 bits).
Exemple :
Ladresse 1084 doit se lire comme le 1084eme octet de la mmoire

30 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de variable globale/locale


Lors de la dclaration des donnes qui seront utilises par le
programme, il y a rservation de

l'espace mmoire pour les variables ddies au fonctionnement du


programme principal ou chacun des sous programmes.
Mais il est possible, aussi, d'effectuer une rservation, non ddie, de
variables dites : GLOBALES.

Les variables globales ont la possibilit d'tre exploiter par


l'ensemble du programme et les modules appels, (c'est--dire en
lecture et en criture),
on parle de porte des donnes et d'accessibilit.

Chaque programme et sous-programme a son propre espace de


variables, inaccessibles par les autres, ces variables sont dites :
LOCALES.

L'accs aux valeurs enregistres peut se faire via adressage (utilisation


d'un pointeur), ce qui permet le limiter ou non ces accs tous les
constituants du programme.
31 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Pointeur
Le pointeur est une variable de type "adresse dune autre
variable":
La dclaration s'effectue sous la forme :

VAR: *Pnom_de_variable : TYPE_POINT


//le contenu de Pnom_de_variable est de type TYPE_POINT
Exemple : VAR: *Pnombre_entier : POINTEUR_SUR_ENTIER

Lutilisation s'effectue l'aide de l'oprateur &, et permet dobtenir


ladresse de la variable pointe :
&nom_de_variable //adresse de nom_de_variable
Exemple : Pnombre_entier <-- &nombre_entier

L'accs la (valeur de la) variable se fait grce l'oprateur * :


*Pnom_de_variable
Exemple : nombre_entier <-- *Pnombre_entier
32 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Pointeur
La valeur de la
variable
nombre_entier (5720)
se trouve ladresse
04DFF5C2
Pnombre_entier
contient ladresse
(04DFF5C2) de la
variable
nombre_entier, et se
trouve ladresse
04DFF5C8
La valeur de
nombre_entier (5720)
est accessible l'aide
de *Pnombre_entier

Nom

Adresse

Contenu

04DFF5C0
nombre_entier

04DFF5C2
5720
04DFF5C4
04DFF5C6

Pnombre_entier

04DFF5C8
04DFF5CA
04DFF5C2
04DFF5CC
04DFF5CE
04DFF5D0
33 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Pointeur
Allocation dynamique de la mmoire ou rservation
mmoire

La commande se nomme RESERVER()et permet dallouer un espace


mmoire pour stocker le contenu qui sera point par le pointeur
qui est fourni la commande selon la syntaxe suivante :
RESERVER(pointeur)
Exemple : VAR: *Pnombre_entier : POINTEUR_SUR_ENTIER
RESERVER(Pnombre_entier)

Lorsque la place en mmoire nest plus utile, il suffit de la


librer en utilisant la commande suivante :
LIBERER(pointeur)

34 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure des programmes


Organisation (ou dcoupage) en modules

les traitements doivent tre scinds en plusieurs modules (sousprogrammes) et la structure algorithmique principale doit tre regroup
dans le programme principal en intgrant les appels ventuels aux sousprogrammes.
Un module peut appel un autre module, si ce module appelle le module
appelant, cette spcificit se nomme : la rcursivit croise.
Un module peut s'appeler lui-mme (la rcursivit).

Un (et un seul) programme principal par programme modulaire

A l'intrieur de ce programme principal, se trouvent des appels aux


modules appartenant au programme.
Le programme Principal, peut faire appel des procdures ou fonctions
diverses (se sont les deux sortes de modules ou sous-programmes
existant en algorithmique), ce qui a pour effet de structurer le
programme, de rduire sa place en mmoire ainsi que son criture, et
surtout, de faciliter sa maintenance.
35 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure du programme principal


// zone de dclaration des constantes et variables
// globales accessibles par le programme principal ainsi
// que ses modules (ou sous-programmes)
CONSTGLOBALE: // ou CONST: puisque plac en tte
... // donnes constantes globales
VARGLOBALE:
// ou VAR:
... // donnes variables globales du programme
// nom du programme principal
PROGRAMME: nom_du_programme
// dclaration des constantes et variables locales
CONST:
... // donnes constantes locales du programme
VAR:
... // donnes variables locales du programme
DEBUT
... // corps du programme principal
FIN
// fin du programme principal
36 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Procdure et Fonction


Une procdure ou une fonction est un sous-programme qui a pour
objectif de raliser une tche particulire (et une seule) qui lui est
propre.
Points communs entre une procdure et une fonction :

Les sous-programmes disposent d'une zone propre de rservation et de


stockage des donnes, en fonction du nombre et du type de celles-ci.
Afin de faire communiquer le programme et le sous-programme, il est
possible (mais facultatif) de transmettre un ou plusieurs paramtres au
module appel (c'est dire, la valeur de certaines variables utiles au
module).

Diffrences fondamentales entre une procdure et une fonction :

Une procdure ne peut pas transmettre, en retour (en fin d'appel) de


valeur issue de l'objectif du module, au programme (ou sous-programme)
appelant.
Une fonction peut transmettre (facultativement), au terme de son
appel, une et une seule donne au programme appelant.
37 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Programme principal et Procdure


PROCEDURE: nom_procedure() // nom de la procdure
// zone de dclaration des constantes de la procdure
CONST: // suite de dclaration de donnes constantes
// zone de dclaration des variables de la procdure
VAR:
// suite de dclaration de donnes variables
DEBUTPROCEDURE
// dbut effectif de la procdure
...
// zone de la procdure
FINPROCEDURE
// fin de la procdure
//------------------------------------------------------------// nom du programme
PROGRAMME: nom_du_programme
// zone de dclaration des constantes du programme principal
CONST: // suite de dclaration de donnes constantes
// zone de dclaration des variables du programme principal
VAR:
// suite de dclaration de donnes variables
DEBUT
// dbut effectif du programme principal
...
// zone du programme principal
nom_procedure() // appel de la procedure
FIN
// fin du programme principal
38 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Programme principal et Fonction


FONCTION: nom_fonction():ENTIER // nom et type de la fonction
// zone de dclaration des constantes de la fonction
CONST: // suite de dclaration de donnes constantes
// zone de dclaration des variables de la fonction
VAR: resultat :ENTIER
DEBUTFONCTION
// dbut effectif de la fonction
...
// zone de la fonction
RETOURNER: resultat //un seul pour une meilleure lisibilit
FINFONCTION
// fin de la fonction
//------------------------------------------------------------// nom du programme
PROGRAMME: nom_du_programme
// zone de dclaration des constantes du programme principal
CONST: // suite de dclaration de donnes constantes
// zone de dclaration des variables du programme principal
VAR: var_entiere :ENTIER
DEBUT
// dbut effectif du programme principal
...
// zone du programme principal
var_entiere <-- nom_fonction() // appel de la fonction
FIN
// fin du programme principal
39 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de paramtre formel / rel


On appelle "paramtre(s)", les noms des variables placs dans la
dfinition d'une procdure ou dune fonction, lors de la dclaration ou
dans l'criture de son appel.
Ce sont des variables locales la procdure ou la fonction, et ce
titre, ils sont dclars dans l'en-tte du sous programme, entre
parenthses : ce sont les paramtres formels.
formels
Ils nont pas de valeur particulire dans la dfinition du sous-programme

Les paramtres, inscrits lors de l'appel au module, servent


communiquer avec le sous-programme prdfini : ce sont les
paramtres rels (ou effectifs) appels aussi arguments.
arguments

Lorsque les paramtres sont de type "donne" (et non un adressage


l'aide d'un pointeur sur la donne), ils contiennent effectivement les
valeurs avec lesquelles sera effectu le traitement du sous-programme.
Lors de l'appel, leur valeur est recopie dans les paramtres formels
correspondants l'emplacement prdfini (l'ordre est conserv).
40 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Variables Locales et Paramtres : passage par valeur


Mmoire
PROCEDURE: incremente(valeur :ENTIER)
DEBUTPROCEDURE
valeur<-- valeur + 1
6
ECRIRE( valeur )
FINPROCEDURE
PROGRAMME: affichage
VAR:
chiffre
:ENTIER
DEBUT
chiffre<-- 5
ECRIRE( chiffre )
incremente( chiffre )
ECRIRE( chiffre )
FIN

chiffre

C
O
P
I
E

valeur

6
5

Espace
mmoire pour
les variables du
programme
principal

Espace
mmoire pour
les variables de
la procdure

5
41 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Variables Locales et Paramtres : passage par pointeur


Mmoire
PROCEDURE: incremente(Pvaleur
:POINTEUR_SUR_ENTIER)
DEBUTPROCEDURE
*Pvaleur<-- *Pvaleur + 1
ECRIRE( *Pvaleur )
FINPROCEDURE

6
chiffre

6
5

5
PROGRAMME: affichage
VAR:
chiffre
:ENTIER
DEBUT
chiffre<-- 5
ECRIRE( chiffre )
incremente( &chiffre )
ECRIRE( chiffre )
FIN

&chiffre

Pvaleur &chiffre

Espace
mmoire pour
les variables du
programme
principal

Espace
mmoire pour
les variables de
la procdure

6
42 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Pause-rflexion sur cette partie


Avez-vous des questions ?

43 / 232

Structures de donnes

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes : Introduction


Structures de donnes ?

Dfinition : une structure de donne est un moyen de coder et


de structurer les donnes manipules.
Exemple :

Type suite = tableau [1..N] dentiers

Donnes

etudiant = structure
nom, prnom : chane de caractres
ge : entier positif

Algorithme

sexe : caractre
...
fin structure

Structures
de
donnes

Rsultats

Programme = Algorithme + Structures de donnes


45 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprateurs et Symboles
Type

ENTIER
(4 octets
ou
32 bits)

Oprations
possibles

Oprateurs associs, symboles,


mot cls correspondants

Addition

Soustraction

Multiplication

Division

DIV (Pour la division entire)

Exposant

Modulo

MOD (Pour le reste dune division)

Comparaisons

< <= > >= = <>


46 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprateurs et Symboles
Type

Oprations
possibles

Oprateurs associs, symboles,


mot cls correspondants

Addition

REEL

Soustraction

(8 octets

Multiplication

ou

Division

64 bits)

Exposant

Comparaisons

< <= > >= = <>

47 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprateurs et Symboles
Type

Oprations
possibles

Oprateurs associs, symboles,


mot cls correspondants

CARACTERE

Comparaison

< <= > >= = <>

Extraction

CARACTERE <-- EXTRACTION


(chaine, position)

(1 octet
ou
8 bits)

48 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprateurs et Symboles
Type

CHAINE

Oprations
possibles

Oprateurs associs, symboles,


mot cls correspondants

Concatnation

CHAINE <-- CONCATENER


(ch1, ch2)

Longueur

ENTIER <-- LONGUEUR


(chaine)

Extraction

CHAINE <-- EXTRACTION


(chaine, dbut, longueur)

49 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprateurs et Symboles
Type

Oprations
possibles

Oprateurs associs, symboles,


mot cls correspondants

BOOLEEN

Comparaison

= <>

(1 octet

Ngation

NON (il se note aussi )

ou

Conjonction

ET

8 bits)

Disjonction

OU

50 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprations lmentaires : Dclaration
Nom attribu la
donne dclare.

nom de la donne

nom_de_la_donnee :ENTIER
type lmentaire
Le type est toujours
prcd du signe :
51 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprations lmentaires : Initialisation (avec
dclaration)
Nom attribu la
donne initialise.

nom de la donne

Valeur initiale affecte


la donne

valeur d'initialisation

nom_de_la_donnee <-- valeur :ENTIER


affectation
Symbole
d'affectation

type lmentaire
Le type est toujours
prcd du signe :
52 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprations lmentaires : Affectation (hors
dclaration)
Nom attribu la
donne initialise.

nom de la donne

Valeur initiale affecte


la donne

valeur d'initialisation

nom_de_la_donnee <-- valeur


affectation
Symbole
d'affectation
53 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprations lmentaires : Utilisation
Nom d'une autre
donne affecte
l'aide d'une donne.

nom d'une donne

Nom d'une donne

nom d'une donne

autre_donnee <-- nom_de_la_donnee


affectation
Symbole
d'affectation
54 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure de donnes lmentaires


Oprations lmentaires : R-affectation
Nom de la donne
r-affecte.

Nom de la donne r-affecte.

nom de la donne

nom de la mme donne

nom_de_la_donnee <-- nom_de_la_donnee + 1


affectation

opration

Symbole
d'affectation

Opration lors
de l'affectation
55 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : spcificits et contraintes


Les tableaux permettent de manipuler de nombreuses
variables reprsentant des valeurs distinctes de mme
nature (type), dune manire trs compacte
Lors de la dclaration, un type de donne lmentaire
est affect au tableau.
L'accs aux donnes d'un tableau se fait par le biais
d'un indice dans une dimension propre.
La principale caractristique des tableaux est d'avoir la
possibilit de reprsenter un domaine une, deux, voire
trois dimensions.
En algorithmique, il est mme possible de dpasser cette 3me
dimension, toujours dans un but de simplification de l'criture
algorithmique.
En revanche, dans certains langages, cette limite est parfois
situe deux ou trois.

56 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Reprsentation graphique


Une dimension

Tableaux
Deux dimensions

Trois dimensions

57 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Dclaration

Nom attribu au tableau


dclar.

L'indice maximum correspond l'indice du


dernier lment du tableau (la dernire case
mmoire). L'indice minimum et l'indice maximum
sont toujours spars par 2 points " . . "

indice maximum

nom du tableau

nom_du_tableau [ indice_min . . indice_max ] :TYPE


indice minimum
L'indice minimum correspond
l'indice du premier lment
du tableau (la premire case
mmoire).

type lmentaire
Le type lmentaire (ENTIER,
REEL, CARACTERE, CHAINE,
BOOLEEN), est toujours prcd
du signe :
58 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Initialisation globale (avec dclaration)

Nom attribu au tableau


dclar.

Les indices minimum et maximum


correspondent aux indices du premier et du
dernier (respectivement) lment du tableau.

nom du tableau

indice maximum

nom_du_tableau [ indice_min . . indice_max ]


{ lment1 , lment2 , lment3 , } :TYPE
valeurs affectes initialement
Les valeurs affectes initialement sont
notes entre accolades et spares
par une virgule. Le signe d'affectation
est inscrit avant la premire accolade.

type lmentaire
Le type lmentaire (ENTIER,
REEL, CARACTERE, CHAINE,
BOOLEEN), est not aprs les
valeurs affectes.

59 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Affectation unitaire (hors dclaration)

Nom attribu au tableau


dclar.

Valeur affecte dans le tableau l'indice


courant. L'affectation est indique grce au
symbole situ la gauche de la valeur.

valeur

nom du tableau

nom_du_tableau [ indice_courant ] valeur


indice courant
L'indice courant est une valeur entire permettant d'adresser la case mmoire pour
y insrer une valeur. L'indice courant peut tre sous la forme d'un chiffre compris
entre les indices min et max, une variable entire, une opration arithmtique
comprenant une ou plusieurs variables et/ou des valeurs entires.
60 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Utilisation unitaire
Nom d'une donne de mme
type que la valeur affecte
issue du tableau.

nom de la donne

L'indice courant est une valeur entire permettant


d'adresser la case mmoire pour y lire la valeur
affecte. L'indice courant peut tre sous la forme
d'un chiffre compris entre les indices min et max,
une variable entire, une opration arithmtique
comprenant une ou plusieurs variables et/ou des
valeurs entires. indice courant

autre_donnee nom_du_tableau [ indice_courant ]


nom du tableau
Nom du tableau dont est extraite la valeur affecte
l'autre donne, grce l'adressage de la case
mmoire obtenue l'aide de l'indice courant.
61 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


R-affectation unitaire

Nom du tableau dont la valeur adresse


l'aide de l'indice courant est r-affecte.

nom du tableau

nom_du_tableau [ indice_courant ]
nom_du_tableau [ indice_courant ] + 1
nom du tableau
Nom du tableau
contenant la valeur
d'affectation.

indice courant
L'indice courant du tableau dont la
valeur est extraite peut tre diffrent
de celui de la r-affectation.

opration
Opration lors
de l'affectation
62 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Dclaration

Nom attribu au tableau


dclar.

nom du tableau

Les indices minimum et maximum


correspondent ici la premire dimension du
tableau. L'indice minimum et l'indice maximum
sont toujours spars par 2 points " . . "

indices premire dimension

nom_du_tableau [ indice_min1d . . indice_max1d ]


[ indice_min2d . . indice_max2d ] :TYPE
indices seconde dimension
Les indices minimum et maximum
correspondent ici la seconde
dimension du tableau.

type lmentaire
Le type lmentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), est
toujours prcd du signe :
63 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Initialisation globale (avec dclaration)

Nom attribu au tableau


dclar.

nom du tableau

Les indices minimum et maximum


correspondent ici la premire dimension du
tableau pour les premiers crochets, la
seconde pour les suivants.

indices minimum et maximum

nom_du_tableau [ indice_min1d . . indice_max1d ]


[ indice_min2d . . indice_max2d ]
{ {lment1 , lment2 , },{},} :TYPE
ouverture premire dimension
La premire accolade signifie l'ouverture de la
premire dimension. Il y a autant d'ouverture
d'accolades pour la seconde dimension que
indice_max1d.

seconde dimension
Les lments sont ordonns dans la
seconde dimension, entre
accolades.
64 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Affectation unitaire (hors dclaration)

Nom attribu au tableau


dclar.

nom du tableau

L'indice courant est ici l'indice de la premire


dimension.

indice courant premire dimension

nom_du_tableau [ indice_courant1d ]
[ indice_courant2d ] valeur
indice courant seconde dimension
L'indice courant est ici l'indice de la seconde dimension.

65 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Utilisation unitaire

Nom d'une donne de mme type que


la valeur affecte issue du tableau.

nom d'une donne

L'indice courant est ici l'indice de


la premire dimension.

indice courant premire dimension

autre_donnee nom_du_tableau [ indice_courant1d ]


[ indice_courant2d ]
indice courant seconde dimension
L'indice courant est ici l'indice de la seconde dimension.

66 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Oprations lmentaires


Dclaration

Nom attribu au tableau


dclar.

nom du tableau

indices

nom_du_tableau [ indice_min1d . . indice_max1d ]


[ indice_min2d . . indice_max2d ]
[ indice_min3d . . indice_max3d ] :TYPE
indices troisime dimension
Les indices minimum et maximum
correspondent ici la troisime
dimension du tableau.

type lmentaire
Le type lmentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), est
toujours prcd du signe :
67 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Exemple 1


Tableau une dimension
jours_semaine [ 1..7 ] :CHAINE
jours_semaine [ 1..7 ] { "lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi", "dimanche" } :CHAINE
jours_semaine [ 6 ] "samedi"
nom_jour jours_semaine [ 2 ]
Indice
1

Indice

Indice

Indice

Indice

Indice

Indice

lundi

mardi

mercredi

jeudi

vendredi

samedi

dimanche
68 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Exemple 2


Tableau deux dimension
calendrier [ 1..12 ] [ 1..31 ] :CHAINE

seconde dimension

premire dimension
1

10

11

12

1
2
3
4

30
31
69 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les tableaux : Exemple 3


calendrier [ 1..12 ] [ 1..31 ] [ 1..5 ] :CHAINE

seconde dimension

premire dimension

tro
isi
me

dim
en
sio
n

70 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les types composs ou structures


Cration de types par le programmeur

linstar des tableaux permettant de regrouper des variables de


mme type, il existe la possibilit de regrouper des variables de
types quelconques au sein de types crs par le programmeur en
fonction de ses besoins.
Exemple: lobjet personne du monde rel possde normement
de proprits
On utilise la syntaxe suivante : par convention de nommage, un
nom de type compos doit systmatiquement commencer par t_
STRUCTURE t_nom_du_type
nom_champ_1 : type_champ_1

nom_champ_n : type_champ_n

Utilisation et Accs aux champs


VAR nom_de variable : t_nom_du_type //dfinition de VAR
nom_de_variable.nom_du_champ //accs un champ
71 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les types composs ou structures


Cration de types par le programmeur
Oprateur daffectation
Cest le seul oprateur que lordinateur peut appliquer aux
structures car il sagit de recopier les champs dune variable
de type compos dans les mmes champs dune autre variable
du mme type.

Structures contenant des tableaux


Lorsquun champ est de type tableau, il est ncessaire de
stocker sa taille utile dans un champ de la structure

Structures dfinies laide de structures


Un champ dune structure peut tre dun type compos, cest-dire une structure dfinie au pralable
72 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les types composs ou structures


Pointeurs vers les structures

Soit t_com un type compos (une structure). Dfinir un pointeur ptr


vers un contenu de type t_com scrit comme suite :
VAR *ptr : t_com

Son initialisation est la suivante


RESERVER(ptr)

Il est alors possible daccder ses champs laide lune des deux
notations quivalentes ci-dessous
(*ptr).nom_du_champ <-- une valeur
ptr-->nom_du_champ <-- une valeur

Types pointeurs et raccourcis de notation

Il est parfois pratique de disposer dun nom de type raccourci pour


dsigner un pointeur vers une structure. La syntaxe est la suivante :
TYPE *type_pointeur : type
//cela signifie que le type type_pointeur dsigne un
pointeur vers un type
73 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Pause-rflexion sur cette partie


Avez-vous des questions ?

74 / 232

Travaux Dirigs (TD)

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle
Exercice 1 : SI..ALORS..FINSI

Enonc : Un lve entre la valeur d'une moyenne pour un examen, le


programme indique la russite s'il obtient une note suprieure ou gale
12.

Exercice 2 : SI..ALORS..SINON..FINSI

Enonc : En fonction du prix d'un produit HT et de la catgorie de


celui-ci (luxe: TVA=19,6 % ; autre: TVA=5,5 %), le programme calcule sa
valeur TTC.

Exercice 3 : CAS..PARMI..PARDEFAUT..FINCASPARMI

Enonc : En fonction du numro du mois choisi par l'utilisateur, le


programme affiche le nombre de jours correspondant (les annes
bissextiles ne sont pas prises en compte).

Exercice 4 : TANTQUE..FAIRE..; REPETER..TANTQUE/JUSQUA..;


Enonc : Le programme affiche systmatiquement chaque mot que
l'utilisateur frappe jusqu' ce que le mot "fin" soit saisi. Le programme
s'arrte ce moment-l, le mot fin tant le dernier apparatre sur
lcran.

76 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle
Exercice 1 rsolu : SI..ALORS..FINSI

Enonc : Un lve entre la valeur d'une moyenne pour un examen, le programme


indique la russite s'il obtient une note suprieure ou gale 12.
ALGORITHME: examen
//BUT :dtermine l'obtention d'un examen
//ENTREE :un entier saisi par lutilisateur
//SORTIE :la valeur boolenne indiquant le rsultat
VAR:
moyenne
:REEL
examen <-- FAUX
:BOOLEEN
DEBUT
LIRE( moyenne )//affectation dune valeur par lutil.
SI( moyenne >= 12 ) //si moyenne est sup. ou g. 12
ALORS
//alors cette condition est vraie
examen <-- VRAI //et examen se trouve raffecte
FINSI
ECRIRE( "Cet lve a russi son examen : ", examen )
FIN
77 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle
Exercice 2 rsolu : SI..ALORS..SINON..FINSI

Enonc : En fonction du prix d'un produit HT et de la catgorie de celui-ci (luxe:


TVA=19,6 % ; autre: TVA=5,5 %), le programme calcule sa valeur TTC.
ALGORITHME: prix_ttc
CONST:
tva_luxe <-- 1,196
:REEL
tva_reduite <-- 1,055
:REEL
VAR:
prix_ht, prix_ttc
:REEL
produit_luxe
:BOOLEEN
DEBUT
LIRE( prix_ht, produit_luxe)
SI( produit_luxe )
ALORS
prix_ttc <-- prix_ht * tva_luxe
SINON
prix_ttc <-- prix_ht * tva_reduite
FINSI
ECRIRE ("Le prix TTC du produit est : ", prix_ttc)
FIN
78 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle
Exercice 3 rsolu : CAS..PARMI..PARDEFAUT..FINCASPARMI

Enonc : En fonction du numro du mois choisi par l'utilisateur, le programme


affiche le nombre de jours correspondant (les annes bissextiles ne sont pas
prises en compte).

ALGORITHME: nombre_jours
VAR:
mois
:CHAINE
nbre_jours
:ENTIER
DEBUT
LIRE( mois )
CAS( mois )PARMI:
CAS1: "Fvrier"
nbre_jours <-CAS2: "Avril"
nbre_jours <-CAS3: "Juin"
nbre_jours <-CAS4: "Septembre"
nbre_jours <-CAS5: "Novembre"
nbre_jours <-PARDEFAUT:
nbre_jours <-FINCASPARMI
ECRIRE ("Il y a ", nbre_jours," jours en
FIN

28
30
30
30
30
31
", mois)
79 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle
Exercice 4 rsolu : TANTQUE..FAIRE..; REPETER..TANTQUE/JUSQUA..;
Enonc : Le programme affiche systmatiquement chaque mot que l'utilisateur
frappe jusqu' ce que le mot "fin" soit saisi. Le programme s'arrte ce momentl, le mot fin tant le dernier apparatre sur lcran.

ALGORITHME: mots_tapes2
//affichage du mot tap ds lors que celui-ci
//n'est pas le mot "fin"
VAR:
mot
:CHAINE
DEBUT
REPETER
LIRE( mot )
ECRIRE( mot )
TANTQUE( mot <> "fin" )
FIN

80 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 1 : Structure de contrle (Supplment)


Exercice 1

Enonc : Ecrire un algorithme qui demande deux nombres l'utilisateur et l'informe ensuite
si leur produit est ngatif ou positif (on laisse de ct le cas o le produit est nul).
Attention toutefois : on ne doit pas calculer le produit des deux nombres.

Exercice 2

Enonc : Ecrire un algorithme qui demande trois noms l'utilisateur et l'informe ensuite
s'ils sont rangs ou non dans l'ordre alphabtique.

Exercice 3

Enonc : Ecrire un algorithme qui demande un nombre l'utilisateur et l'informe ensuite si


ce nombre est positif, ngatif ou nul.

Exercice 4

Enonc : Ecrire un algorithme qui demande deux nombres l'utilisateur et, sans calculer le
produit, l'informe ensuite si le produit est ngatif, positif ou nul.

Exercice 5

Enonc : Ecrire un algorithme qui demande lge d'un enfant l'utilisateur. Ensuite, il
l'informe de sa catgorie :

"Poussin" de 6 7 ans
"Pupille" de 8 9 ans
"Minime" de 10 11 ans
"Cadet" aprs 12 ans

81 / 232

Preuve et Complexit Algorithmique

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de qualit dun algorithme


Il existe plusieurs algorithmes pour rsoudre un mme
problme
Certains sont plus faciles que dautres programmer...
Certains sont plus efficace que dautres

Choix :

du plus facile comprendre, coder et debugger


du plus rapide et utilisant efficacement les ressources

2 cas typiques qui ncessitent des algorithmes efficaces:


taille du problme norme
code excuter un grand nombre de fois

Recherche d'algorithme plus efficace et si possible


simple
Analyse empirique d'un algorithme
Analyse mathmatique d'un algorithme

83 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de qualit dun algorithme


Analyse empirique d'un algorithme

Soit 2 algorithmes ralisant la mme tche

compare temps d'excution sur des entres typiques


3 s ou 30 s d'attente pour l'utilisateur feront une grande
diffrence
permet aussi de valider une analyse mathmatique

Si le temps d'excution devient trop long, l'analyse


mathmatique s'impose
attente pouvant tre de l'ordre de l'heure ou du jour

Ncessite l'implmentation (criture en langage


machine, exemple langage C/C++) d'une premire
version de l'algorithme !!!
84 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de qualit dun algorithme


Analyse mathmatique d'un algorithme

L'analyse mathmatique d'un algorithme peut-tre complexe


Une spcialit en informatique
Paramtres hors de porte du programmeur :

temps d'excution d'une instruction


ressources partages
dpendance des donnes en entre
certains algorithmes sont tout simplement complexes et il n'y a pas
de rsultat mathmatique pour les dcrire

Nanmoins il est possible de prdire

la performance d'un algorithme


si un algorithme est meilleur qu'un autre

Premires tapes:

identifier les oprations abstraites de l'algorithmes

exemple de la triple boucle, le nombre d'excutions de l'instruction :


count++

Ne pas tenir compte du temps en milliseconde

85 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit dun algorithme


La fonction de complexit dun algorithme fait correspondre pour
une taille donne le nombre maximum dinstructions lmentaires qui
lui est ncessaire pour rsoudre une instance quelconque de cette
taille.
Soit c(x) = Nombre dinstructions lmentaires de lalgorithme A sur
lentre x alors le nombre maximum dinstructions lmentaires scrit
C(n) = max|x| de taille n c(x), o |x| est la taille de x

En dautres termes:

La complexit dun algorithme est une estimation du nombre doprations


de base ou doprations lmentaires effectues par lalgorithme en
fonction de la taille des donnes en entre de lalgorithme.

On ne sintresse pas en gnral la complexit exacte, mais son


ordre de grandeur, c--d., on sintresse plutt C(n) lorsque n est
"grand".

On parle dordre de grandeur asymptotique ou complexit asymptotique.

La complexit dun algorithme est une mesure inhrente


lalgorithme (la mthode), elle ne dpend pas de la machine sur
laquelle on limplante.

86 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Type de complexit


Lalgorithme A a une complexit linaire si, lorsque n est grand, C(n)
est proportionnelle n.
Mathmatiquement, il faut quil existe une constante a 0 telle que :

lim sup C (n) / n a


n

Terminologie (a, b sont des constantes, a > 0 et b > 1) :


Pour une fonction f (n) telle que lim supn C(n)/f(n)=a :

f(n)

type de complexit

constante : instructions excutes un nombre limit de fois;

linaire

n2

quadratique : utilisable sur de petits problmes;

bn

exponentielle

logbn
nb

logarithmique : division du problme pour le rsoudre


polynomiale
87 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Type de complexit


Diffrence entre complexit de lordre de 2n/2 et de n6
La diffrence est norme ! Si lon suppose quun ordinateur peut
excuter une instruction lmentaire en 10-9 s (1 GHz), soit 1
milliard dinstructions par seconde, alors :
n (bits)

temps pour 2n/2

temps pour n6

32

232/2 x 10-9 65 s

326 x 10-9 1 s

64

264/2 x 10-9 4 s

646 x 10-9 1 mn 8 s

128

2128/2 x 10-9 584 ans

1286 x 10-9 1h13

256

2256/2 x 10-9 1011 Mans

2566 x 10-9 3,5 jours

512

2512/2 x 10-9 1052 Mans

5126 x 10-9 6,8 mois

1024

21024/2 x 10-9 10128 Mans

10246 x 10-9 36 ans


88 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Type de complexit


Dans la pratique, on cherche bien sr des algorithmes de complexit
la plus faible possible.
Les complexits exponentielles sont donc viter.
Parfois, ce nest pas possible ! Voici un problme de complexit
doublement exponentielle, o tout algorithme a une complexit

C (n) 1010

Donnes (entre) : un entier x (crit en base 10).


Rsultats (sortie) : tous les entiers de x chiffres.

y a 10x entiers de x chiffres, donc la complexit est au moins 10x .


dit x 10n.
Or, la taille de lentre est ici de n log10x. Autrement
n
x
10
La complexit de ce problme est au moins 10 10
Contrairement ce quon pourrait croire, il existe des problmes qui
ne possdent pas dalgorithme pour les rsoudre, quelque soit leur
complexit !
On parle de problme indcidable.

89 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Notation de Landau


La notation qui est gnralement utilise pour indiquer la complexit
dun algorithme est la notation en O( ) (notation en grand-"O").
Il existe dautres notations asymptotiques telles que :
: f(n) = (g(n)) g(n) = O(f(n))

g est une borne inf. : sert connatre le temps min que prendra lalgorithme

: f(n) = (g(n)) f(n) = O(g(n)) et f(n) = (g(n))

90 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Notation en O()


On dira dune fonction f(n) quelle est en O(g(n)) sil existe deux
constantes c > 0 et n0 0 telles que |f (n)| c x |g(n)| pour toutes les
valeurs de n n0, o n est le nombre d'lments traiter par
l'algorithme
si n < n0 on ne connat pas le comportement de l'algorithme
Cette notation permet de :
limiter l'erreur quand on ignore les termes plus petits dans une formule
mathmatique
limiter l'erreur quand on ignore certaines parties du programme qui
prennent peut de temps
classer les algorithmes en fonction de leur comportement asymptotique
(avec n grand)
On parle dordre de grandeur et de complexit asymptotique.

Lide est quil ne sert rien de calculer la complexit dun


algorithme lunit prs.

Par exemple, sur une machine 1 GHz et pour n = 109, lexcution de n ou


n + 1 instructions lmentaires prendrons 1 s dans les deux cas, la
diffrence tant en pratique indiscernable !
91 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : Notation en O()


Exemple

si la complexit de lalgorithme A est CA(n) = 3n - 2 et


celle de lalgorithme B est CB(n) = 1/2n2 + n - 1, alors on notera
CA(n) = O(n) et CB(n) = O(n2).

Cest une faon de dire que la complexit de A est linaire et celle de


B quadratique.

Attention!

C(n) = O(g(n)) est une notation!


Si C1(n) = O(n) et C2(n) = O(n), alors il est faux de dire que C1(n) =
C2(n) ou encore que C1(n) C2(n) = 0 !
En effet, peut-tre que C1(n) = 3n et C2(n) = n + 2n.
Mais il est correct dcrire : C1(n) + C2(n) = O(n).
En effet, C1(n) + C2(n) = 4n + 2n 5n pour tout n > 4
(car 2n n 2 n 4 n) o n0 = 4 c = 5 dans la dfinition de
la notation grand O.
92 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit : principe de calcul


Dterminer la complexit algorithmique cest "compter" le nombre
dinstructions qui seront excutes ;
Pour une instruction lmentaire le cot est considr unitaire
(constant)
elle est indpendant de la taille de ses oprandes.

Deux expressions sont supposes quivalentes du point de vue du


cot car proportionnelles.
Pour une instruction conditionnelle, en labsence dinformations
complmentaires, on choisit le nombre maximum dinstructions
auquel sajoute lvaluation de lexpression boolenne.
Pour une instruction itrative, en labsence dinformations
complmentaires, on multiplie le nombre dinstructions internes la
boucle au nombre de fois que cette boucle sera excute.
Pour une instruction itrative conditionnelle, il faut valuer
le cas au pire.
93 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de complexit
Temps dexcution

Comme une instruction lmentaire prend un temps constant


(disons en secondes), indpendant des oprandes et donc de la
taille des entres, la complexit peut donner une ide du temps
dexcution du programme T qui sexcuterait sur une entre de
taille n

temps(T, n) a C(n)

94 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Rcursivit : Dfinition


La rcursivit

Concept fondamental :
en mathmatique :

relation de rcurrence :

n! = n(n - 1)!
pour n >= 1 avec 0! = 1

en informatique :

fonctions rcursives.

Principe en algorithmique

Qui sappelle lui-mme.


Appels de plus en plus simples .

vit les Rcursivits croises : Un sous-programme SP1 appelle un


sous-programme SP2 qui rappelle le sous-programme SP1.

Solution directe pour le dernier appel.


Respect de la condition darrt.

Existence dune condition de sortie de la boucle rcursive.


95 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Rcursivit : Exemple


Instruction rptitive et rcursivit
Calcul non rcursif (itrative) de la factorielle
//ALGORITHME Calcul non recursif (itrative) de la factorielle
FONCTION: fact_non_recursif( n :ENTIER):ENTIER
VAR:
compteur <-- 1 :ENTIER
resultat <-- 1 :ENTIER
DEBUTFONCTION
TANTQUE ( compteur < n )
FAIRE
compteur <-- compteur + 1
resultat <-- resultat * compteur
FINTANTQUE
RETOURNER: resultat
FINFONCTION

96 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Rcursivit : Exemple


Instruction rptitive et rcursivit
Calcul rcursif de la factorielle
//ALGORITHME Calcul recursif de la factorielle
FONCTION: fact_recursif( n :ENTIER):ENTIER
VAR:
resultat
:ENTIER
DEBUTFONCTION
SI ( n = 0 )
ALORS
resultat <-- 1
//Condition darrt
//des appels rcursifs
SINON
resultat <-- n * fact_recursif( n 1 ) //rcursivit
FINSI
RETOURNER: resultat
FINFONCTION
97 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Rcursivit : Intrts


Intrts

Technique efficace de simplification de l'criture d'un


algorithme de rsolution d'un problme.
L'algorithme rcursif est dfini (et labor) en fonction de luimme.
Certaines structures de donnes peuvent contenir une mme
structure en interne

un rpertoire d'ordinateur est compos de fichiers et de dossiers,


ces dossiers peuvent contenir d'autres fichiers et dossiers,
quasiment l'infini.

Un problme, dans certains cas, peut se ramener au mme


problme de taille infrieure et ainsi de suite jusqu' obtenir un
problme lmentaire. Le concept de rcursivit est
parfaitement adapt avec cette catgorie de problmes.
Par exemple, pour le calcul du factorielle de N : N !

98 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de Rcursivit : Contraintes


Contraintes
Sassurer que la fonction est compltement dfinie sur tout son
domaine dapplication.
Etre certain que lalgorithme aboutira sur un cas connu :
le cas darrt de la rcursivit.

Contrler que le contexte d'utilisation est parfaitement adapt


aux inconvnients de la rcursivit en informatique :
besoins en ressources systmes (plus particulirement en gestion de
l'espace mmoire) ;
les variables temporaires du programme ou de la fonction qui
provoque l'appel sont sauvegardes temporairement dans une
structure de type "pile" (vrifier la taille de la pile et le type de la
pile : allocation statique ou dynamique).

99 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple, Calcul de la factorielle (fact(3))


appel

appel

appel

appel

fact()
3 x fact(3-1)

fact(0)

3
2
1
0
1
2
3

fact(3)
fact(2)
fact(1)

1 x 1
2 x 1
3 x 2

2 x fact(2-1)
1 x fact(1-1)
1
1
2
6
100 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple, Calcul de la factorielle (fact(3))


Gestion de la pile en rcursivit
Une pile dexcution est utilise lors des appels rcursifs :

EMPILER( 3 )
EMPILER( 2 )
EMPILER( 1 )
DEPILER()
DEPILER()
DEPILER()

1
2
3
101 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Et il y a aussi Fibonacci
Exemple : Un robot peut avancer par des pas de 1 ou 2
mtres.
Calculer le nombre de faons diffrentes

Distance

Suite de pas

Nb de
possibilits

1,1 ou 2

1, 1, 1 ou 1, 2 ou 2, 1

1,1,1,1 ou 1,1,2 ou 1,2,1 ou 2,1,1 ou 2,2

5
102 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Et il y a aussi Fibonacci
Pas(n): Nombre de

possibilits pour
parcourir n mtres.

Pas(1) = 1, Pas(2) = 2;
Pour n>2:

Si premier pas = 1 mtres,


il reste n-1 mtres ->

Pas(n-1)

Si premier pas = 2 mtres,


il reste n-2 mtres ->

Pas(n-2)

Donc, Pas(n) =

Pas(n-1)+Pas(n-2)

Entre: n
Sortie: Pas(n)
Procdure Pas (n)
Si n=1 ou n=2 alors
Retourne n
Retourne Pas(n-1) + Pas(n-2)
Fin Pas

Squence de Fibonacci:
f1 = 1
f2 = 2
fn = fn-1 + fn-2 pour n>2
103 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

"Drcursiver"
drcursiver =

transformer un algorithme rcursif en algorithme itratif c--d.


un algorithme quivalent ne contenant pas dappels rcursifs
diminuer la taille de la pile

pour des raisons d'efficacit (conomie de temps et de


mmoire) on peut tre amen "drcursiver"
certains algorithmes
on : le plus souvent les compilateurs

mthodes gnrales pour supprimer :


un appel rcursif terminal :
utilise une boucle tant que

un appel rcursif non terminal :


utilise une pile

104 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

"Drcursiver"
Remarques
Les programmes itratifs sont souvent plus efficaces,
mais les programmes rcursifs sont plus faciles
crire.
Les compilateurs savent, la plupart du temps,
reconnatre les appels rcursifs terminaux, et ceux-ci
nengendrent pas de surcot par rapport la version
itrative du mme programme.
Il est toujours possible de drcursiver un algorithme
rcursif.

105 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rcursif versus itratif


sur ces 2 exemples triviaux la solution itrative est
meilleure
certains compilateurs astucieux remplacent

l'appel rcursif terminal par une boucle tant que


un appel non terminal par un algorithme itratif utilisant une
pile

certains algorithmes sont naturellement rcursifs


1) algorithmes rcursifs de type diviser pour rsoudre

2 appels rcursifs traitant chacun en gros la moiti des donnes


sans calcul redondant

2) algorithmes rcursifs de type combiner pour rsoudre


commencer par rsoudre des cas triviaux
puis en les combinant rsoudre des cas complexes

106 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rcursivit : Bilan
un algorithme rcursif peut tre transform en algorithme itratif
(ne le faire que si on voit que l'algorithme "patine" ou besoin
imprieux)
un programme itratif n'est pas toujours plus efficace qu'un
programme rcursif
la rcursivit est centrale

en informatique dite thorique pour distinguer les problmes (problmes


calculables) qu'une machine peut rsoudre en temps fini
en programmation pour traiter de manire simple de nombreux
problmes sur les arbres binaires (recherche, tri etc.)

Un algorithme itratif nest pas forcment plus rapide quun


algorithme rcursif
Certains algorithmes sont mieux traits par des algorithmes
itratifs
Dautres sont mieux traits par des algorithmes rcursifs

107 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rsum sur la structure des programmes

VALIDATION
VALIDATION
des
des modules,
modules,
puis
puis du
du
programme
programme

FAIRE
FAIRE UN
UN PROGRAMME
PROGRAMME
==
modlisation
modlisation
++
Rsolution
Rsolution

MODULARITE
MODULARITE
==
qualit
qualit accrue
accrue
du
du programme
programme

Cest
Cest une
une tche
tche qui
qui
ncessite
ncessite de
de la
la rigueur
rigueur

DECOUPAGE
DECOUPAGE
EN
EN MODULES
MODULES
fonctions,
fonctions,
(procdures
(procdures ::
moins
moins utilises)
utilises)

RECURSIVITE
RECURSIVITE
simplification
simplification
des
des fonctions
fonctions
rptitives
rptitives
108 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Pause-rflexion sur cette partie


Avez-vous des questions ?

109 / 232

Travaux Dirigs (TD)

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

TD 2 : Complexit algorithmique
Exercice 1

Enonc : crire une fonction en langage algorithmique qui prend en paramtre un entier i et calcule la valeur
u(i) dfinie par rcurrence par :
u0 1; u1 2
u j 1 3 u j u j 1 pour j 1

valuer la complexit de lalgorithme propos

Exercice 2

Enonc : soit la fonction

3 x 2 x 1 si x 1
f x
0
sinon

a) crire une fonction en langage algorithmique qui prend en paramtre un entier x et calcule f(x).
b) crire une fonction en langage algorithmique qui prend en paramtre un entier n et calcule la somme :
S n f n f n 1 f n 2 f n 3 f n 4

On arrtera la somme lorsque la valeur f calcule est nulle.


c) crire une fonction en langage algorithmique qui prend en paramtre un entier n et calcule la somme :
Tn f n f n 2 f n 2 f n 2 f n 2
2
3
4
5
Dans cette somme, les divisions sont des divisions euclidiennes. On arrtera la somme lorsque la valeur f
calcule est nulle.
d) crire une fonction en langage algorithmique qui prend en paramtre un entier n et calcule la somme :

2 f n 4 f n 8 f n16

Un f n f n

Dans cette somme, les divisions sont des divisions euclidiennes. On arrtera la somme lorsque la valeur f
calcule est nulle.
111 / 232

Structures de donnes squentielles


(ou linaires)

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structures de donnes linaires


Voici les parties que nous
allons aborder
Les listes
Les piles.
Les files.

113 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Prsentation


Dfinition

Une liste est une structure de donnes linaire correspondant une


suite dlments pour laquelle les oprations lmentaires ne sont pas
limites lajout et au retrait d'lments.
Les lments ne sont pas indexs dans la liste, mais pour chaque lment
(sauf le dernier) on sait o se trouve llment suivant

Spcificits et contraintes d'utilisation

On ne peut accder un lment de la liste quen passant par le premier


lment et en parcourant tous les lments de la liste jusqu ce quon
atteigne llment recherch.
La notion de liste se distingue des autres structures linaires par le fait
que ce n'est ni un indice, ni un pointeur unique qui permet d'accder aux
donnes, mais autant de pointeurs que de donnes, voire le double.
Le concept fondamental qui permet d'utiliser les listes de cette faon
est un concept de chanage des donnes, concept de gestion dynamique
trs courant en informatique.
114 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes simplement chanes


Spcificits

Chaque case mmoire est compose de deux champs. Le premier,


gauche, reoit la donne (appel "cl") et le second, droite, correspond
au pointeur vers la prochaine case mmoire. Le pointeur peut tre NULL
si la case mmoire n'existe pas (fin de la chane).

Rle dune liste simplement chane

Le chanage simple est une structure simple accs squentiel et orient


( cause de la gestion des "pointeurs vers" ).
La capacit mmoire est rduite au minimum. La grande flexibilit
obtenue l'aide des pointeurs permet d'intervenir sur la liste aisment.
En revanche, la recherche ncessite un balayage de tous les lments de
la liste partir du premier, ce qui reprsente un processus relativement
long lorsque la liste l'est aussi.

E
115 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes doublement chanes


Spcificits

Chaque case mmoire est compose de trois champs. Le champ central


reoit la donne (appel "cl"). Le premier, gauche, correspond un
pointeur vers la case mmoire prcdente et le troisime, droite reoit
le pointeur vers la prochaine case mmoire. Le pointeur peut tre NULL
si la case mmoire n'existe pas (dbut ou fin de la chane).

Rle dune liste doublement chane

Malgr un besoin, en capacit mmoire, suprieur un chanage simple,


(deux fois plus de pointeurs), la recherche, (comme les dplacements
sont possibles dans les deux sens), est donc plus rapide.
Dans le cas d'une rupture de lien, la chane peut tre ventuellement
reconstitue, alors que pour un chanage simple, la rparation est plus
difficile.
On obtient ainsi, au dtriment d'une optimisation de la mmoire, une
optimisation de la gestion du contenu de la liste et une scurit accrue.

E
116 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Oprations lmentaires


Trois oprations lmentaires ont la possibilit de
modifier la structure de la liste : lajout, l'insertion et le
retrait :
AJOUTER : opration dajout en queue de liste le nouvel lment
INSERER : opration d'insertion la position courante et dcale
l'ancien lment point comme lment suivant
RETIRER : opration de retrait de l'lment courant

D'autres oprations volues permettent d'effectuer


des oprations sur la liste.

117 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Primitives associes


Dclaration :
LISTE: nom_liste : TYPE_ELEMENT_DE_LA_LISTE

Fonctions lmentaires :
AJOUTER(nom_liste,element) //ajout en queue
INSERER(nom_liste,element) //insertion courante
element <-- RETIRER(nom_liste)
//retrait
ECRIRE(nom_liste,element)
//criture courante
element <-- LIRE(nom_liste) //lecture courante

Fonction complmentaire :
VIDER(nom_liste) //ordonne le retrait de tous les
lments
var_booleen <-- RECHERCHER(nom_liste,element) //recherche
un lment particulier

118 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Exemple (1/2)


Gestion d'une course (quint) avec une liste

Lutilisation dune liste est parfaitement adapte dans le


traitement d'informations sujettes modification, mise en ordre,
suppression,
4
1

AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER

(l_quinte,"1")
(l_quinte,"4")
(l_quinte,"5")
(l_quinte,"7")
(l_quinte,"10")
(l_quinte,"15")
(l_quinte,"23")
(l_quinte,"25")

7
5

10

15

23

25

119 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Exemple (1/2)


Gestion d'une course (quint) avec une liste

Les chevaux arrivs au-del de la 5me place sont retirs de la


liste,
4

RECHERCHER(l_quinte,"10")
RETIRER(l_quinte)
RECHERCHER(l_quinte,"4")
RETIRER(l_quinte)

7
5

10

RECHERCHER(l_quinte,"25")
RETIRER(l_quinte)

15

23

25

120 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Exemple (1/2)


Gestion d'une course (quint) avec une liste
Les chevaux sont arrivs dans l'ordre suivant, un
algorithme prend en charge
la rorganisation de la liste,
en mmoire, cela n'a d'incidence
1
que sur le second champs
"pointeur vers ".
premier : ("23")
second : ("1")
troisime : ("7")
quatrime : ("15")
cinquime : ("5")

7
5

15

23

121 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Exemple (1/2)


Gestion d'une course (quint) avec une liste
Les chevaux sont arrivs dans l'ordre suivant, un
algorithme prend en charge
la rorganisation de la liste,
en mmoire, cela n'a d'incidence
1
que sur le second champs
"pointeur vers ".
premier : ("23")
second : ("1")
troisime : ("7")
quatrime : ("15")
cinquime : ("5")
APPLICATION

7
5

15

23

122 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Exemple (2/2)


Gestion d'une course (quint) avec une liste doublement
chane, implmente l'aide de tableaux :
Liste des chevaux : "1", "4", "5", "7", "10", "15", "23", "25".
Retrait des chevaux arrivs au-del de la 5me place.
L'ordre d'arrive est le suivant : "23", "1", "7", "15", "5".

suivant [1..8]

chevaux [1..8]

precedent [1..8]

10 15 23 25
4

/
123 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les listes : Mise en uvre


Raliser la structure de donnes LISTE consiste
1.

dfinir le type de donnes (que lon nomme ici ELEMENT) qui


peut tre soit

2.

choisir une structure de donnes pour reprsenter une liste :


reprsentation interne de la liste

3.

un objet (stockage direct)


une adresse dobjet (stockage indirect)

cellules (structures) contigus (tableau)


cellules (structures) chanes (pointeurs)
faux pointeurs (tableaux pour simuler les pointeurs)

dfinir les primitives dans un langage de programmation

124 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Type de donnes ELEMENT : Dfinition


tous les lments appartiennent un type de donne ELEMENT qui possde
un lment vide
ELEMENT est d'un type quelconque (ENTIER, REEL, CARACTERE, CHAINE,
STRUCTURE, pointeur sur une structure ou tout type utilisateur) muni des 4
oprations (affecter, tester l'galit, lire et afficher) :
saisir un lment
ElementLire

afficher un lment
ElementAfficher

affecter dans un lment un autre lment


ElementAffecter

tester si deux lments sont identiques


ElementIdentique

Pour les lments qui utilisent de la mmoire dynamique ou qui ont besoin
d'tre initialiss, on a besoin de primitives pour allouer et dsallouer la
mmoire dynamique (crer et dtruire) :
allouer la mmoire dynamique ou initialiser un lment
ElementCreer

librer la mmoire alloue pour un lment


ElementDetruire

125 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Type de donnes POSITION : Dfinition


On dispose d'un type de donnes POSITION
permettant de reprer un lment dans la liste sur
lequel on peut :
tester si deux positions sont gales :
PositionIdentique

affecter dans une position une autre position


PositionAffecter

Dans la suite :
une position sera un entier ou un pointeur

Pour allger les notations


Nous testerons lgalit de deux positions avec ==
Nous utiliserons laffectation = pour affecter une position dans une
autre
126 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par tableau


Dfinition :
Les lments de la liste sont rangs en mmoire
dans un tableau dune taille donne et rempli jusqu
un certain indice

Structure de donne
Une liste est un pointeur sur une structure deux
champs
un tableau automatique qui contient les lments de la liste
un entier indiquant l'indice du dernier lment de la liste

Une position est un entier : l'indice de l'lment


dans le tableau
127 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par tableau


Mise en uvre en langage algorithmique :
//Exemple : les lments dans la structure sont des ENTIER
VAR LongMax <-- 100 : ENTIER //longueur max de la liste
//dfinition du type POSITION
TYPE POSITION : ENTIER
//indice de l'lt dans le tableau
//dfinition du type laStruct
STRUCTURE laStruct
elements[LongMax] : ELEMENT
//dfinition du tableau
dernier : ENTIER //indice du dernier lment de la liste
TYPE *LISTE : laStruct

// dclaration dune liste


128 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par tableau


Mise en uvre en langage C :

/* exemple : les lments dans la structure sont des int */


#define LongMax 100 /* longueur maximale d'une liste */
/* dfinition du type POSITION */
typedef int POSITION ; /* indice de l'lment dans le tableau */

/* dfinition du type laStruct */


typedef struct {
ELEMENT elements[LongMax]; /* dfinition du tableau */
int dernier;
/* indice du dernier lment de la liste */
} laStruct;
laStruct *LISTE; /* dclaration dune liste */
129 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par cellules chanes


Une cellule est une structure deux champs :
lment, contenant un lment de la liste
suivant, contenant un pointeur sur une autre cellule

Une position est un pointeur sur une cellule


lment

suivant

L
Cellules\0

Chanes\0
130 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par cellules chanes


Mise en uvre en langage algorithmique :
//dfinition du type cellule
STRUCTURE cell
element :ELEMENT
*suivant : cell //listes simplement chanes
//dfinition du type raccourci pointeur
TYPE cellule, *LISTE : cell
TYPE *POSITION : cellule

131 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par cellules chanes


Mise en uvre en langage C :
lment
typedef struct cell {
ELEMENT element;
struct cell * suivant;
} cellule, *LISTE

adresse1

typedef cellule* POSITION;

adresse5

suivant

adresse7

adresse8

adresse7

adresse8

adresse3

adresse2
adresse3
adresse4
adresse6

Exemple : (a b c) et (d e)

adresse9
adresse10
132 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par tableau


avantages
simples programmer
facilite les oprations insrer en fin, longueur, prcdent,
sentinelle en O(1)
intressant si les listes ont une taille qui varie peu

inconvnients
ncessite de connatre l'avance la taille maximum de la liste
coteux en mmoire si on a des listes de taille trs variable
rend coteuses les oprations d'insertion et de suppression
(en O(n))

133 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure LISTE : par cellules chanes


avantages
conomise la mmoire pour des listes de taille trs variable
facilite les oprations insrer et supprimer en O(1)
intressant pour les listes o on fait beaucoup d'insertions et de
suppressions

inconvnients
risque de mauvaise manipulation sur les pointeurs (contrle de la
validit des positions qui augmente la complexit ou fragilise la
structure de donnes)
coteux en mmoire si beaucoup de grosses listes (un pointeur
par cellules)
rend coteuses les oprations longueur, prcdent, sentinelle,
insrer en fin ( en o(n))
134 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Prsentation


Spcificits et contraintes d'utilisation

Une pile est une structure en forme de liste pour laquelle les oprations
dajout et de retrait dlment ne sont effectues qu une seule
extrmit, appele sommet de pile (ou tte).
Une pile est une structure de donnes du type LIFO (Last In First
Out), ce qui correspond "dernier entr premier sorti".
Une pile est une zone contigu de la mmoire pouvant contenir des
valeurs

Le rle dune pile

Une pile est une structure qui permet un processus informatique de "se
souvenir" pendant un certain temps dune information ou d'une suite
d'informations.
Ce qui est "empil" est considr comme tant des lments non encore
traits, du travail restant effectuer, par exemple :
Pile permettant de mmoriser les rsultats intermdiaires dun calcul.
Gestion des variables locales lors des appels dune fonction (tudi lors des
modules suivants).

135 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Oprations lmentaires


Seules deux oprations
ont la possibilit de
modifier le contenu de la
pile : lajout et le retrait,
qui portent des noms
spcifiques pour cette
structure :
EMPILER ou AJOUTER :
opration dajout (qui fait
grandir la pile)

136 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Oprations lmentaires


Seules deux oprations
ont la possibilit de
modifier le contenu de la
pile : lajout et le retrait,
qui portent des noms
spcifiques pour cette
structure :
EMPILER ou AJOUTER :
opration dajout (qui fait
grandir la pile)
DEPILER ou RETIRER :
opration de retrait (qui
fait diminuer la pile)
137 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Primitives associes


Dclaration :
PILE: nom_pile : TYPE_ELEMENT_DE_LA_PILE

Fonctions lmentaires :
EMPILER(nom_pile,element) //ajout dans la pile
element <-- DEPILER(nom_pile) //retrait
element <-- TETE(nom_pile) //lecture seulement
var_booleen <-- PILE_VIDE(nom_pile) //test
var_booleen <-- PILE_PLEINE(nom_pile) //test

Fonction complmentaire :
VIDER(nom_pile) //ordonne le retrait de tous les lments
PILEDETRUIRE(nom_pile) //permet de dtruire la pile

138 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Exemple


Lutilisation dune pile est parfaitement adapte dans
les valuation dexpressions avec parenthses, comme
par exemple :
5+(9+8)*3
EMPILER( 5 )
EMPILER( 9 )
EMPILER( 8 )
EMPILER( DEPILER() + DEPILER() )
EMPILER( 3 )
EMPILER( DEPILER() * DEPILER() )
EMPILER( DEPILER() + DEPILER() )
ECRIRE( DEPILER() )

8
3
9
51
17
5
56
139 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Exemple


Utilisation dun tableau
Opration effectuer :

calcul [1..6]

56
5

5+(9+8)*3

17
9
51

3
8

140 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les piles : Mise en uvre


Limplmentation dune pile peut se faire
1. laide de la structure de donnes LISTE
Facile programmer
Efficacit non garantie

2. laide de cellules chanes (pointeurs ou curseurs)


facile, ce sont des listes avec en-tte o lon insre et
supprime au dbut de la liste

3. laide de cellules contigus (tableau)


Prsente ici pour donner un exemple dutilisation dun
tableau allou en mmoire dynamique

141 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure PILE : par tableau


Structure de donnes retenue :
une pile est un pointeur sur une structure qui contient

un pointeur vers une zone dans le tas alloue pour pouvoir contenir
un nombre d'lments gal la profondeur maximum
l'indice du sommet de la pile
la profondeur maximale de la pile

Mise en uvre en langage algorithmique :


STRUCTURE pile
*elements : ELEMENT //tableau dlments
sommet : ENTIER
profMax : ENTIER; //capacit de la pile
TYPE *PILE : pile
142 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure PILE : par tableau


Structure de donnes retenue :

une pile est un pointeur sur une structure qui contient

un pointeur vers une zone dans le tas alloue pour pouvoir


contenir un nombre d'lments gal la profondeur maximum
l'indice du sommet de la pile
la profondeur maximale de la pile

Mise en uvre en langage C

typedef struct {
ELEMENT *elements ; /* tableau des lments */
int sommet ;
int profMax ; /* capacit de la pile */
} pile,*PILE ;
143 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure PILE : par cellules chanes


Les lments de la pile sont chans entre eux, et le sommet dune
pile non vide est le premier lment de la liste
Mise en uvre en langage algorithmique

STRUCTURE cell
element :ELEMENT
*suivant : cell //liste simplement chanes
TYPE *LISTE : cell
STRUCTURE PILE
sommet : LISTE
nb_elt : ENTIER

Mise en uvre en langage C


typedef struct pile {
LISTE sommet;
int nb_elt;
} PILE;
144 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure PILE
Comparaison entre tableau et liste
Dans les deux types de gestion des piles, chaque
primitive ne prend que quelques oprations (complxit
en temps constant).
Par contre, la gestion par listes prsente lnorme
avantage que la pile a une capacit virtuellement
illimite (limite seulement par la capacit de la RAM).
La mmoire tant alloue mesure des besoins.
Au contraire, dans la gestion par tableaux, la mmoire
est alloue au dpart avec une capacit fixe.

145 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Prsentation


Spcificits et contraintes d'utilisation

Une file est une structure en forme de liste pour laquelle les
oprations dajout sont effectues une seule extrmit
appele : la queue de la file ; et les oprations de retrait sont
effectues l'autre extrmit appele : la tte de la file.
La notion de file se rapproche de celle dune file dattente
comme au cinma,
Ce concept est courant en informatique, par exemple : gestion de
la file d'attente des impressions sur une imprimante en rseau,
...
Pour rsumer, les lments dune file sont traits dans leur
ordre darrive : llment prsent depuis le plus longtemps est
le premier, on dit quil est en tte
Une file est une structure de donne du type FIFO (First In
First Out), ce qui correspond "premier entr premier sorti".
146 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Oprations lmentaires


Seules deux oprations
ont la possibilit de
modifier le contenu de la
file : lajout et le retrait,
qui portent des noms
spcifiques pour cette
structure :
ENFILER ou AJOUTER :
opration dajout

147 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Oprations lmentaires


Seules deux oprations
ont la possibilit de
modifier le contenu de la
file : lajout et le retrait,
qui portent des noms
spcifiques pour cette
structure :
ENFILER ou AJOUTER :
opration dajout
DEFILER ou RETIRER :
opration de retrait

148 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Primitives associes


Dclaration :
FILE: nom_file : TYPE_ELEMENT_DE_LA_FILE

Fonctions lmentaires :
ENFILER(nom_file,element) //ajout dans la file
element <-- DEFILER(nom_file) //retrait
element <-- TETE(nom_file) //lecture seulement
var_booleen <-- FILE_VIDE(nom_file) //test
var_booleen <-- FILE_PLEINE(nom_file) //test

Fonction complmentaire :
VIDER(nom_file) //ordonne le retrait de tous les lments

149 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Exemple


Lutilisation dune file est parfaitement adapte dans le
traitement d'informations transmises entre deux
terminaux, comme par exemple : "BONJOUR"

ENFILER( 'B' )
R U O J N O B
ENFILER( 'O' )
ENFILER( 'N' )
ENFILER( 'J' )
ENFILER( 'O' )
BONJOUR
ENFILER( 'U' )
ENFILER( 'R' )
ECRIRE( DEFILER(), DEFILER(), DEFILER(), DEFILER(),
DEFILER(), DEFILER(), DEFILER() )
150 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les files : Exemple


Utilisation dun tableau
Liste des lettres : "B", "O", "N", "J", "O", "U", "R".

TETE

transmission [1..7]

QUEUE

151 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure FILE : par tableau


Une file est un pointeur sur une structure qui contient
un pointeur vers un tableau allou en mmoire dynamique qui
contient les lments de la file
l'indice courant du dbut de la file
l'indice courant de la fin de la file
la taille maximale de la file, spcifie par la primitive de cration
de pile
STRUCTURE FILE
*elements :
debut
:
fin
:
longMax
:
TYPE *FFILE :

ELEMENT
ENTIER
ENTIER
ENTIER
FILE

//tableau des lments


//indice de tte
//indice de queue
//nombre dlments du tableau

152 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure FILE : par tableau


Une file est un pointeur sur une structure qui contient
un pointeur vers un tableau allou en mmoire dynamique qui
contient les lments de la file
l'indice courant du dbut de la file
l'indice courant de la fin de la file
la taille maximale de la file, spcifie par la primitive de cration
de pile
typedef struct {
ELEMENT *elements;
int debut;
int fin;
int longMax;
} file, *FFILE;

/*tableau des lments*/


/*indice de tte*/
/*indice de queue*/
/*nombre dlments du tableau*/

153 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure FILE : par cellules chanes


Une file est une structure qui contient

Soit deux pointeurs, tte et queue, vers le premier et le dernier


lment de la file
Soit un pointeur qui suit le dernier lment pour reprer le
premier lment

Reprsentation avec deux pointeurs

STRUCTURE cell
element
: ELEMENT
*suivant : cell //cellules chanes
TYPE *cellule : cell
STRUCTURE FILE
tete
: cellule //pointeur de tte
queue
: cellule //pointeur de queue
nb_elt
: ENTIER //profondeur de la file
TYPE *FFILE : FILE
154 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structure FILE : par cellules chanes


Une file est une structure qui contient

Soit deux pointeurs, tte et queue, vers le premier et le dernier


lment de la file
Soit un pointeur qui suit le dernier lment pour reprer le
premier lment

Reprsentation avec deux pointeurs en langage C


typedef struct cell {
ELEMENT element;
struct cell *suivant; //cellules chanes
} cell;
typedef cell *cellule;
typedef struct FILE
cellule tete; //pointeur de tte
cellule queue; //pointeur de queue
int nb_elt;
//profondeur de la file
} FILE;

155 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Pause-rflexion sur cette partie


Avez-vous des questions ?

156 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Rsum sur les structures de donnes linaires

FILE
FILE
o
o lon
lon entre
entre par
par
la
la queue
queue et
et sort
sort
par
par la
la tte
tte

STRUCTURE
STRUCTURE
LINEAIRE
LINEAIRE
donnes
donnes mises
mises bout
bout
bout,
bout, adressage
adressage via
via
indice
indice ou
ou pointeur
pointeur

TABLEAU
TABLEAU
11 dimension,
dimension,
22 dimensions,
dimensions,
33 dimensions
dimensions
ou
ou plus
plus

LISTES
LISTES
chanage
chanage
simple
simple ou
ou
double
double

PILE
PILE
o
o lon
lon entre
entre et
et
sort
sort par
par le
le
sommet
sommet (tte)
(tte)
157 / 232

Structures de donnes hirarchiques


et complexes (non-linaires)

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Structures de donnes non-linaires


Voici les parties que nous
allons aborder
Les graphes.
Les arbres.

159 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Dfinition


Quest-ce quun graphe ?

Au niveau le plus lmentaire, un graphe est une structure de


donnes compose dun ensemble de sommets et dun ensemble
de relations entre ces sommets.
Un graphe est au minimum une paire densembles :
G = (S, L)

S est lensemble des sommets


L est lensemble des liens entre sommets.

Vision largie :

G = (S, A) avec |S|=n et |A|=m

A est un ensemble de couples dlments de S, ces couples sont


appels artes (ou arcs).

un ensemble dattributs pour chaque sommet


un ensemble dattributs pour chaque arte (ou arcs).

ces attributs sont propres au systme modlis par le graphe et


interviennent dans la rsolution du problme pos :
sommet : nom, couleur, poids, concentration, etc.
arte : nom, distance, cot, temprature, etc.

160 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Dfinition


Quest-ce quun graphe ?

Au niveau le plus lmentaire, un graphe est une structure de


donnes compose dun ensemble de sommets et dun ensemble
de relations entre ces sommets.
Un graphe est un triplet (S, A, inc), o

un ensemble fini S d'objets appels "sommets",


un ensemble A de relations entre ces sommets.
A est un ensemble de couples dlments de S (paires de sommets), ces
couples sont appels artes (ou arcs),
inc est une fonction inc : S P(A) telle que
a A |{s S, a inc(s)}| {1, 2}

inc(s) = ensemble des artes incidentes (= qui "touchent") au sommet s.


161 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Interprtation de la dfinition


Exemple : liaisons ariennes entre aroports
internationaux

on dcrit chaque aroport (= sommet) desservie,


on dcrit les lignes (= artes) vers ou depuis chaque
aroport.

Par exemple : Aroport de Libreville, liaison AF977 ou GY806


(vers Paris).

La fonction inc est applique un sommet et renvoie


l'ensemble des artes qui "touchent" le sommet.
La proprit de inc : S P(A) pour forcer une arte
avoir une ou deux extrmits est :
a A |{s S, a inc(s)}| {1, 2}
162 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Deux types de graphes


Graphe orient:

Un graphe orient reprsente une relation non


symtrique
O A est un ensemble fini de couples de sommets
appels "arcs" (ordonn)

Graphe non orient:

Un graphe non orient reprsente une relation


symtrique
O A est un ensemble fini de paires de sommets et
ou de singletons appels "artes"
On reprsente un graphe non orient par un dessin,
dans lequel les artes n'ont pas de flche.
163 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple de graphe simple


Soit le couple (S, A) est un graphe orient avec

S = {1,2,3,4,5,6}
A = {(1;2),(1;3),(2;3),(3;1),(3;4),(4;3),(5;6),(6;5),(6;6)}.

164 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple de graphe orient : parents


Ensemble : toutes les personnes assistant un repas de
Nol. On recherche le lien de parent
Relation : l'ensemble des couples de personnes (p1, p2)
tels que p1 a pour parent p2.
Reprsentation graphique (relation non symtrique,
graphe orient) :
Jacques
Isabelle
Jean

Mme question pour


Jacques.

Luc

Anne
Olivier

Marie

Qui sont les parents de


Anne ?

Ajouter une fille Pierre

Pierre
165 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple de graphe non orient : cousins


Ensemble : toutes les personnes assistant un repas de
Nol.
Relation : l'ensemble des couples de personnes (p1, p2)
tels que p1 est un cousin de p2 (relation symtrique).
Reprsentation graphique (relation symtrique, graphe
non orient) :
Jacques
Isabelle
Jean

En utilisant le graphe des


parents complter le
graphe des cousins.

Luc
Anne
Olivier

Marie

Pierre
166 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Exemple de graphe non orient : molcule


Ensemble : les atomes
de la molcule de
cafine.
Relation : l'ensemble
des couples d'atomes
partageant au moins
un lectron (liaison
covalente, relation
symtrique)

167 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Terminologie (1)


(s, s') est un arc de s vers s' not s s'

s est l'origine de l'arc (s, s') et s' son extrmit


s est un prdcesseur de s; s' est un successeur de s

{s, s'} est une arte reliant s et s'

s et s' sont les extrmits de l'arte


s est un prdcesseur de s; s' est un successeur de s

De plus, si s = s, on dit que (s, s') (resp. {s, s'} ) est une
boucle
Deux sommets sont voisins si ce sont les extrmits
dune mme arte (arc).
Le degr d'un sommet s, not d(s), est le nombre de brins
d'artes ayant s comme extrmit.
Une boucle compte deux fois.
Attention ! Le degr de s nest pas le nombre de voisins de s.

168 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Terminologie (2)


graphe orient, non orient
tant donn un graphe orient on appelle
graphe non orient sous-jacent
le graphe non orient obtenu en oubliant l'orientation des arcs

graphe tiquet :
les sommets du graphe portent une information
appele "tiquette" du sommet

graphe valu (ou pondr) :


chaque arte (arc) du graphe on associe un nombre
appel le "cot" ou le "poids" de l'arte (arc)
169 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Terminologie (3)


Chemin (resp. Chane)
Un chemin de s s dans G est une suite de sommets (s0, s1, . . . ,
sk) o deux lments successifs sont relis par une arc (resp.
une arte) telle que s0 = s, sk = s, et (si , si+1) A(G) pour tout i
{0, . . . , k 1}
La longueur du chemin est le nombre darcs qui le compose, ici k.
chemin lmentaire
chemin dont tous les sommets sont distincts

Circuit (resp. Cycle)


chemin de longueur non nulle reliant un sommet lui-mme

Accessibilit
Un graphe est accessible sil existe un chemin de s s dans G,
NON sinon
170 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Connexit


La connexit exprime la possibilit d'aller de n'importe
quel sommet du graphe n'importe quel autre sommet
du graphe.
Formellement, un graphe G est connexe si et seulement si
s,s S(G), il existe une chane entre s et s.
un graphe orient est fortement connexe si tout couple de
sommets distincts est reli par un chemin
un graphe non orient est connexe si toute paire de sommets
distincts est relie par une chane

composante fortement connexe (resp. connexe)

un sous-graphe d'un graphe orient (non orient) est une


composante fortement connexe (resp. connexe)
s'il est fortement connexe (resp. connexe)
et s'il est maximal.

171 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Pourquoi faire ?


Pour la modlisation de problmes
Les graphes sont des objets permettant de
reprsenter plusieurs situations de la vie courante.
Des problmes de la vie courante se traduisent en questions
rsoudre sur les graphes.
Le dveloppement d'algorithmes sur les graphes permet
donc de rpondre des problmes concrets et pratiques.
Cela permet aussi de relguer la rsolution de ces
problmes des systmes informatiss.

172 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Pourquoi faire ?


Pour les problmes de parcours
Les graphes permettent de modliser des voies de
communication :
les sommets reprsentent des villes,
les artes reprsentent des routes.

On peut associer chaque arte d'un tel graphe (orient s'il y a


des sens uniques) un nombre reprsentant la distance entre les
deux sommets relis.
Deux questions naturelles
Peut-on trouver un algorithme efficace pour calculer un trajet le
plus court possible entre deux villes donnes?
Peut-on trouver un algorithme efficace pour calculer un trajet le
plus court possible reliant toutes les villes?
173 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Reprsentation en machine


Usage et oprations :

Stockage.
Traitement.
Cartes : chemin le plus court, le moins chre
Hypertexte : les liens des documents htmls, le web est un
immense graphe
Ordonnancement de tches
Transaction : trafic du tlphone portable
Rseau : informatique (envoi, rception de messages)
Structure des programmes : compilateurs

Objectif :

Gain de place.
Rapidit dexcution.
Format universel.
174 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Reprsentation par tableau


Avantages
simple manipuler : tableau deux dimensions

inconvnients
ncessite le parcours dune ligne/colonne pour
connatre tous les voisins dun sommet
faible ratio taille/informations pour des graphes peu
denses
ncessit dutiliser des structures de donnes
complmentaires si informations additionnelles
(couleur, etc).
175 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les graphes : Reprsentation par liste


Avantages
voisinage directement accessible
taille fonction des informations
possibilit dintgrer des informations additionnelles
(couleur, etc).

inconvnients
dlicat manipuler
chaque structure est ddie une application donne
faible rutilisabilit des codes.

176 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres : Dfinitions


Dfinition :
Un arbre est une structure de donnes compose dun ensemble
de nuds (sommets) et organises de faon hirarchique,
partir dun nud distingu appel racine.
Cest un graphe non orient connexe sans cycle.

Proprit :
Une proprit intrinsque de la structure darbre est la
rcursivit
Les dfinitions des caractristiques des arbres (aussi bien que
les algorithmes qui manipules les arbres) scrivent trs
naturellement de manires rcursive

177 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres : Dfinitions (1)


Racine dun arbre

racine d'un arbre : un sommet r distingu


arbre enracin : un arbre qui possde une racine. Une fois la
racine dfinit tous les nuds dun arbre admettent un niveau.
une racine n'existe pas toujours

Les arborescences

une arborescence est un graphe orient ayant un sommet


particulier appel racine tel que tous les sommets de
l'arborescence sont relis la racine par un chemin unique
i.e.
une arborescence est un graphe orient dont le graphe non
orient sous-jacent est un arbre enracin
arborescence ordonne

une arborescence est ordonne si l'ensemble des successeurs de la


racine est ordonn
178 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres : Dfinition (2)


pre d'un sommet :

le prdcesseur d'un sommet

fils d'un sommet :

les successeurs d'un sommet

frres (alternant) :

des sommets qui ont le mme pre

grand-pre, anctre, descendants


les sommets sont souvent appels des nuds :

la racine = pas de pre


les feuilles ou nuds externes ou terminaux = pas de fils
les nuds internes ou non terminaux = au moins un fils

une branche :

gnralement un chemin depuis un nud racine (quelque fois


jusqu' une feuille)
179 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Mesures sur les arbres


niveau (profondeur) d'un nud :
la longueur de la branche qui la joint la racine (nombre d'arcs)

hauteur d'un nud :


la longueur de la plus longue branche de ce nud jusqu' une
feuille

la hauteur d'un arbre :


la longueur de la branche la plus longue
(la hauteur de la racine)

la taille d'un arbre :


Cest le nombre total de nuds de larbre

la longueur totale (ou la longueur totale de cheminement):


la somme des longueurs des branches issues de la racine
180 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Mesures sur les arbres


Illustrations
hauteur
racine

nud interne
b

3
e

branche
b

niveau 2
nud externe

d enfants de a

g anctres de g

d frres de b

j descendants de g
181 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires


dfinition informelle
Un arbre binaire est un arbre o chaque nud admet au plus
deux fils
Un arbre binaire possde exactement deux sous-arbres
(ventuellement vides)

dfinition rcursive (et constructive)


Un arbre binaire est
soit vide
soit compos d'une racine r et de deux arbres binaires ABG et
ABD disjoints
racine
ABG : arbre binaire gauche
ABD : arbre binaire droit
ABG
ABD
182 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires particuliers (1)


arbre binaire dgnr (filiforme)
chaque nud possde exactement un fils

arbre binaire complet (uniforme)


chaque niveau est compltement rempli
i.e. tout sommet est soit une feuille au dernier niveau, soit
possde exactement 2 fils

183 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires particuliers (2)


arbre binaire parfait (presque complet)
tous les niveaux sont compltement remplis sauf
ventuellement le dernier et dans ce cas les feuilles sont le plus
gauche possible

arbre binaire quilibr


la diffrence de hauteur entre 2 frres ne peut dpasser 1

184 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Proprits des arbres binaires


Un arbre binaire de hauteur h a un nombre de sommets
n qui vrifie :
h + 1 n 2 h+1 - 1
Un arbre binaire ayant n sommets a une hauteur h qui
vrifie :
[log 2 (n +1) ] - 1 h(A) n - 1
Utilisation : mesures de complexit
parcours de chaque nud de l'arbre en O(n)
parcours d'une branche : complexit dans le pire des cas en
O(h) = O(log n)
objectif : avoir h minimum
arbre complet ou presque ou quilibr
185 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par tableau (1)


un arbre est un tableau o sont mmoriss les nuds
La racine est le nud dindice 0
E G
a
un nud est une structure
0 a 1
3 champs
l'tiquette du nud
les indices de ses fils
gauche et droit
(ou -1 si pas de fils)

b
e

inconvnients

dfinition non rcursive


(arbre sous-arbre)

reprsentation conomique en mmoire,

utilise si l'arbre n'est jamais modifi


utilise uniquement si on traite un arbre unique

D
5

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

186 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par tableau (2)


un arbre est un tableau o sont mmoriss les nuds
Ltiquette de la racine est lindice 0
Si ltiquette dun nud est lindice i alors

a
b

ltiquette du fils gauche est lindice 2i


et ltiquette du fils droit est lindice 2i + 1

c
e

h
Tableau de 14 lment implmentant larbre ci-dessus :
0

10

11

12

13
j
187 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par curseurs


utilisation d'une variable globale de type tableau pour simuler la
mmoire o sont mmoriss les nuds :
curseurs (faux pointeurs)

un arbre est l'indice de sa racine dans le tableau


(ou -1 s'il est vide)
un nud (une case du tableau) est une structure
3 champs
l'tiquette du nud
les indices de ses fils gauche et droit
(ou -1 si pas de fils)

2 stratgies de gestion des cellules disponibles

chaner entre elles les cellules disponibles


marquer les cellules libres et parcourir le tableau pour trouver la 1re
place libre

Inconvnient : connatre lavance le nombre de nuds

188 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par curseurs


Exemples
Mmoire

Mmoire

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

0 arbre

2 arbres

A1

A2

A1

c
d
e

A2

f
g

189 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par curseurs


La structure de donnes en langage C (et algorithmique)

#define MAX_NOEUDS 20 ----> CONST: MAX_NOEUDS <-- 20 : ENTIER


/* MAX_NOEUDS est le nombre maximum de nuds dans les arbres : ceci
est un des inconvnients de cette reprsentation on doit valuer le nombre
de nuds la compilation. */

typedef int ARBIN ;


typedef struct noeud {
ELEMENT etiq;
ARBIN sag, sad ;
} NOEUD;

-------> TYPE ARBIN : ENTIER


-------> STRUCTURE noeud
etiq : ELEMENT
sag, sad : ARBIN
--------> TYPE NOEUD : noeud

extern NOEUD MEMOIRE[MAX_NOEUDS] ;


/* le tableau MEMOIRE est une variable globale qui joue le rle de mmoire
dynamique dans laquelle on va allouer des cellules disponibles (tant quil y en
a). */
#define ARBRE_VIDE -1 --------> CONST: ARBRE_VIDE <-- -1 : ENTIER
190 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par pointeurs


un arbre binaire est

soit un pointeur sur le nud racine (arbre non vide)


soit le pointeur NULL (arbre vide)

un nud est une structure trois champs (cellule


chane)

une tiquette (arbre est tiquet)


le sous-arbre gauche (not sag) et le sous-arbre droit (not sad)

avantages

dfinition rcursive
simple programmer
la plus utilise

inconvnients : consomme de la mmoire dynamique


191 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres binaires : par pointeurs


La structure de donnes en langage algorithmique
STRUCTURE noeud
etiq : ELEMENT
* sag, * sad : noeud
TYPE neoed : NOEUD

//pointeurs sur des nuds

TYPE * ARBIN : NOEUD


// l'arbre vide est le pointeur null
CONST: ARBRE_VIDE <-- NULL

La structure de donnes en langage C


typedef struct noeud {
ELEMENT etiq;
struct noeud * sag, * sad ;
} NOEUD;

/* pointeurs sur des nuds */

typedef NOEUD * ARBIN ;


/* l'arbre vide est le pointeur null */
#define ARBRE_VIDE NULL
192 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres gnraux : par tableau


un arbre gnral est un tableau qui contient
l'tiquette d'un nud et l'tiquette de son pre
indice
tiquette
pre

1
a
0

2
b
1

3
c
1

4
d
1

5
e
1

6
f
2

7
g
5

8
h
5

193 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres gnraux : par listes des fils


un arbre gnral est la donne
de l'tiquette de sa racine
de la liste de ses fils reprsente
par tableau,
par pointeurs,
par curseurs

194 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : Tableau


un arbre est un pointeur sur une structure compose de
2 champs :
un tableau de nuds
indice de la racine dans le tableau

un nud est une structure deux champs


l'tiquette de la racine
la liste de ses fils

la liste des fils est une liste simplement chane sans


en-tte des indices dans le tableau des fils
la liste des fils est un pointeur sur une cellule deux champs
un entier (lindice du nud) dans le tableau
un pointeur sur la cellule suivante
195 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : Tableau


la liste des fils est un pointeur sur une cellule deux champs
1

10 11 12 13 14 15 16

m n

MonArbre

a
c

b
h

c
d

h
g

i
j

196 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : Pointeurs


un arbre est un pointeur sur une structure forme
de l'tiquette de la racine
et de la liste de ses fils

une liste d'arbre est un pointeur sur une cellule


compose
a
d'un arbre
et d'un pointeur sur la cellule
b
suivante.
a
b
e

c
f

*
c

d
*

d
g

*
g
197 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : Pointeurs


Structure de donnes :
un nud est une structure forme
de l'tiquette du nud
et de la liste de ses fils

une listes d'arbres est une liste chane de cellules


une cellule est compose
d'un pointeur sur un nud
et d'un pointeur sur la cellule suivante

un arbre est
Ide n 1 : un pointeur sur un nud
Ide n 2 : un pointeur sur une cellule
198 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : par pointeurs


Ide n1
Un noeud

MonArbre

fils suivant

Une Cellule

a
tiquette listeFils

a
b
b

d
*

g
MonSous-Arbre

*
199 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : par pointeurs


La structure de donnes
en langage C (ide n1)

La structure de donnes
en langage algorithmique

typedef struct cell {


struct arb *cell ;
struct cell *
suivant ;
} *LISTEDARBRES ;

STRUCTURE cell
* cell : arb
* suivant : cell
TYPE * LISTEDARBRES :
cell

typedef struct arb {


ELEMENT etiquette ;
LISTEDARBRES
listeDesFils ;
} *ARBRE ;

STRUCTURE arb
etiquette : ELEMENT
listeDesFils :
LISTEDARBRES
TYPE *ARBRE : arb

200 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : par pointeurs


Ide n2
Une Cellule

MonArbre
Un noeud

fils suivant

Une Cellule

a
a

tiquette listeFils

b
b

d
*

g
MonSous-Arbre

*
201 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : par pointeurs


La structure de donnes
en C (ide n2)
typedef struct cell {
struct noeud *fils ;
struct cell *
suivant ;
} CELLULE, * ARBRE ;
typedef struct noeud {
ELEMENT etiquette ;
ARBRE listeDesFils ;
} NOEUD ;

La structure de donnes
en langage algorithmique
STRUCTURE cell
* fils : noeud
* suivant : cell
TYPE * ARBRES : cell
STRUCTURE noeud
etiquette : ELEMENT
listeDesFils :
ARBRES
TYPE NOEUD : noeud

202 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Arbres par listes des fils : Tableau de pointeurs


quand on connat le nombre maximum de fils (k)
un arbre est un pointeur sur une structure k + 1
champs
l' tiquette de la racine
le premier sous-arbre, le deuxime... le nime

203 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres gnraux : par arbre binaire


reprsentation par premier fils et frre droit
un arbre est reprsent par une structure trois
champs
l'tiquette de la racine
le premier fils de la racine
le frre droit de la racine

tous les arbres


n-aires peuvent tre
reprsents par des
arbres binaires

204 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Les arbres gnraux : par arbre binaire


Exemple
a
b

c
d

a
h
g

b
l

i
j

c
d

h
g

i
j

Lien premier fils


Lien frre droit
205 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Parcourir un arbre ?
Parcours :
examiner les nuds dun arbre pour effectuer un traitement

2 types de parcours classiques sur les arbres binaires


en profondeur main gauche
(rcursif par nature)

en largeur
(itratif par nature)

206 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Parcours en profondeur main gauche


chemin qui descend toujours le plus gauche possible
chaque nud est rencontr 3 fois
1.
2.

3.

la descente avant la visite du sous-arbre gauche


on applique au nud le traitement 1
Aprs la visite du sous-arbre gauche et avant de descendre
dans le sous-arbre droit
on applique au nud le traitement 2
(et dernire fois) quand les deux sous-arbres ont t
parcourus, en remontant droite
on applique au nud le traitement 3

si l'arbre est vide on lui applique un traitement


appel terminaison
207 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Parcours itratif en profondeur main gauche


ide : une pile mmorisant le nud courant et la
direction future
1. descente ( gauche du nud, 1er passage)
effectuer le traitement 1 sur la racine

empiler le nud et la direction future (descendre droite,


2ime passage)

2. descendre gauche sur le sous-arbre gauche

remonte gauche (2ime passage)


effectuer le traitement 2 sur la racine
empiler le nud et la direction future (remonter droite,
3ime passage)
descendre gauche sur le sous-arbre droit

3. remonte droite (3ime passage)


effectuer le traitement 3 sur la racine

dpiler le nud et le sens de la visite sur ce nud

208 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Parcours en largeur (hirarchique, par niveau)


stratgie pas du tout rcursive
traitement des nuds par niveau :
traiter les frres avant les fils

dans la reprsentation graphique :


1. de gauche droite
2. de haut vers le bas

utilisation d'une file

on traite un nud
on fait entrer dans la file
dabord son fils gauche
puis son fils droit

209 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Mesure de la complexit sur les arbres


Algorithmes de parcours

Parcours de tous les sommets : en O(n)


n nombre de sommets (taille de larbre)

Parcours d'une branche : en O(h)


h hauteur de l'arbre

On est souvent amen minimiser la hauteur de larbre

Complexit des oprations

construire un arbre binaire est en O(n)


modifier en O(1)
dtruire est

en O(n) : pointeurs, par curseurs (faux pointeurs)


en O(1) : cellules contigus (tableau)

test et accs sont en O(1)

210 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Pause-rflexion sur cette partie


Avez-vous des questions ?

211 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Merci de votre attention


licier
o
p
n
a
n rom t comme
u
'
d
n
i
c'es r la
la f
,
e
r
r
i
e
v
L
i

arr
four de
y
t
'
i
u
d
c
t
s
avan nger un bi lant tout
s il
de ma e coco en al coco : apr
noix d la noix de jeter le
suite te plus qu'
ne res .
biscuit
verte
e
n
g
i
l
La
----Kin g
n
e
h
p
e
St
-----

212 / 232

Programmation

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Comment crire correctement un programme


Rgle empirique des 90-10 (80-20)
Un programme passe 90 % de son temps sur 10 % du code.

Sur ces 10 % l'efficacit est cruciale :


chercher optimiser le code
s'intresser la reprsentation interne

Pour le reste du programme


les autres critres sont primordiaux :
lisibilit, maintenabilit etc.

rester un niveau d'abstraction lev.

214 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Comment crire correctement un programme


Rgles de lisibilit respecter
1. Commencez par dcrire en franais lorganisation gnrale de
votre programme
2. crivez des fonctions courtes (entre 1 et 20 lignes)
3. Commentez les prototypes des fonctions (paramtres, valeur de
retour, rle de la fonction, astuces ventuelles)
4. Utilisez les fichiers den-ttes
5. Soyez cohrents dans les identificateurs que vous dfinissez
6. Respectez les rgles de base de la programmation structure
nutilisez pas de variables globales, ni de goto, ni de break, ni
dexit, ni de return dans une boucle
(sauf exception justifier imprativement)

215 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Le prprocesseur cpp
Inclusion de fichier source
Rle : permet d'importer, depuis un fichier source, dans
tout module qui en a besoin, des
dfinitions de types (classes, . . . ), constantes
dclarations de fonctions et procdures

Syntaxe :
#include "chemin_acces_fichier_a_inclure"
(par exemple dans le rpertoire de travail)

#include <nom_de_fichier_public>
recherche du fichier inclure dans le(s) rpertoire(s)
standard
Exemple UNIX : /usr/include /usr/include/sys
216 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Le prprocesseur cpp

Substitution d'identificateurs
peu utile en C++, viter!
Rle :

dfinition d'identificateurs pour traduction conditionnelle


macro-instructions

Syntaxe :
#define identificateur chaine_de_caractres
Exemples
#define boucle for( ; ;)
#define _MODULEH

#define macro(param1,param2) chaine


Exemple :
#define Afficher(a,b) std :: cout << (a) << (b)
217 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Le prprocesseur cpp

Traduction conditionnelle
Rle:

Aides la mise au point


Eviter les inclusions multiples de fichier
Gestion de versions

Syntaxe :
#ifdef identificateur
phrases ou directives C/C++
#endif
Exemples :
macro assert (condition) ;
#ifdef DEBUG
cout << "Mise au point : x =" << x << endl;
#endif

218 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Types construits
partir des types prdfinis du C (caractres, entiers,
flottants), on peut crer de nouveaux types, appels types
construits, qui permettent de reprsenter des ensembles de
donnes organises.
Les tableaux
Les structures
Les unions
Les numrations
Les constructeurs de type

219 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Types structures
Une structure est une suite finie dobjets de types diffrents.
Contrairement aux tableaux, les diffrents lments dune
structure noccupent pas ncessairement des zones contigus en
mmoire.
Chaque lment de la structure, appel membre ou champ, est
dsign par un identificateur.
Deux manires quivalentes de dfinir une variable z complexe:
struct complexe {
double reelle;
double imaginaire;
} z;

struct complexe {
double reelle;
double imaginaire;
};
struct complexe z;

norme=sqrt(z.reelle*z.reelle+z.imaginaire*z.imaginaire);

220 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Les constructeurs de type
Synthaxe

typedef declaration_de_variable;
typedef nom_type_existant nouveau_nom;

Le nom utilis pour la dclaration est le nom du nouveau type


dfini.
Exemples :
typedef unsigned int nombrePositif;
typedef std::map lexique;
typedef struct {
int x,y;
} point;

Utilisation :

point mon_point;
mon_point.x = 5;
nombrePositif n=3;
221 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Les entres/sorties en C/C++

Traduction de "LIRE et "ECRIRE" de lalgorithmique


cout: permet dafficher un message lcran

Exemple : cout << "bienvenue"


Exemple : cout << "bienvenue" << a << endl;
La constante endl permet de passer la ligne

cin: permet de rcuperer une valeur fournie par lutilisateur


Exemple : cin >> nom_de_variable
Exemple : cin >> a >> b >> c;
Saisie de plusieurs vakeurs la suite (ici les 3 variables a, b et c)

Attention:

<< pour cout (du programme vers lcran)


>> pour cin (du clavier vers le programme)
222 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Les commentaires
Objectifs

Expliquer comment fonctionne le programme


Justifier les choix qui ont t faits
Sy retrouve quand on reprend un programme

Bloc de commentaires sur plusieurs lignes dlimits


par /* et */ : exemple
/* blablabla
ici on calcul*/

Commentaire en fin de ligne


// commentaire

utiliser sans modrations!!


223 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Correspondance de types et dclaration de variables
criture en langage C
int v;
float x;
double lx;
bool b;
char c;
int tab[10];

criture algorithmique
v
: ENTIER
x
: REEL
lx : REEL
b
: BOOLEEN
c
: CARACTERE
tab[10] : ENTIER

Instruction simple
Expression ; (; la fin de chaque instruction simple)
LExpression est gnralement une affectation (mise en
mmoire)
x = 3.0;
224 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Traduction des structures de contrle
criture en langage C
if(Condition){
Action(s)1
}
else {
Action(s)2
}
while(Condition){
Action(s)
}
do {
Action(s)
}
while(Condition);

criture algorithmique
SIALORSSINONFINSI

TANTQUEFAIREFINTANTQUE

REPETERTANTQUE

Attention ne pas mettre de ;


aprs la condition des structures
sauf la fin du do
225 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Traduction des structures de contrle
criture en langage C

for(Instruction1;
Condition;
Instruction2){
Action(s)
}
switch(Expression){
cas expr1:
Action(s)1;
break;
cas expr2:
Action(s)2;
break;

default:
Action(s) par dfaut;
}

criture algorithmique
POURFAIREFINPOUR

CASPARMIPARDEFAUT
FINCASPARMI

break permet de sortir du


switch ; sinon on continue
excuter la ligne suivante
default : au cas o lexpression
ne prendrait aucune des valeurs
dfinies
226 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Notion de base du langage C/C++


Expressions
entires

types : int short long


oprations arithmtiques : +, -, *, /, % (modulo)

relles

types : float (stockage) double (calcul avec prcision)


oprations arithmtiques : +, -, *, /

Oprateurs relationnels
galits

gal : == (sauf pour les rels); diffrent : !=

comparaisons

inf. gal : <= strict. inf. : < sup. gal : >= strict. sup. : >

logiques

et : && (et commercial) ou : || (pipe) non : !


227 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Processus de compilation dun programme en C/C++


Fichiers
Fichiersden-tte
den-tte
C/C++
C/C++

Fichiers
Fichierssources
sources
C/C++
C/C++

1. Prprocesseur

.h

.c

cc
cc(gcc,
(gcc,g++,
g++,)
)enchanent
enchanentles
les
oprations
en
fonction
:
oprations en fonction :

des
desoptions
optionsde
delalacommande:
commande:
-E
:
tape
1
-E : tape 1
-S
-S: :tapes
tapes1-2
1-2
-c
:
tapes
1-2-3
-c : tapes 1-2-3
dfaut
dfaut: :tapes
tapes1-2-3-4
1-2-3-4
-0
:
optimisation
-0 : optimisationdans
dansl'tape
l'tape22

etetdes
dessuffixes
suffixesdes
desfichiers
fichiers
traiter:
traiter:
.c
.c.cpp
.cpp.o
.o

.cpp

Code pr-process
2. Compilateur
3. Assembleur

Fichier(s)
Fichier(s)Objet
Objet
.o

Fichier(s)
Fichier(s)
librairies
librairies
.lib
4. Editeur de liens

.so
Fichier(s)
Fichier(s)
excutable(s)
excutable(s)
a.out

.exe
228 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Outils Freewares complets de programmation


Lensemble dutilitaires de dveloppement complet
MinGW : Minimal GNU for Windows

fournit le compilateur GNU C/C++


http://www.mingw.org/download.shtml

Msys : Minimal SYStem

fournit un environnement UNIX de base pour Windows


http://www.mingw.org/download.shtml

Notepad++

Environnement graphique ddition qui prend en charge plusieurs langages


http://notepad-plus-plus.org/download/v6.1.2.html

Dev-C++

Environnement de dveloppement complet en C/C++ pour Windows


http://www.bloodshed.net/dev/devcpp.html

Intgre lenvironnement de compilation MinGW


wxDev-C++ une extension au projet Dev-C++ pour dveloppement des
interface graphique avec wxWidgets
http://wxdsgn.sourceforge.net/

229 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Loutil linux ubuntu


Dans lensemble les pros de la programmation (en
particulier du calcul scientifique) travaillent sous Unix
Laccs aux bibliothques y est plus simple

LOS Mac est construit sur un Berkeley unix


Donc pas la peine de mettre ubuntu

Sur PC le plus simple est dinstaller ubuntu avec


virtualMachine, une application windows qui met ubuntu
dans un dossier distinct et sans partitionner le disque

Installer la dernire version de ubuntu


Ouvrir une fentre terminal dans ubuntu et taper g++ puis faire
ce qui est demand (sudo install)
Idem en tapant javac (installer le jdk)
Tlcharger avec le firefox de ubuntu la version Helios de
Eclipse C/C++, de-zipper et tester (voir plus bas)
230 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Lenvironnement de travail Eclipse


Eclipse est trs populaire en entreprise.
Multi plateforme et gratuit mais suppose que gcc
(compilateur C/C++) et un java (compilateur) soient dj
installs
Ecrit en java et mme portable sur une clef USB
Signal les erreurs de syntaxe clairement
Permet de profiter pleinement du debuggeur gdb
Permet de grer des makefiles complexes (en calcul
parallle entre autre)
Diminue le temps de dveloppement

231 / 232

Algorithmique et Structure de donnes


Dr. Bienvenu FASSINUT-MOMBOT

Lenvironnement de travail Eclipse


Pour tester un programme

Crer un projet par le menu File/New C++ Project


Choisir Hello World C++ Project puis Project name : HelloWord
Faire Next plutt que Finish

Puis cliquer sur le marteau puis sur la flche blanche dans le rond vert
232 / 232