Beruflich Dokumente
Kultur Dokumente
PROGRAMMATION
ORIENTEE OBJET :
Types Abstraits de Donnes
TAD
1
Donnes(TAD)
Donnes(TAD)
Ide directrice
Parallle avec les types primitifs
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
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
Classes
Exceptions
Gnricit
11
Donnes(TAD)
Ralisation dun TAD en Java
Classes
Masquage de la structure interne du TAD :
Exceptions
Permettent une gestion de erreurs pouvant
survenir lors de lutilisation dun TAD.
12
Donnes(TAD)
Ralisation dun TAD en Java
Gnricit
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
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
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)
Constructeurs
Modificateurs
Slecteurs
Itrateurs
Donnes(TAD)
Plan dtude
A) Les structures linaires
B) Les arbres
C) Les ensembles
D) Les tables
19
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
22
1 - Les listes
2
3
info1 info2 info3
dbut
fin
taille
1 - Les listes
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
26
1 - Les listes
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
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
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
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
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
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
40
42
43
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
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;
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
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.
66
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
Modificateurs
68
69
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
Le parcours prordonn
Application larbre suivant:
A
B
Rsultat : A B F G E I
72
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
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
Fin si
Rsultat : A B E F G I
75
76
78
79
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
81
A
B
82
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
87
88
ABChaine ad = (ABChaine)a;
racine.nd = ad.racine;
89
90
93
Dfinition
95
Exemple
15
10
18
17
20
96
Modificateurs
98
100
101
alors
104
105
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
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:
110
C LES ENSEMBLES
111
C LES ENSEMBLES
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
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
C LES ENSEMBLES
C LES ENSEMBLES
Table de hachage
0
1
2
h : Ensemble [0..N 1]
x
N-1
119
C LES ENSEMBLES
120
C LES ENSEMBLES
N-1
x,y
121
C LES ENSEMBLES
122
C LES ENSEMBLES
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
124
C LES ENSEMBLES
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
126
C LES ENSEMBLES
127
C LES ENSEMBLES
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
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
//slecteurs
Rechercher une valeur dans la table en fonction de la cl
Savoir si une table est vide
136
D LES TABLES
137
D LES TABLES
D LES TABLES
Jacques
21
Vincent
10
Pierre
14
139
D LES TABLES
140
D LES TABLES
141
D LES TABLES
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
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
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