Beruflich Dokumente
Kultur Dokumente
as
Architecture des Systèmes d’Information
Collection - v2.0.4 1 / 39
Plan
1 Introduction
2 Les TAD collection non récursifs
Pile
File
Le TAD Liste
Le TAD ListeOrdonnee
Le TAD Ensemble
Le TAD Dictionnaire
3 Les TAD collection récursifs
Le TAD Liste chaı̂née
Les TAD hiérarchiques
Le TAD Arbre Binaire
Le TAD Arbre Binaire de Recherche
Le TAD Arbre
4 Conclusion as
Architecture des Systèmes d’Information
Collection - v2.0.4 2 / 39
Introduction
Introduction
as
Architecture des Systèmes d’Information
Collection - v2.0.4 3 / 39
Introduction
Avant propos
Liste linéaire : un objet mathématique
Une liste linéaire sur un ensemble E est une suite finie (a1 , a2 , a3 , . . . , an )
d’éléments de E
Une liste linéaire est vide lorsque n = 0 et notée ()
La longueur d’une liste linéaire l, c’est-à-dire le nombre d’éléments d’une liste, est notée
|l|
La concaténation est un opération binaire, non commutative, d’élément neutre (), notée
. tel que :
(a1 , a2 , a3 , . . . , an ).(b1 , b2 , b3 , . . . , bm ) = (a1 , a2 , a3 , . . . , an , b1 , b2 , b3 , . . . , bm )
Remarques
Certaines collections (Pile, File, Liste, Liste Ordonnée, Ensemble,
Liste Chaı̂née) sont des TAD qui utilisent différemment les listes
linéaires
C’est cette notation formelle que nous utiliserons pour représenter
textuellement certains TAD
as Architecture des Systèmes d’Information
Collection - v2.0.4 4 / 39
Les TAD collection non récursifs Pile
TAD Pile 1 / 4
Définition
Collection avec une gestion des éléments du type LIFO (Last In First
Out)
Deux actions possibles :
empiler un élément
dépiler un élément
as
Architecture des Systèmes d’Information
Collection - v2.0.4 5 / 39
Les TAD collection non récursifs Pile
TAD Pile 2 / 4
Nom: Pile
Paramètre: Element
Utilise: Booleen
Opérations: pile: → Pile
estVide: Pile → Booleen
empiler: Pile × Element → Pile
dépiler: Pile 9 Pile
obtenirElement: Pile 9 Element
Axiomes: - estVide(pile())
- non estVide(empiler(p,e))
- depiler(empiler(p,e))=p
- obtenirElement(empiler(p,e))=e
Préconditions: depiler(p): non(estVide(p))
obtenirElement(p): non(estVide(p))
as
Architecture des Systèmes d’Information
Collection - v2.0.4 6 / 39
Les TAD collection non récursifs Pile
TAD Pile 3 / 4
Exercice
Que vaut obtenirElement(dépiler(empiler(empiler(pile(),e1),e2))) ?
as
Architecture des Systèmes d’Information
Collection - v2.0.4 7 / 39
Les TAD collection non récursifs Pile
TAD Pile 4 / 4
as
Architecture des Systèmes d’Information
Collection - v2.0.4 8 / 39
Les TAD collection non récursifs File
TAD File 1 / 3
Définition
Collection avec une gestion des éléments du type FIFO (First In First
Out)
enfiler un élément
défiler un élément
as
Architecture des Systèmes d’Information
Collection - v2.0.4 9 / 39
Les TAD collection non récursifs File
TAD File 2 / 3
Nom: File
Paramètre: Element
Utilise: Booleen
Opérations: file: → File
estVide: File → Booleen
enfiler: File × Element → File
défiler: File 9 File
obtenirElement: File 9 Element
Axiomes: - estVide(file())
- non estVide(enfiler(f ,e))
- defiler(enfiler(file(),e))=file()
- non estVide(f ) et defiler(enfiler(f ,e))=enfiler(defiler(f ),e) a
- obtenirElement(enfiler(file(),e))=e
- non estVide(f ) et obtenirElement(enfiler(f ,e))=obtenirElement(f )
Préconditions: defiler(f): non(estVide(f ))
obtenirElement(f): non(estVide(f ))
Collection - v2.0.4 10 / 39
Les TAD collection non récursifs File
TAD File 3 / 3
Exercice
Que vaut obtenirElement(défiler(enfiler(enfiler(file(),e1),e2))) ?
as
Architecture des Systèmes d’Information
Collection - v2.0.4 11 / 39
Les TAD collection non récursifs Le TAD Liste
TAD Liste 1 / 2
Définition
Collection avec une gestion des éléments avec accès par position
insérer un élément à une position
supprimer un élément à une position
as
Architecture des Systèmes d’Information
Collection - v2.0.4 12 / 39
Les TAD collection non récursifs Le TAD Liste
TAD Liste 2 / 2
Nom: Liste
Paramètre: Element
Utilise: Booleen, NaturelNonNul, Naturel
Opérations: liste: → Liste
estVide: Liste → Booleen
insérer: Liste × NaturelNonNul × Element 9 Liste
supprimer: Liste × NaturelNonNul 9 Liste
obtenirElement: Liste × NaturelNonNul 9 Element
longueur: Liste → Naturel
Axiomes: - estVide(liste())
- non estVide(insérer(l,i,e))
- suprimer(insérer(l,i,e),i)=l
- obtenirElement(insérer(insérer(l,i,e1),i,e2),i + 1)=e1
- longueur(liste())=0
- longueur(insérer(l,i,e))=1+longueur(l)
Préconditions: inserer(l,i,e): i ≤ longueur (l) + 1
supprimer(l,i): i ≤ longueur (l)
obtenirElement(l,i): i ≤ longueur (l) as
Architecture des Systèmes d’Information
Collection - v2.0.4 13 / 39
Les TAD collection non récursifs Le TAD ListeOrdonnee
TAD ListeOrdonnee 1 / 2
Définition
Collection (d’un type de données possédant un ordre total) avec une
gestion des éléments avec accès par position
insérer un élément
supprimer un élément à une position
as
Architecture des Systèmes d’Information
Collection - v2.0.4 14 / 39
Les TAD collection non récursifs Le TAD ListeOrdonnee
TAD ListeOrdonnee 2 / 2
Nom: ListeOrdonnee
Paramètre: Element (doit posséder un ordrer, opérateur <)
Utilise: Booleen, NaturelNonNul, Naturel
Opérations: listeOrdonnée: → ListeOrdonnee
estVide: ListeOrdonnee → Booleen
insérer: ListeOrdonnee × Element → ListeOrdonnee
supprimer: ListeOrdonnee × NaturelNonNul 9 ListeOrdonnee
obtenirElement: ListeOrdonnee × NaturelNonNul 9 Element
longueur: ListeOrdonnee → Naturel
Axiomes: - estVide(listeOrdonnee())
- non estVide(insérer(l,e))
- supprimer(insérer(l,e),i)=l et obtenirElement(insérer(l,e),i)=e
- obtenirElement(insérer(insérer(l,e 0 ),e),i)=e et
obtenirElement(insérer(insérer(l,e 0 ),e),j)=e 0 et ((e 0 < e et j < i) ou (e 0 > e
et j > i))
- longueur(liste())=0
- longueur(insérer(l,e))=1+longueur(l)
Préconditions: supprimer(l,i): i ≤ longueur (l)
obtenirElement(l,i): i ≤ longueur (l)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 15 / 39
Les TAD collection non récursifs Le TAD Ensemble
TAD Ensemble 1 / 2
Définition
Collection d’éléments n’apparaissant qu’une seule fois
ajouter un élément (pas de notion d’ordre, et si déjà présent alors
pas d’ajout)
retirer un élément
rechercher un élément
parcourir les éléments présents (nouvelle instruction)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 16 / 39
Les TAD collection non récursifs Le TAD Ensemble
TAD Ensemble 2 / 2
Nom: Ensemble
Paramètre: Element
Utilise: Booleen,Naturel
Opérations: ensemble: → Ensemble
ajouter: Ensemble × Element → Ensemble
retirer: Ensemble × Element → Ensemble
estPresent: Ensemble × Element → Booleen
cardinalite: Ensemble → Naturel
union: Ensemble × Ensemble → Ensemble
intersection: Ensemble × Ensemble → Ensemble
soustraction: Ensemble × Ensemble → Ensemble
Axiomes: - ajouter(ajouter(s,e),e)=ajouter(s,e)
- retirer(ajouter(s,e),e)=s
- estPresent(ajouter(s,e),e)
- non estPresent(retirer(s,e),e)
- cardinalite(ensemble())=0
- cardinalite(ajouter(s,e))=1+cardinalite(s) et non estPresent(s,e)
- cardinalite(ajouter(s,e))=cardinalite(s) et estPresent(s,e)
...
as
Architecture des Systèmes d’Information
Collection - v2.0.4 17 / 39
Les TAD collection non récursifs Le TAD Ensemble
Exemple
fonction compter (l : Liste<Entier>, unEntier : Entier) : Naturel
Déclaration somme : Naturel
e : Entier
debut
somme ← 0
pour chaque e de l
si unEntier = e alors
somme ← somme + 1
finsi
finpour
fin
retourner somme
as
Architecture des Systèmes d’Information
Collection - v2.0.4 18 / 39
Les TAD collection non récursifs Le TAD Dictionnaire
TAD Dictionnaire 1 / 2
Définition
Collection où les éléments sont constitués de deux parties : une clef et
une valeur. Chaque valeur est identifiée par la clef.
ajouter un couple (clef,valeur)
retirer un élément (clef)
tester la présence (clef)
obtenir les clefs
obtenir les valeurs
obtenir une valeur (clef)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 19 / 39
Les TAD collection non récursifs Le TAD Dictionnaire
TAD Dictionnaire 2 / 2
Nom: Dictionnaire
Paramètre: Clef,Valeur
Utilise: Booleen,Liste
Opérations: dictionnaire: → Dictionnaire
ajouter: Dictionnaire × Clef × Valeur → Dictionnaire
retirer: Dictionnaire × Clef → Dictionnaire
estPresent: Dictionnaire × Clef → Booleen
obtenirValeur: Dictionnaire × Clef 9 Valeur
obtenirClefs: Dictionnaire → Liste<Clef>
obtenirValeurs: Dictionnaire → Liste<Valeur>
Axiomes: - ajouter(ajouter(d,c,v ),c,v )=ajouter(d,c,v )
- retirer(ajouter(d,c,v ),c)=d
- rechercher(ajouter(d,c,v ),c)=v
- estPresent(ajouter(d,c,v ),c)
- estPresent(d,obtenirElement(obtenirClefs(d),i)) et
0 < i ≤ longueur(obtenirClefs(d))
- non estPresent(retirer(d,c),c)
- ...
Préconditions: obtenirValeur(d,c): estPresent(d, c)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 20 / 39
Les TAD collection récursifs
Attention
Ne pas oublier que nous faisons ici une présentation mathématique
Leur implantation dans la paradigme de la programmation
structurée les modifiera largement. . .
as
Architecture des Systèmes d’Information
Collection - v2.0.4 21 / 39
Les TAD collection récursifs Le TAD Liste chaı̂née
Définition
Une liste chaı̂née L est :
une liste vide, notée ()
une liste contenant un seul élément e suivie (concaténée) d’une liste
chaı̂née L0 , notée (e).L0
as
Architecture des Systèmes d’Information
Collection - v2.0.4 22 / 39
Les TAD collection récursifs Le TAD Liste chaı̂née
Nom: ListeChainee
Paramètre: Element
Utilise: Booleen
Opérations: listeChainee: → ListeChainee
estVide: ListeChainee → Booleen
ajouter: ListeChainee × Element → ListeChainee
obtenirElement: ListeChainee 9 Element
obtenirListeSuivante: ListeChainee 9 ListeChainee
Axiomes: - estVide(listeChainee())
- non estVide(ajouter(l,e))
- obtenirElement(ajouter(l,e))=e
- obtenirListeSuivante(ajouter(l,e))=l
Préconditions: obtenirElement(l): non(estVide(l))
obtenirListeSuivante(l): non(estVide(l))
as
Architecture des Systèmes d’Information
Collection - v2.0.4 23 / 39
Les TAD collection récursifs Le TAD Liste chaı̂née
(a).ajouterALaFin(l’,e)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 24 / 39
Les TAD collection récursifs Les TAD hiérarchiques
A1 A2 A3 An
Attention
Un arbre n’est pas une liste linéaire as
Architecture des Systèmes d’Information
Collection - v2.0.4 25 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Vocabulaire 1 / 2
Arité d’un noeud
Nombre de sous-arbres non vide
Une feuille est un noeud d’arité 0
Chemin
Une séquence de noeuds (n0 , n1 , . . . , np ) ou ni−1 est le père de ni
(0 < i ≤ p)
La longueur d’un chemin (n0 , . . . , np ) vaut p
p = nombre d’arcs
p + 1 = nombre de noeuds
Collection - v2.0.4 26 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Vocabulaire 2 / 2
Un exemple
Racine
niveau 0 a
Hauteur de a = 3
Père de g
niveau 1 b c d
niveau 2 e f g Fils de d
niveau 3 h
Feuilles
Fils de e as
Architecture des Systèmes d’Information
Collection - v2.0.4 27 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Définition
Un arbre binaire est un arbre
Si cet arbre n’est pas vide alors il a exactement deux fils (nommé fils
gauche et fils droit)
A A
Ag Ad
as
Architecture des Systèmes d’Information
Collection - v2.0.4 28 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Nom: ArbreBinaire
Paramètre: Element
Utilise: Booleen
Opérations: arbreBinaire: → ArbreBinaire
ajouterRacine: Element × ArbreBinaire × ArbreBinaire → ArbreBinaire
estVide: ArbreBinaire → Booleen
obtenirElement: ArbreBinaire 9 Element
obtenirFilsGauche: ArbreBinaire 9 ArbreBinaire
obtenirFilsDroit: ArbreBinaire 9 ArbreBinaire
Axiomes: - estVide(arbreBinaire())
- non estVide(ajouterRacine(e,ag ,ad ))
- obtenirElement(ajouterRacine(e,ag ,ad ))=e
- obtenirFilsGauche(ajouterRacine(e,ag ,ad ))=ag
- obtenirFilsDroit(ajouterRacine(e,ag ,ad ))=ad
Préconditions: obtenirElement(a): non(estVide(a))
...: ...
as
Architecture des Systèmes d’Information
Collection - v2.0.4 29 / 39
Les TAD collection récursifs Les TAD hiérarchiques
rechercher(A,e) VRAI
e
(r,
r=
A
g,
A
d)
r=
e
rechercher(Ag,e) ou rechercher(Ad,e)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 30 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Parcours en profondeur 1 / 2
parcoursRGD r
1 Traiter la racine r
2 parcoursRGD Ag
Ag Ad
3 parcoursRGD Ad
parcoursGRD parcoursGDR
1 parcoursGRD Ag 1 parcoursGDR Ag
2 Traiter la racine r 2 parcoursGDR Ad
3 parcoursGRD Ad 3 Traiter la racine r
as
Architecture des Systèmes d’Information
Collection - v2.0.4 31 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Parcours en profondeur 2 / 2
Un exemple
b c
d e f
parcoursRGD a,b,d,g,e,c,f
parcoursGRD d,g,b,e,a,f,c
parcoursGDR g,d,e,b,f,c,a as
Architecture des Systèmes d’Information
Collection - v2.0.4 32 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Définition
Un arbre binaire de recherche est un arbre binaire tel que :
le sous-arbre gauche et le sous-arbre droit sont des arbres binaires de
recherche
tous les éléments du sous-arbre gauche sont (strictement) plus petits
que l’élément de la racine
tous les éléments du sous-arbre droit sont strictement plus grands
que l’élément de la racine
as
Architecture des Systèmes d’Information
Collection - v2.0.4 33 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Collection - v2.0.4 34 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Remarque
Suivant les algorithmes qui seront utilisés pour implanter les
opérations d’insertion et de suppression (qui auront un impact sur la
complexité de l’opération estPrésent), les arbres binaires de
recherche peuvent changer de nom (AVL, arbre coloré, etc.)
as
Architecture des Systèmes d’Information
Collection - v2.0.4 35 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Définition
Un arbre n-aire est un arbre avec n fils
A A
A1 A2 A3 An
as
Architecture des Systèmes d’Information
Collection - v2.0.4 36 / 39
Les TAD collection récursifs Les TAD hiérarchiques
Nom: Arbre
Paramètre: Element
Utilise: Booleen,Liste
Opérations: arbre: → Arbre
ajouterRacine: Element × Liste<Arbre> → Arbre
estVide: Arbre → Booleen
obtenirElement: Arbre 9 Element
obtenirFils: Arbre 9 Liste<Arbre>
Axiomes: - estVide(arbre())
- non estVide(ajouterRacine(e,l))
- obtenirElement(ajouterRacine(e,l))=e
- obtenirFils(ajouterRacine(e,l))=l
Préconditions: obtenirElement(a): non(estVide(a))
...: ...
as
Architecture des Systèmes d’Information
Collection - v2.0.4 37 / 39
Conclusion
Conclusion
as
Architecture des Systèmes d’Information
Collection - v2.0.4 38 / 39
Conclusion
Références. . .
as
Architecture des Systèmes d’Information
Collection - v2.0.4 39 / 39