Vous êtes sur la page 1sur 147

COURS DE

PROGRAMMATION
ORIENTEE OBJET :
Types Abstraits de Donnes
TAD
1

Types Abstraits de Donnes(TAD)

Les TAD sont ns des problmes lis au


dveloppement dapplications:
matriser la complexit -> modularit
rutiliser du code existant -> fournir des
solutions pour des familles de problmes
(bibliothques usage gnrale).
traiter des problmes de haut niveau en
saffranchissant des problmes de niveau
infrieur dj rsolus -> abstraction des
donnes.
2

Donnes(TAD)

Les principes de conception


Modularit
Abstraction des donnes
Encapsulation
3

Donnes(TAD)
Ide directrice
Parallle avec les types primitifs

Le type int : reprsente un entier,


est fourni avec des oprations : + - /
* %.
Il nest pas ncessaire de connatre la
reprsentation interne ou les
algorithmes de ces oprations pour
les utiliser.
4

Donnes(TAD)
Ide directrice
Faire de mme pour des types plus
complexes indpendamment dun

langage de programmation
Crer un type, dont la reprsentation
interne est cache.
Offrir les oprations de haut niveau
ncessaires.
5

Donnes(TAD)
Dfinition
Un TAD est
un type de donnes
lensemble des oprations
permettant de grer ces donnes
les dtails de limplantation restant
cachs

Donnes(TAD)
Exemple : le TAD liste
Type LISTE
Utilise Element, Boolean, Place

Les oprations :
Constructeurs
Creer:
=>Liste (cre une liste vide)
Ajouter:
Element Liste => Liste
AjouterPos:
Element Liste Place => Liste

Donnes(TAD)
Exemple : le TAD liste
Selecteurs
tete : Liste => Element
queue : Liste=>Liste
longueur : Liste=> Element
estVide : Liste => Boolean

Modificateurs
Enlever : Liste Place =>
Liste
Modifier :
Liste Place Element =>
Liste
8

Donnes(TAD)
Ralisation dun TAD

Dfinition : Une structure de donnes


est une construction du langage de
programmation permettant de
reprsenter un TAD.
Exemple : On peut utiliser comme
structure de donnes un tableau pour
implanter une liste.
9

Donnes(TAD)
Intgration du principe de
lencapsulation:
On pourra construire plusieurs structures de
donnes pour un mme TAD.
Un TAD peut tre vu comme un fournisseur de
services sur un sujet prcis (vecteurs,
listes) concrtis par une structure de
donnes approprie
10

Donnes(TAD)
Ralisation dun TAD en Java

Java fournit les mcanismes suivants:

Classes
Exceptions
Gnricit

11

Donnes(TAD)
Ralisation dun TAD en Java
Classes
Masquage de la structure interne du TAD :

Visibilit prive pour les attributs de la classe


dcrivant la structure de donne choisie.
Visibilit publique pour les mthodes.

Exceptions
Permettent une gestion de erreurs pouvant
survenir lors de lutilisation dun TAD.

12

Donnes(TAD)
Ralisation dun TAD en Java
Gnricit

Avant la JDK5.0, la gnricit consiste crire


du code en utilisant la classe Object.
Inconvnient : possibilit dajouter la
structure des lments de diffrents types ->
structures de donnes non homognes.
Depuis la JDK5.0, Java propose une gestion de
types gnriques permettant de contrler le
type de lments insrs.

13

Donnes(TAD)
Spcification dun TAD en Java
Java propose le concept dinterface
Degr dabstraction plus lev.
Dfinition formelle dun TAD.
Dclaration des mthodes de manire
abstraite.
La classe qui implante linterface

encapsule la structure de donnes choisie et


fournit le code des mthodes dclares dans
linterface.
14

Donnes(TAD)
Il existe diffrentes familles de types de
donnes abstraits.
Nous allons nous intresser aux Types
Abstraits de Donnes dcrivant les
organisations complexes (containers).

15

Donnes(TAD)
Exemples:
1. Gestion dun annuaire :
Insertion de personnes
Suppression de personnes
Recherche de personnes suivant leur nom

2. Gestion dune file dattente:


Ajouter des personnes en fin de file
Traiter la personne en dbut de file

16

Donnes(TAD)
Les objectifs :
Dfinir les diffrents types densembles
dynamiques.
Prsenter les techniques permettant de les
implanter efficacement en fonction du
problme.

17

Donnes(TAD)

Les oprations sur un TAD sont de


quatre types :

Constructeurs
Modificateurs
Slecteurs
Itrateurs

Autres dnominations : Constructeurs/Extenseurs


18

Donnes(TAD)

Plan dtude
A) Les structures linaires
B) Les arbres
C) Les ensembles
D) Les tables

19

A Les structures linaires

1.
2.
3.
4.
5.
6.

Les listes
Le TAD liste
Le TAD pile
Le TAD file
Le TAD file de priorits
Implmentation en Java

20

1 - Les listes
Gnralits
Dfinition: Une liste est forme dune
squence dlments dun type donn, dont le
nombre peut tre born ou illimit.
Exemples : liste de passage un examen, file
dattente un guichet.
Une liste pourra tre trie ou non.
21

1 - Les listes

Deux structures de donnes pour


implmenter une liste:
1. Implmentation statique par un tableau
2. Implmentation dynamique par une liste
chane

22

1 - Les listes

Implmentation par un tableau


Reprsentation
1

2
3
info1 info2 info3
dbut
fin

taille

Oblige faire une estimation du nombre


maximum dlments dans la liste.
Entrane des temps de calculs importants
pour raliser les insertions et les
suppressions [ou tableau chainage]
23

1 - Les listes

Implantation par une liste chane


Une liste chane est une structure de
donnes dans laquelle les objets sont
arrangs linairement.
Chaque lment de la liste devra indiquer
ladresse de llment suivant.
Un lment est donc reprsent par un
couple compos dune information et
dune adresse, appel cellule.
24

1 - Les listes
Implantation par une liste chane
Une liste chane est constitue dun ensemble de
cellules chanes entre elles.
Cest ladresse de la premire cellule qui
dtermine la liste
liste

25

1 - Les listes
Implantation par une liste chane
Allocation dynamique la demande. Les lments
sont disperss en mmoire centrale.
Pas de dplacement des lments en cas
dinsertion ou de suppression.
a

Suppression de llment c
a

Insertion dun lment x

26

1 - Les listes

Accs aux lments dune liste


Comment caractriser les oprations sur les
listes?
La recherche dun lment dont on connat une
partie de linformation : pas dambigut
Linsertion, la suppression et la consultation
ncessitent la mention de la position o
seffectue lopration.

27

1 - Les listes
Accs aux lments dune liste
Il existe plusieurs TAD classiques suivant les types
dinsertion et de suppression choisis :
1. Liste : rien de dfini
2. Pile (LIFO) : insertion et suppression la fin.
3. File (FIFO) : suppression au dbut, insertion la fin.
4. File de priorit : insertion suivant un critre
dordre, suppression au dbut.

28

2 TAD liste

Les oprations
Constructeur
Crer une liste vide

Modificateurs
Insrer une valeur au dbut dune liste
Supprimer un lment dune liste
Supprimer tous les lments dune liste

29

2 TAD liste

Les oprations
Slecteurs

Savoir si une liste est vide


Obtenir la longueur dune liste
Dterminer la valeur du dbut dune liste
Rechercher un lment dans une liste
Vrifier si une liste est gale une autre liste

30

3 - TAD pile
Dfinition: Une pile est une liste pour laquelle
linsertion et la suppression ont lieu toutes les
deux au sommet.
Empiler [PUSH]
(insrer)

Dpiler [POP]
(supprimer)
Sommet de la pile

Analogie avec la pile dassiettes


Applications :

Analyse des expressions par un compilateur


Allocation de la mmoire pour les variables locales lors
de lexcution des procdures
31

3 - TAD pile

Les oprations
Constructeur
Crer une pile vide

Modificateurs
Empiler une valeur au sommet de la pile (push)
Dsempiler (pop)
Supprimer tous les lments

32

3 - TAD pile

Les oprations
Slecteur

Savoir si une pile est vide


Obtenir la longueur dune pile
Dterminer la valeur du sommet dune pile
Vrifier si une pile est gale une autre pile

33

3 - TAD pile
Application 1:
Ecrire un algorithme qui vrifie quun texte contenant
des caractres standards est syntaxiquement correct
du point de vue des parenthses.
Les parenthses sont de trois types : (, {, [ et leurs
parenthses fermantes correspondantes sont
respectivement ), }, ].
La correction syntaxique implique qu chaque
parenthse ouvrante corresponde une parenthse
fermante du mme type, plus loin dans le texte.
Le texte compris entre ces deux parenthses devra
galement tre correct du point de vue des
parenthses.
34

3 - TAD pile

Application 1: Solution
Donnes : c un tableau de N caractres qui contient le texte.
Algorithme : crer une pile de caractres p vide.
pour i = 0 N-1 faire
si (c[i] est une parenthse ouvrante) alors p.empiler(c[i])
sinon si (c[i] est une parenthse fermante) {
si (p.estVide()) {
stop erreur : il manque une parenthse ouvrante
}
si (p.sommet() est du mme type que c[i]) {
p.depiler()
} sinon {
stop erreur : la parenthse fermante nest pas du bon type
}
finsi
finsi
finsi
finPour
si (p.estVide()) alors afficher la syntaxe est correcte
sinon afficher il manque une parenthse fermante
finsi
35

3 - TAD pile

Application 2:
Les piles sont utilises pour implmenter la
rcursivit par les langages de programmation.
Chaque langage, autorisant la rcursivit,utilise une
pile denregistrements actifs pour enregistrer les
informations relatives chaque procdure active du
programme.

36

3 - TAD pile
Application 2: Utilisation des piles par la

JVM en cas dappels rcursifs dune mthode:


La JVM garde en mmoire la chane des mthodes
actives dans une pile.
Quand une mthode est appele, la JVM empile
un cadre contenant les variables locales, les
valeurs retourner et ladresse de retour, i.e. le
point o cette mthode a t appele par la
mthode appelante.
Quand une mthode est termine, son cadre est
retir de la pile et le contrle est pass la
nouvelle mthode du haut de la pile au point
indiqu par ladresse de retour.
37

4 - TAD File
Dfinition : Une file est une liste pour laquelle
linsertion a lieu la fin (dpt) et la
suppression ( prlvement) au dbut.
prlever

dposer
tte de la file

fin de la file

Analogie avec une file dattente


Applications :Une file sera utilise quand il
faudra grer lallocation dune ressource
plusieurs clients.
File dimpression
Simulation de files relles (guichet, trafic
automobile)

38

4 - TAD File

Les oprations
Constructeur
Crer une file vide

Modificateurs
Dposer une valeur la fin de la file
Prlever la valeur de dbut de la file
Effacer tous les lments de la file

39

4 - TAD File

Les oprations
Slecteur

Savoir si une file est vide


Obtenir la longueur dune file
Dterminer la valeur du dbut dune file
Vrifier si une file est gale une autre file

40

5 - TAD File de priorits


Dfinition : Une file de priorits est une

file pour laquelle


le dpt a lieu en fonction dun critre
dordre appel priorit de la file.
Le prlvement est tel que llment avec
la priorit la plus leve est le premier
sortir.

La file est donc toujours trie selon le


critre de priorit.
41

5 - TAD File de priorits


Applications: Ce type de file est

largement utilis dans les systmes


informatiss.
Si plusieurs ordinateurs connects une
mme imprimante lancent des tches
dimpression en mme temps, on peut
dcider dtablir un ordre de passage
suivant la taille du document.

42

5 - TAD File de priorits


Les oprations : Par rapport une file,
seul le dpt change.
llment de fin peut tre supprim car il
ne joue aucun rle particulier.

43

5 - TAD File de priorits

Complexit :
Comme le dpt dpend des lments dj
prsents dans la file de priorits, la complexit
est O(n2).
Cette complexit peut tre abaisse O(nlog(n))
en utilisant un tas qui est une structure de
donnes arborescente.

44

6 Implmentation en Java
Spcification du TAD liste
package listes;
public interface Liste {
//modificateur
void insererAuDebut(Object element);
void effacer();
boolean effacerElement(Object element);
//selecteurs
boolean estVide();
int longueur();
Object tete() throws ListeVideException;
boolean rechercher (Object element);
boolean equals(Object o);
}

45

6 Implmentation en Java

Le TAD liste peut tre implanter laide


de deux structures de donnes :
Un tableau
Une structure chane

46

6 Implmentation en Java
Implantation avec une structure chane
package listes;
class Noeud{
protected Object valeur;
protected Noeud suivant;
public Noeud(){ }
public Noeud (Object o){
this.valeur = o;
this.suivant=null;
}
//construire un noeud par copie
public Noeud (Noeud n){
this.valeur = n.valeur;
this.suivant=n.suivant;
}
}

47

6 Implmentation en Java
public class ListeChainee implements Liste{
private Noeud tete;
private int longueur;
//constructeurs
public ListeChainee() {
tete = null;
longueur =0;
}
public ListeChainee(ListeChainee listeSource){
tete = listeSource.tete;
longueur =listeSource.longueur;
}
...

48

6 Implmentation en Java
//modificateurs
public void insererAuDebut (Object element) {
Noeud nouveau = new Noeud (element);
nouveau.suivant = tete;
tete = nouveau;
longueur ++;
}
public void effacer () {
tete = null;
longueur=0;
}

49

6 Implmentation en Java
public boolean effacerElement( Object element ) {
Noeud courant = this.tete;
Noeud precedent = null;
while (courant != null){
if ((courant.valeur).equals(element)){
longueur--;
if (courant == tete){
tete = courant.suivant;
return true;
} else {
precedent.suivant = courant.suivant;
return true;
}
} else {
precedent = courant;
courant = courant.suivant;}
}
return false; //lment non trouv
}

50

6 Implmentation en Java
//slecteurs
public boolean equals(Object o) {
if (o==this)
return true;
if (o==null)
return false;
if (o.getClass() != this.getClass())
return false;
...

51

6 Implmentation en Java
ListeChainee liste = (ListeChainee) o;
if (liste.longueur() != this.longueur())
return false;
Noeud courant1 = liste.tete;
Noeud courant2 = this.tete;
while (courant1 != null){
if(!
courant1.valeur.equals(courant2.valeur))
return false;
courant1 = courant1.suivant;
courant2 = courant2.suivant;
}
return true;

}//fin de la mthode equals


52

6 Implmentation en Java
public boolean rechercher(Object o) {
Noeud courant = this.tete;
while (courant != null){
if ((courant.valeur).equals(o))
return true;
else
courant = courant.suivant;
}
return false;
}

53

6 Implmentation en Java
public boolean estVide() {
return (this.tete == null);
}
public int longueur() {
return longueur;
}
public Object tete()
throws ListeVideException {
if (estVide())
throw new ListeVideException();
return tete.valeur;
}
54

6 Implmentation en Java
public String toString(){
String s ="[";
Noeud courant = this.tete;
if (courant !=null)
s = s+""+courant.valeur;
while (courant !=null){
s = s +","+ courant.valeur;
courant = courant.suivant;
}
return s + "]";
}
}
55

6 Implmentation en Java
package listes;
public class ListeVideException
extends RuntimeException{
public ListeVideException() {
super("Votre liste est vide");
}
}

56

6 Implmentation en Java
Spcification du TAD Pile
package pile;
public interface Pile {
//modificateurs
void empiler(Object element);
Object depiler()
throws PileVideException;
void effacer();
//selecteurs
boolean estVide();
Object sommet()
throws PileVideException;
int longueur();
boolean equals(Object o);
}

57

6 Implmentation en Java
Spcification du TAD File
package file;
public interface File {
// modificateurs
void deposer(Object element);
Object prelever()
throws FileVideException;
void effacer();
// selecteurs
boolean fileVide();
boolean equals (Object o);
Object tete()
throws FileVideException;
int longueur();

58

B LES ARBRES

Introduction
Un arbre est une collection dlments
organiss suivant une structure
hirarchique.
Dans de nombreux problmes, les donnes
sont naturellement structures de manire
arborescente:
Arbre gnalogique, organigrammes
Arbre syntaxique
Arbre de dcision
Table des matires dun livre
59

B LES ARBRES

Introduction
Les structures darbres permettent
dimplmenter efficacement des algorithmes
dinsertion, de suppression, de recherche et
de tri.
Les arbres conviennent particulirement
bien comme structure de donnes pour
implanter des dictionnaires informatiques.
Les diffrents SGBD font appels des
arbres particuliers pour lorganisation
physique des donnes et en particulier pour
60
grer les index.

B LES ARBRES

Exemple :Reprsentation arborescente


dune table des matires

Livre

chapitre2

chapitre1

s11

s12

s21
s221

s22

s23

chapitre3

s31

s32

s222

61

B LES ARBRES
Dfinition1 dun arbre
Un arbre est compos de deux ensembles N et
A appels respectivement lensemble des
nuds et lensemble de arcs et dun noeud
particulier appel racine de larbre.
Les lments de A sont des paires (n1, n2)
dlments de N.
A doit tre tel que chaque nud, except la
racine, a exactement un parent.

62

B LES ARBRES
Dfinition2 dun arbre (rcursive)
Un arbre est soit un ensemble vide, soit une
paire A(r,S), r tant un nud et S tant un
ensemble darbres disjoints ne contenant pas r.
A

A1

A2

A3

63

B LES ARBRES

Dfinitions usuelles
Un arbre vide est un arbre ne comportant
aucun nud;
Une feuille est un nud nayant aucun fils;
Un nud interne est un nud qui nest pas
une feuille;
Un sous-arbre est un sous-ensemble des
nuds dun arbre ayant une structure
darbre.

64

B LES ARBRES

Dfinitions usuelles
La taille dun arbre est gale au nombre de
nuds quil contient.
Ltiquette dun nud est linformation
associe celui-ci.
Le degr dun nud est gal au nombre de
ses fils;
Le degr dun arbre est gal au maximum
des degrs de tous ses nuds;
65

B LES ARBRES

Plan dtude
Les arbres seront traits dans un premier temps
comme des TAD.

Les arbres binaires


Les arbres binaires de recherche

On abordera ensuite leur utilisation comme


structure de donnes trs efficaces pour
implanter plusieurs autres TAD tels que les
dictionnaires

66

1 LES ARBRES BINAIRES

Gnralits
Dfinition 1
Un arbre binaire est un arbre de degr deux.
Les fils sont appels fils gauche et fils droit.
Dfinition2 (rcursive)
Un arbre binaire est soit vide, soit constitu
dun nud racine possdant un sous-arbre
binaire gauche et un sous-arbre binaire
droit.
67

1 LES ARBRES BINAIRES

TAD Arbre binaire


Construteur

Crer un arbre vide

Modificateurs

Remplacer ltiquette dune racine


Accrocher un arbre comme sous-arbre gauche ou droit
dun arbre
Dcrocher le sous-arbre gauche ou droit dun arbre
Effacer le contenu dun arbre

68

1 LES ARBRES BINAIRES

TAD Arbre binaire


Slecteurs

Vrifier si deux arbres sont gaux


Savoir si un arbre est vide
Dterminer ltiquette de la racine
Obtenir le sous-arbre gauche dun arbre
Obtenir le sous-arbre droit dun arbre

69

1 LES ARBRES BINAIRES

Parcours dun arbre binaire


Il y a plusieurs faon de visiter tous les
nuds dun arbre pour les afficher ou leur
appliquer un traitement.
On va tudier les parcours les plus utiliss :
Parcours prordonn appel aussi prfix ou en
profondeur
Parcours symtrique
Parcours postordonn appel aussi postfix
Parcours en largeur
70

1 LES ARBRES BINAIRES

Le parcours prordonn
Algorithme :
Si larbre nest pas vide alors
traiter la racine de larbre
effectuer le parcours prordonn du sous-arbre
gauche
effectuer le parcours prordonn du sous-arbre
droit
Fin si

71

1 LES ARBRES BINAIRES

Le parcours prordonn
Application larbre suivant:
A
B

Rsultat : A B F G E I
72

1 LES ARBRES BINAIRES

Le parcours symtrique
Algorithme :
Si larbre nest pas vide alors
effectuer le parcours symtrique du sous-arbre
gauche
traiter la racine de larbre
effectuer le parcours symtrique du sous-arbre
droit
Fin si
Rsultat : F B G A I E

73

1 LES ARBRES BINAIRES

Le parcours postordonn
Algorithme :
Si larbre nest pas vide alors
effectuer le parcours postordonn du sous-arbre
gauche
effectuer le parcours postordonn du sous-arbre
droit
traiter la racine de larbre
Fin si
Rsultat : F G B I E A
74

1 LES ARBRES BINAIRES


Le parcours en largeur
Algorithme :

Crer une file vide


Si larbre nest pas vide alors
dposer la racine de larbre dans la file
tant que la file nest pas vide boucler
prlever un nud dans la file
traiter ce nud
pour chaque fils de ce nud, pris de gauche
droite,boucler
dposer ce nud dans la file
fin boucler
fin boucler

Fin si

Rsultat : A B E F G I
75

1 LES ARBRES BINAIRES


Application des parcours: les arbres
dexpression
Dfinition dune expression arithmtique :
Combinaison doprateurs arithmtiques ( +, -, *, /),
doprandes et de parenthses exprimant les priorits
des oprations.
Chaque expression arithmtique peut tre reprsente
par un arbre binaire appel arbre dexpression :
(a * (b c))
*
a

76

1 LES ARBRES BINAIRES


Construction de larbre dexpression
associ une expression arithmtique
donne
Construction rcursive laide des rgles
suivantes:
1. Larbre dexpression dun seul oprande est un
nud racine unique le contenant.
2. Si E1 et E2 sont des expressions reprsentes
par les arbres T1, T2 et si op est un oprateur,
alors larbre dexpression E1 op E2 est compos
dun nud racine contenant op et de deux sousarbres T1 et T2.
77

1 LES ARBRES BINAIRES


Conversion dune expression arithmtique
exprime en notation infixe en notation
postfixe:
A partir de larbre dexpression associ
lexpression arithmtique, on peut exprimer
lexpression arithmtique en notation
postfixe en utilisant un parcours
postordonn.

78

1 LES ARBRES BINAIRES


Diffrentes reprsentations du TAD Arbre
Binaire
1. Reprsentation contigu par un tableau de nuds
Un nud est caractris par une tiquette, un champ
gauche et un champ droite de type entier.
Gauche et droite sont des indices permettant de
retrouver les sous-arbres gauche et droit dun nud.
On affectera gauche (resp. droite) la valeur -1 quand
le nud na pas de sous-arbre gauche (resp. droit).

79

1 LES ARBRES BINAIRES

Diffrentes reprsentations du TAD Arbre


Binaire
Exemple :

A
B

E
D

G
0
gauche
tiquette
droite

1
A
2

3
B
4

5
E
6

I
H

-1
C
-1

-1
D
-1

7
F
8

-1
I
-1

-1
G
-1

-1
H
-1

80

1 LES ARBRES BINAIRES


Diffrentes reprsentations du TAD Arbre
binaire
2. Reprsentation chane
Chaque nud est caractris par
une tiquette
un pointeur vers le fils gauche
un pointeur vers le fils droit

81

1 LES ARBRES BINAIRES


Diffrentes reprsentations du TAD Arbre
binaire
2. Reprsentation chane
racine

A
B

82

1 LES ARBRES BINAIRES

Spcification du TAD Arbre binaire en JAVA

package arbresBinaires;
public interface ArbreBinaire {
//modificateurs
public void effacer();
public void modifierRacine(Object e) throws
ArbreBinaireVideException;
public void accrocherGauche(ArbreBinaire a) throws
ArbreBinaireVideException;
public void accrocherDroit(ArbreBinaire a) throws
ArbreBinaireVideException;
public ArbreBinaire decrocherGauche() throws
ArbreBinaireVideException;
public ArbreBinaire decrocherDroit() throws
ArbreBinaireVideException;

83

1 LES ARBRES BINAIRES


Spcification du TAD Arbre binaire en JAVA
//selecteurs
public boolean estVide();
public Object racine() throws
ArbreBinaireVideException;
public ArbreBinaire droit() throws
ArbreBinaireVideException;
public ArbreBinaire gauche() throws
ArbreBinaireVideException;
//parcours pour affichage
public void parcoursSymetrique();
public void parcoursPreOrdonne() ;
public void parcoursPostOrdonne() ;
public void parcoursLargeur() ;
}
84

1 LES ARBRES BINAIRES


Implantation du TAD Arbre binaire en JAVA
en utilisant une structure de donnes chaine.
package arbresBinaires;
public class Noeud {
protected Object etiquette;
protected Noeud ng;
protected Noeud nd;
public Noeud(Object o) {
etiquette=o;
ng =null;
nd =null;
}
}
85

1 LES ARBRES BINAIRES


Implantation du TAD Arbre binaire en JAVA
package arbresBinaires;
public class ArbreBinaireVideException
extends RuntimeException{
public ArbreBinaireVideException() {
super("Votre arbre est vide");
}
public ArbreBinaireVideException(String
msg) {
super(msg);
}
}
86

1 LES ARBRES BINAIRES


Implantation du TAD Arbre binaire en JAVA
package arbresBinaires;
public class ABChaine implements ArbreBinaire{
protected Noeud racine;
public ABChaine() {
racine = null;
}
public ABChaine(Noeud n) {
racine = n;
}

87

1 LES ARBRES BINAIRES


//modificateurs
public void effacer(){
racine = null;
}
public void modifierRacine(Object e) throws
ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
racine.etiquette=e;
}

88

1 LES ARBRES BINAIRES


public void accrocherDroit(ArbreBinaire
a) throws ArbreBinaireVideException{
if (estVide())
throw new
ArbreBinaireVideException();

ABChaine ad = (ABChaine)a;
racine.nd = ad.racine;

89

1 LES ARBRES BINAIRES


public void
accrocherGauche(ArbreBinaire a)
throws ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
ABChaine ag = (ABChaine)a;
racine.ng = ag.racine;
}

90

1 LES ARBRES BINAIRES


public ArbreBinaire decrocherDroit() throws
ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
ArbreBinaire a= new ABChaine(racine.nd);
racine.nd= null;
return a;
}
public ArbreBinaire decrocherGauche()
throws ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
ArbreBinaire a= new ABChaine(racine.ng);
racine.ng= null;
return a;
}
91

1 LES ARBRES BINAIRES


//slecteurs
public ArbreBinaire droit() throws
ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
return new ABChaine(racine.nd);
}
public ArbreBinaire gauche() throws
ArbreBinaireVideException{
if (estVide()) throw new
ArbreBinaireVideException();
return new ABChaine(racine.ng);
}
92

1 LES ARBRES BINAIRES


public boolean estVide() {
return (racine==null);
}
public Object racine()
throws ArbreBinaireVideException{
if (estVide())
throw new
ArbreBinaireVideException();
return racine.etiquette;
}

93

1 LES ARBRES BINAIRES


public void parcoursSymetrique(){
cf td}
public void parcoursPreOrdonne(){
cf td}
public void parcoursPostOrdonne(){
cf td}
public void parcoursLargeur(){
// todo in td
}
}
94

2 - Arbres binaires de recherche

Dfinition

Un arbre binaire de recherche est un arbre


binaire satisfaisant aux proprits suivantes:
Ltiquette de chaque nud contient une valeur
particulire dun type ordonn appele cl;
Pour tout sous-arbre, la cl de la racine est
strictement suprieure toutes les cls du sousarbre gauche et strictement infrieure toutes les
cls du sous-arbre droit.

95

2 - Arbres binaires de recherche

Exemple
15
10

18

17

20

96

2 - Arbres binaires de recherche

Le TAD arbre binaire de


recherche
Constructeur
Crer un arbre vide

Modificateurs

Effacer le contenu dun arbre


Insrer un lment dans un arbre en
fonction de sa cl
Supprimer un lment dans un arbre
97

2 - Arbres binaires de recherche

Le TAD arbre binaire de


recherche
Slecteurs

Les mmes que pour le TAD arbre


binaire
Rechercher un lment dans un arbre

98

2 - Arbres binaires de recherche


Algorithme de recherche dun lment
si larbre est vide alors
signaler que llment est introuvable
sinon si (cl de llment < cl de la racine) alors
rechercher llment dans le sous-arbre
gauche

sinon si (cl de llment > cl de la racine)


alors
rechercher llment dans le sous-arbre
droit
sinon retourner la racine
fin si
fin si
fin si
99

2 - Arbres binaires de recherche


Algorithme dinsertion dun lment
si larbre est vide alors
crer une feuille contenant cet lment [=racine]
sinon si (cl de llment < cl de la racine) alors
insrer llment dans le sous-arbre gauche

sinon si (cl de llment > cl de la racine) alors


insrer llment dans le sous-arbre droit
sinon erreur : lment existe dj dans larbre
fin si
fin si
fin si

100

2 - Arbres binaires de recherche


Algorithme de suppression dun lment
Localiser le nud supprimer par une recherche rcursive.
Une fois le nud trouv, il faut distinguer 3 cas:

1. Le nud na pas de fils droit;


2. Le nud possde un fils droit mais pas de fils gauche;
3. Le nud possde deux fils.
Cas 1 et 2, il suffit de court-circuiter le nud supprimer.
Cas 3 :
Rechercher la cl maximale dans le sous arbre gauche
du nud supprimer.
Recopier cet lment dans le nud supprimer.
Supprimer le nud que lon vient de recopier (cas 1).

101

2 - Arbres binaires de recherche


Algorithme de suppression dun lment
si larbre est vide alors

signaler une erreur (lment introuvable)


sinon si larbre ne contient quun nud dont la cl est
gale la cl de llment alors retourner larbre vide
sinon si (cl de llment < cl de la racine)

alors

supprimer llment dans le sous-arbre


gauche
sinon si (cl de llment > cl de la racine)
alors
supprimer llment dans le sous-arbre droit
sinon //la racine contient llment
supprimer et nest pas une feuille
102

2 - Arbres binaires de recherche

Algorithme de suppression dun lment suite


sinon //la racine contient llment supprimer et
nest pas une
feuille
si le sous-arbre droit est vide //cas1 alors
remplacer larbre par son sous-arbre gauche
sinon si le sous-arbre gauche est vide //cas2
alors
remplacer larbre par son sous-arbre droit
sinon //cas3
rechercher le plus grand lment du sous
arbre gauche
remplacer ltiquette de la racine par celle
de ce plus grand lment et supprimer
llment
fin si
fin si
fin si
fin si
103
fin si

2 - Arbres binaires de recherche

Parcours dun arbre binaire de


recherche
La proprit 2) des arbres binaires de
recherche permet
dafficher toutes les cls de larbre dans
lordre croissant
laide dun parcours symtrique.

104

2 - Arbres binaires de recherche


Application : On peut donc trier des
lments en utilisant un arbre de recherche :

Insertion des lments dans larbre de recherche


Parcours symtrique de larbre obtenu.

Lintrt rside dans lefficacit de ce tri.


Complexit : O(nlog(n)).
Il faut cependant faire lhypothse que larbre nest
pas trop dsquilibr, i.e. pour chaque nud, il y a
approximativement autant de nud dans le sous
arbre gauche que dans le sous-arbre droit.

105

2 - Arbres binaires de recherche

Il y a deux approches pour


sassurer quun arbre de
recherche soit quilibr:
Lquilibrer de temps en temps
Imposer lquilibrage comme
contrainte supplmentaire pour
larbre de recherche. On obtient
alors un arbre AVL.

106

C LES ENSEMBLES

Dfinition
Un ensemble est une collection
dlments uniques.
Notation : S = {a, b, c}
Les oprations principales sur les
ensembles :
Union
Intersection
Complment relatif ou diffrence
107

C LES ENSEMBLES

Le TAD ensemble
//constructeurs

Construire un ensemble vide


Construire un ensemble par union de deux
autres ensembles
Construire un ensemble par intersection de
deux autres ensembles
Construire un ensemble par diffrence de
deux autres ensembles
//modificateurs
Insrer un lment dans un ensemble
Supprimer un lment dun ensemble
Effacer tous les lments dun ensemble 108

C LES ENSEMBLES

Le TAD ensemble
//slecteurs
Vrifier quun lment fait partie dun
ensemble
Vrifier que deux ensembles sont gaux
Savoir si un ensemble est vide

109

C LES ENSEMBLES
Les implantations du TAD ensemble
Cas o les ensembles sont des sous-ensembles
dun ensemble universel constitu des entiers 1,
, N pour un N donn:

Limplmentation la plus simple et efficace


consiste utiliser un tableau de boolens T
tel que T[i]= 1 si i appartient lensemble
T[i] = 0 sinon.

110

C LES ENSEMBLES

Les implantations du TAD ensemble


Les oprations dinsertion, de suppression et
de recherche dun lment sont ralises en
temps constant (O(1)).
La runion, lintersection et la diffrence dans
un temps proportionnel la taille de
lensemble universel.

111

C LES ENSEMBLES

Les implantations du TAD ensemble


Cas gnral : on peut aussi utiliser une
liste chane. Pas de limitation des
sous-ensembles dun ensemble universel
dentiers.

112

C LES ENSEMBLES

Les dictionnaires
Pas toujours besoin des oprations telles que
lunion et lintersection.
On a souvent besoin de manipuler un
ensemble dobjets avec seulement des
insertions, des suppressions et deffectuer
des recherches.
Le TAD ensemble avec uniquement ces trois
oprations est appel un dictionnaire.

113

C LES ENSEMBLES
Spcification du TAD dictionnaire
package dictionnaire;
public interface Dictionnaire {
//modificateurs
public void effacer();
public void inserer(Object x);
public void supprimer(Object x)
throws DicoVideException;
//selecteurs
public boolean estVide();
public boolean rechercher(Object x) ;
}

114

C LES ENSEMBLES

Les implantations du TAD dictionnaire


1. par des structures de donnes simples :
tableau, listes chanes
2. par tables de hachage
3. par arbres binaires de recherche

115

C LES ENSEMBLES
1- Utilisation des structures de donnes simples:
Tableau avec un pointeur sur le dernier lment
Envisageable si on sait que la taille des ensembles ne
dpassera jamais la taille du tableau.
Avantage : simplicit
Inconvnients : suppression plus lente, lespace nest pas
utilis de manire efficace quand les ensembles sont de
taille
variable.
Liste chane

116

C LES ENSEMBLES

Complexit des algorithmes


Limplantation par tableau ou par liste chane
du dictionnaire demande, en moyenne, n
oprations pour excuter une insertion, une
suppression ou une recherche. Complexit :
O(n).
On va tudier une technique trs utilise pour
implanter des dictionnaires : le hachage.
Cette technique demande, en moyenne, un
temps constant pour les trois oprations.
Complexit : O(1).
117

C LES ENSEMBLES

2- Les tables de hachage


La structure de donnes table de
hachage est idalement un tableau de
taille N fixe contenant les lments
de lensemble.

La rpartition des lments de


lensemble dans le tableau se fait en
utilisant une fonction appele fonction
de hachage.
118

C LES ENSEMBLES

2- Les tables de hachage


Une fonction de hachage est
une fonction h qui, pour
chaque lment x de
lensemble, calcule une
valeur h(x) comprise entre 0
et N-1 correspondant un
indice du tableau.

Table de hachage
0
1
2

h : Ensemble [0..N 1]
x

N-1

119

C LES ENSEMBLES

2- Les tables de hachage


En utilisant la mme fonction de
hachage pour linsertion et la recherche,
lexcution de ces oprations demande
se fait en temps constant.

En pratique, ce cas idal nexiste pas du


fait de collisions.

120

C LES ENSEMBLES

2- Les tables de hachage


Collision : pour deux lments diffrents de
lensemble, la fonction de hachage produit la
mme valeur.
Exemple h( x) h( y ) 2 et x y
0
1
2

N-1

x,y

121

C LES ENSEMBLES

2- Les tables de hachage


Une bonne fonction de hachage doit
calculer rapidement une valeur mais aussi
diminuer le nombre de collisions.
Exemple de fonction de hachage pour
un ensemble dont les lments sont des
chanes de caractres :
h(chane) (( codes de caractres ) mod N )
taille du tableau

122

C LES ENSEMBLES

2- Les tables de hachage


Application lensemble
{ Jean, Jacques, Vincent,
Lucien, Pierre}

et une table de taille 10.

0
1
2
3
4

chane

Jean
Jacques
Vincent
Lucien
Pierre

h(chane)

7
5
6
9
6

5
6
7

Jacques
Vincent, Pierre
Jean

8
9

Lucien

123

C LES ENSEMBLES

2- Les tables de hachage


En cas de collision, deux approches
sont utilises:
Gestion par hachage ouvert
Gestion par hachage ferm

124

C LES ENSEMBLES

2- Les tables de hachage


Gestion par hachage ouvert
En cas de collision, le tableau est ouvert
vers la droite.
5

Jacques

Vincent

Jean

Pierre

Inconvnient :
Plus il y a de collisions
->Plus les listes sont
longues
->Moins la recherche est
efficace

8
9

Lucien

125

C LES ENSEMBLES

2- Les tables de hachage


Gestion par hachage ferm
On cherche replacer llment en
collision ailleurs dans le tableau en
appliquant une fonction de rehachage
qui calcule un nouvel indice et ceci
jusqu ce que la nouvelle entre soit
libre.

126

C LES ENSEMBLES

2- Les tables de hachage


Gestion par hachage ferm
Exemple de fonction de rehachage :
Fonction qui incrmente de 1 lindice
obtenu.

Ce choix conduit une dgradation


des performances ds que le taux de
remplissage de la table dpasse 90%.

127

C LES ENSEMBLES

2- Implantation du TAD dictionnaire


par table de hachage, gestion par
hachage ouvert
package dictionnaire;
import listes.*;
public class DicoHachageOuvert
implements Dictionnaire{
private int taille;
private static final int MASK =
0x7FFFFFFF;//forme hexadecimale
//MASK = 2147483647
private ListeChainee[]
tableau; //tableau de listes

128

C LES ENSEMBLES
public DicoHachageOuvert(int dimension) {
taille = dimension;
//initialiser le tableau
tableau = new ListeChainee[taille];
for (int i=0; i<taille; i++){
tableau[i] = new ListeChainee();
}
}
private int hachage(Object c){
return (c.hashCode()&MASK)%taille;
//somme //modulo taille
//n&MASK permet de supprimer le signe de
//l'entier n
}
129

C LES ENSEMBLES
public void effacer() {
for (int i=0; i<taille; i++){
tableau[i].effacer();
}
}
public boolean estVide() {
for (int i=0; i<taille; i++){
if (!tableau[i].estVide())
return false;
}
return true;
}
130

C LES ENSEMBLES
public void inserer(Object x) {
if(!rechercher(x))
tableau[hachage(x)].insererAuDebut(x)
}
public void supprimer(Object x) throws
DicoVideException {
if (estVide()) throw new
DicoVideException();
Liste courant=null;
courant=tableau[hachage(x)];
boolean b =
courant.effacerElement(x);
}
131

C LES ENSEMBLES
public boolean rechercher(Object x) {
int i =hachage(x);
return tableau[i].rechercher(x);
}
}//fin de la classe DicoHachageOuvert

132

C LES ENSEMBLES

3- Les arbres binaires de recherche


Cette structure de donnes permet dimplanter
les ensembles dont les lments sont
ordonns.
Moins efficace que les tables de hachage
pour les insertions, les suppressions et les
recherches.
Plus efficace pour trier les donnes :
parcours symtrique de la structure
condition que larbre soit quilibr.
133

D LES TABLES

Dfinitions
Une table est un conteneur qui permet un
accs direct par type dindex.
Un table est une squence de lignes
constitues de paires (cl, valeur):
la cl sert dindex dans la table.
la valeur du composant cl. Elle contient les
informations recherches.

Exemple : le dictionnaire
La cl est le mot consult
La valeur est la dfinition du mot
134

D LES TABLES

Exemple de table
Paires (prnom, ge) o on suppose que le
prnom peut tre pris comme cl (toutes
les personnes enregistres ont des prnoms
diffrents)
Prnom

Jean
Jacques
Vincent
Lucien
Pierre

ge

18
21
10
10
14
135

D LES TABLES
Le TAD Table
//constructeurs
Construire une table vide

//modificateurs

Insrer une ligne dans la table


Remplacer une ligne dans la table
Extraire une ligne dans la table
Effacer toutes les ligne de la table

//slecteurs
Rechercher une valeur dans la table en fonction de la cl
Savoir si une table est vide
136

D LES TABLES

Les implantations du TAD Table


1. Par un tableau ou une liste
2. Par un arbre de recherche
3. Par une table de hachage

137

D LES TABLES

Implantation du TAD Table par un


tableau ou une liste
Deux types de recherche peuvent tre
envisags
Recherche squentielle si la position des
paires lintrieur de la structure est
quelconque. Complexit : O(n).
Recherche par dichotomie qui ncessite
une table trie et une implantation par
tableau pour avoir un accs direct aux
paires. Complexit : O(log(n))
138

D LES TABLES

Implantation du TAD Table par


un arbre de recherche
Lucien
10
Jean
18

Jacques
21

Vincent
10

Pierre
14

139

D LES TABLES

Implantation du TAD Table par un


arbre de recherche
La recherche est plus performante que la
recherche par dichotomie car mme
complexit O(log(n)) mais le tri est
ralis implicitement linsertion des
paires.

140

D LES TABLES

Implantation du TAD Table par table


de hachage
On applique une fonction de hachage
qui dtermine lindice du tableau partir
de la valeur de la cl.
Complexit insertion et recherche :O(1) (en
thorie)

141

D LES TABLES

Implantation du TAD Table


0
par table de hachage
1
cl

Jean
Jacques
Vincent
Lucien
Pierre

h(cl)

7
5
6
9
6

2
3
4

Jacques
5
Vincent

21
10

14
18

Pierre
7 Jean
8
9 Lucien

10

142

D LES TABLES

Ralisation du TAD Table


Spcification de la ligne de la table

Les oprations sur une table ncessitent de


pouvoir comparer les lignes entre elles
en fonction de leur cl.
Chaque ligne doit
fournir sa cl
pouvoir tre compare une autre ligne
tre traite (affiche par exemple).
143

D LES TABLES
Ralisation du TAD Table
Solution : Une ligne est spcifie par linterface
TypeComparable:
public interface TypeComparable{
//calculer la cl de la ligne
public Comparable cle();
//tablir un ordre entre les
lignes
public int compare(Object o);
//Appliquer un traitement la
ligne
public void traiter();
}
144

D LES TABLES

Ralisation du TAD Table


Application une ligne (prnom, ge):
class PairePrenomAge implements
TypeComparable{
String prenom;

int age;
public PairePrenomAge(String
prenom, int age){
this.prenom = prenom;
this.age = age;
}
145

D LES TABLES
public int compare(Object o){
PairePrenomAge pa = (PairePrenomAge)o;
return ((this.cle().compareTo(pa.cle()));

}
public Comparable cle(){
return prenom;
}
public void traiter(){
System.out.print(Prenom: + prenom);
System.out.println(Age: + age);
}
}
146

D LES TABLES
Ralisation du TAD Table
public interface Table {

//modificateurs
public void effacer ();
public void inserer ( TypeComparable ligne)
throws TablePleineException,
LigneEnDoubleException;
public void remplacer ( TypeComparable
ligne) throws LigneIntrouvableException;
public TypeComparable
extraire( TypeComparable ligne) throws
LigneIntrouvableException;
//slecteurs
public boolean rechercher ( TypeComparable
ligne);
public boolean estVide();

147