Vous êtes sur la page 1sur 41

Structuraton des données :

concepts et implémentaton
(Collectons, Tables associatves, Graphes)
Introducton : exemples de problèmes

 Gérer des animaux dans un refuge.


– Pas d'animal présent deux fois au même moment.

 Afcher des fgures géométriques


– Une même fgure peut être présente plusieurs fois
– Importance de l'ordre

2 / 41
Discussions générales
Introducton : exemples de problèmes

 Gérer des relevés météo


– Ensemble de paires (ville,relevé)
– Chaque ville présente au plus une fois

 Calculer le nombre d'amis dans un réseau social.


– Ensemble de paires de personnes (ami1, ami2).
– Une personne peut être plusieurs fois en parte gauche.

3 / 41
Discussions générales
Introducton : exemples de problèmes

 Gérer des relevés météo


– Ensemble de paires (ville,relevé)
– Chaque ville présente au plus une fois

 Calculer le nombre d'amis dans un réseau social.


– Ensemble de paires de personnes (ami1, ami2).
– Une personne peut être plusieurs fois en parte gauche.

Selon les problèmes, la structuraton des données à


envisager n'est pas la même.
4 / 41
Discussions générales
Plan des cours 1 et 2

 Concepts
– Collectons
(Exemples de spécialisaton : ensemble, liste, fle, ...)
– Tables associatves
– Graphes
 Mise en oeuvre en Java
– Collecton/Map et leurs implémentatons

 ExempleS d'implémentaton d'une liste.


 Eléments de complexité
5 / 41
Discussions générales
Vocabulaire

 Sémantque d'une structure de données défnie par :


– opératons : décrivent son comportement.
– propriétés : précisent le fonctonnement des opératons.
 Structure de données aussi caractérisée par :
– Complexité en mémoire
– Complexité en temps de ses opératons.

6 / 41
Définition / important
Concept

Collecton de données

7 / 41
Collecton (1)

 Une collecton est un regroupement d'un nombre fni


de données, ayant une signifcaton commune par
rapport à un problème.
Ex : Les numéros de tél d'une personne, les concerts
prévus à la Halle Tony Garnier, les animaux du refuge...
 Collecton d'éléments de type E : CollE
Emma Manon Thomas
Thomas
Mathieu Kenza
Théo Léa Léa
Mehdi

Collection C des prénoms dans mon groupe de travail

8 / 41
Définition / important
Collecton (2)

 Exemple d'opératons caractéristques :


– vide : → CollE création d'une collection vide
– ajouter : E x CollE→ CollE
– supprimer : E x CollE→ CollE
– taille : CollE→ ℕ
– appartient : E x CollE → {Vrai, Faux}
 Exemples de propriétés (quels que soient e et C):
– taille(vide)=0
– taille(ajouter (e, vide)) = 1
– appartient(e,vide) = Faux
– appartient(e, ajouter(e,C)) = Vrai

9 / 41
Discussions générales
Exemple

Emma Manon Thomas


Thomas
Mathieu Kenza
Théo Léa Léa
Mehdi

– appartient("Mo", ajouter("Mo",C)) ?
VRAI
– appartient("Léa", ajouter("Léa",C)) ?

VRAI
– appartient("Léa", supprimer("Léa",C)) ?
Ca dépend

10 / 41
exemple
Collecton : premier bilan

 Propriété vérifée si on considère un ensemble (sans


doublon) :
appartient(e, supprimer(e,C)) = Faux 

 Collection est un concept abstrait à spécialiser :


– Un même élément peut-il apparaître plusieurs fois ?
(nombre d'occurrences autorisé égal à 1 ou plus ?)
– Noton d'ordre de parcours des éléments ou non ?
• « La résoluton du problème nécessite-t-elle de désigner la positon
de l'élément dans la liste » ?

11 / 41
Discussions générales
Ensemble (1)

 Ensemble (noté SetE) : collecton sans doublons


d'éléments, sans noton de séquence.
 Correspond à la noton mathématque d'ensemble.
– Ex : Les amis d'une personne, les références des boites de
médicaments dans une pharmacie...

Emma Manon Thomas


Mathieu Kenza
Théo Léa Mehdi

Ensemble des différents prénoms portés dans mon groupe de travail

12 / 41
Définition / important
Ensemble (2)

 Opératons :
– vide, ajouter, supprimer, taille, appartient.
– Union, intersection, différence…
SetE x SetE→ SetE

 Exemple de propriétés (quels que soient e et S):


– appartient(e,supprimer(e,S)) = Faux
– ajouter(e,S) = S ssi appartient(e,S)=Vrai
– taille(ajouter(e,S)) = taille(S) + 1 ssi
appartient(e,S)=Faux
– taille(union(S1,S2)) = taille(S1) + taille(S2) –
taille(intersection(S1,S2))

13 / 41
Discussions générales
Exemple

Emma Mathilde
Manon
Mathieu
Théo Alex
Léa Mehdi

Kenza Sophie
Thomas

Enzo

taille(union(S1,S2))=
taille(S1) + taille(S2) – taille(intersection(S1,S2))

14 / 41
exemple
Liste (1)

 Liste (noté ListE) : séquence d'éléments pouvant


contenir des doublons. Tout élément peut être
désigné par sa positon dans la liste.
– Ex : liste des fgures à dessiner.
 Préciser la signifcaton d'opératons, comme :
– ajouter ↔ ajouter un élément en début de liste.
– supprimer ↔ supprimer la 1e occurrence rencontrée .

(Emma, Manon, Léa, Mehdi, Léa)


Liste des prénoms des personnes avec lequelles j'ai un rdv individuel demain

15 / 41
Définition / important
Liste (2)

 Exemples d'opératons supplémentaires :


– ajouterElemEnPos : E x ℕ x ListE→ ListE

– supprimerEnPos : ℕ x ListE→ ListE

– chercherPosElem : E x ListE→ ℕ
– obtenirElem : ℕ x ListE→ E (élém en ième
position)
 Exemples de propriétés (quels que soient e, i et L)
– supprimer(ajouter(e,L)) = L
– obtenirElem(i, ajouterElemEnPos(e,i,L)) = e
– chercherPosElem(e, ajouterElemEnPos(e,i,L)) ≤ i

16 / 41
Discussions générales
Exemple (avec début à gauche)
0 1 2 3 4
L = (Emma, Manon, Léa, Mehdi, Léa)

chercherPosElem("Mehdi",L)

L = (Emma, Manon, Léa, Mehdi, Léa)

ajouter("Thomas",L)

L = (Thomas, Emma, Manon, Léa, Mehdi, Léa)

chercherPosElem("Mehdi",L)

17 / 41
exemple
Exemple (avec début à gauche)
0 1 2
L = (Emma, Manon, Léa, Mehdi, Léa)

ajouter("Thomas",L)

L = (Thomas, Emma, Manon, Léa, Mehdi, Léa)


supprimer("Thomas",L)

L = (Emma, Manon, Léa, Mehdi, Léa)

ajouterElemEnPos("Manon",3,L)

L = (Emma, Manon, Léa, Manon, Mehdi, Léa)

obtenirElem(3,L) chercherPosElem("Manon",L)

Manon 1

18 / 41
exemple
Files et Piles

 File (First In First Out) : Exemple :


Une fle de voitures dans
– collecton ordonnée d'éléments un tunnel à une voie sans
dépassement : la 1e
– admet des doublons engagée sera la 1e sorte
– Retrait : le plus anciennement ajouté.

 Pile (Last In First Out) :


Exemple :
– collecton ordonnée d'éléments Une pile de livres : on
pose un nouveau livre sur
– Admet des doublons le haut de la pile ; c'est le
– Retrait : le dernier à avoir été ajouté. premier à pouvoir être
accédé.

19 / 41
Définition / important
Files et Piles

http://chohmann.free.fr/SCM/fifo.htm
20 / 41
Concept

Table associatve
(dictonnaire)

21 / 41
Table associatve (1)

 Soient C et V, deux ensembles d'éléments. Une table


associatve, notée TableC,V, est consttuée de paires
(clé : valeur) ∈ CxV telles que :
– une même valeur de clé ne peut apparaître qu'une seule
fois comme membre gauche d'une paire.
 Autres noms : tableau associatf, dictonnaire, map.
{(Marseille : 10°C - 25km/h - 80%),
(Nantes : 9°C - 30km/h - 90%),
(Lyon : 7°C - 15km/h - 85%)}

Table associative liant chaque ville à son relevé météo

22 / 41
Définition / important
Table associatve (2)

 Opératons principales
– tableVide : → TableC,V

– appartient : C x V x TableC,V→ booléen

– taille : TableC,V→ ℕ
– ajouter : C x V x TableC,V→ TableC,V

– supprimer : C x TableC,V→ TableC,V

– rechercher : C x TableC,V→ V U {Exception}

 Seule la clé est nécessaire pour savoir quoi supprimer


ou rechercher.

23 / 41
Discussions générales
Table associatve (2)

 Quelques propriétés (quels que soient c, v, v', T):


– taille(tableVide) = 0
– taille(ajouter(c,v,T)) = taille(T) + 1 si c n'est
pas déjà utilisée dans la liste.
– supprimer(c,ajouter((c,v),T)) = T
– rechercher(c,ajouter((c,v),T) = v
– rechercher(c,supprimer(c,T))=Exception
– ajouter(c,v', ajouter(c,v,T))... Ca dépend.

24 / 41
Discussions générales
Exemple

T = {(Marseille : 10°C - 25km/h - 80%),


(Nantes : 9°C - 30km/h - 90%),
(Lyon : 7°C - 15km/h - 85%)}

ajouter("Paris", 2°C - 30km/h - 90%,T)

T = {(Marseille : 10°C - 25km/h - 80%),


(Nantes : 9°C - 30km/h - 90%),
(Paris : 2°C - 30km/h - 90%),
(Lyon : 7°C - 15km/h - 85%)}

rechercher("Paris", T) supprimer("Paris",T)

9°C - 30km/h - 90%


T = {(Marseille : 10°C - 25km/h - 80%),
(Nantes : 9°C - 30km/h - 90%),
(Lyon : 7°C - 15km/h - 85%)}

25 / 41
exemple
Concept

Graphe

26 / 41
Graphe (1)

 Soit V un ensemble de valeurs. Un graphe orienté,


noté G=(S,A) est défni par :
– S ⊆ V est l'ensemble des sommets du graphe.
– A ⊆ SxS est l'ensemble des arcs du graphe. Un même
couple (s1,s2) ne peut apparaître deux fois.
Emma Kenza
Mathieu
Théo
Léa Manon
Mehdi
Graphe Twitter entre mes collègues (qui suit qui)

S = {Emma, Manon, Mathieu,Kenza, Théo, Mehdi,Léa}


A = {(Emma,Mathieu),(Léa,Mehdi),(Kenza,Mehdi),(Mehdi,Emma)...}
27 / 41
Définition / important
Graphes (2)

 Quelques opératons :
– grapheVide : → GrapheE

– ajouterSommet : V x GrapheE → GrapheE

– ajouterArc : S x S x GrapheE → GrapheE

– nbSommets : GrapheE → ℕ

– nbArcs : GrapheE → ℕ
– supprimerArc : S x S x GrapheE → GrapheE

– supprimerSommets : S x GrapheE → GrapheE


– ...

28 / 41
Discussions générales
Graphes (3)

 Des propriétés (quels que soient s, s' et G):


– nbSommets(grapheVide) = 0
– nbArcs(grapheVide) = 0
– nbSommets(ajouterSommet(s, G)) = nbSommets(G) + 1
si s ∉ G.S
– nbArcs(ajouterArc(s,s',G)) : nbArcs(G) + 1 si
(s,s') ∉ G.A
– ... Emma Kenza
Mathieu
Théo
Léa Manon
Mehdi

29 / 41
Discussions générales
Exemples de graphes

a a 4
e 5 b
b 9
12
d c
d c 8
1 f 2
f
e

Graphe orienté avec un cycle Graphe orienté pondéré

a 45

a1 a2 a3
30 70

a21 a22 a23


20 36 53
Un arbre
Un arbre binaire

30 / 41
exemple
Mise en oeuvre

Mise en oeuvre proposée par le langage Java

31 / 41
Les données

 Une donnée : toute instance de classe (tout objet)


 Pour une classe qui représente le type des données
d'une structure de données, on veillera à :
– Redéfnir la méthode equals (important pour la
recherche d'un élément) - voir TD .
• boolean equals(Object o)
– Défnir un ordre sur les éléments (important pour le tri)
en implémentant la méthode - voir TD.
• int compareTo(Object o)

32 / 41
Définition / important
La méthode equals

 Toute classe hérite de la classe Object qui se situe à la


racine de l'arborescence de classes Java.
 La méthode equals de la classe Object retourne vrai si
les adresses mémoire des deux objets sont égales.
 Dans une classse, pour donner une autre signifcaton
à equals, il faut la redéfnir.
equals définie par
public class ReleveMeteo { l'égalité des 3
... attributs numériques
public boolean equals(Object o) {
if (o == null) return false;
if (!(o instanceof ReleveMeteo)) return false;
ReleveMeteo r = (ReleveMeteo) o ;
return (t.temp==temp) && (r.vent==vent) &&
(r.hum==hum);
}
}
33 / 41
important
Les interfaces

 En Java, la noton d'interface permet de conserver un


niveau conceptuel.
 Une interface défnit un comportement en précisant la
signature de méthodes caractéristques mais pas la
façon dont les méthodes sont programmées.
 Dans les méthodes, on retrouve :
– les opératons discutées précédemment,
– d'autres opératons correspondant à des manipulatons
supplémentaires (ex : ajouter ou supprimer une
collecton à une collecton)

34 / 41
Définition / important
Les hiérarchies d'interfaces Collection et Map de Java

https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html

35 / 41
exemple
Exemple de méthodes de l'interface Collecton<E>

 boolean add(E e) ajouter : E x CollE→ CollE


 boolean contains(Object o)
 boolean isEmpty()
 boolean remove(Object o)
 int size()
 boolean addAll(Collection<? extends E> c)
 …
Pourquoi on n'a pas Passage de la notation
exactement fonctionnelle à
la même signature ? la notation objet.
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html

36 / 41
exemple
Implémentatons d'une interface

 Une interface n'est pas une classe :


– on ne peut pas en créer une instance.
– on la met en œuvre en précisant le code de chaque
méthode (implements)
 Tout le mode peut implémenter une interface.
 Java propose plusieurs implémentatons des interfaces
– List : classes ArrayList, LinkedList...
– Set : classes TreeSet, HashSet...
– Map : classes HashMap, TreeMap...
 Indispensable de consulter la documentaton Java.
37 / 41
important
Exemple : utlisaton de TreeSet

import java.util.TreeSet;
public class Exemple {
//Manipulation d'une instance de Hashset
public static void main(String[] args){
//creation d'une instance
TreeSet<String> comptes = new TreeSet<String>();

//ajout de valeurs
comptes.add("1233456RT12");
comptes.add("8776549YT56");
comptes.add("5436781GH69");

//parcours ; syntaxe compacte (sans suppression d'element)


for(String s : comptes){
System.out.println(s);
}

//test presence
System.out.println(comptes.contains("8776549YT56"));
}
}

38 / 41
exemple
Exemple : utlisaton de TreeMap

import java.util.*;

public class ExempleTreeMap { //Manipulation d'une instance de HashMap


public static void main(String[] args){
//creation et ajout de paires
TreeMap<String, String> placement = new TreeMap<String,String>();
placement.put("Lucie", "A12");
placement.put("Mo", "A11");
placement.put("Ray", "C22");

//interroger grace a la cle


String place = placement.get("Mo");
System.out.println(place);

//affichage des paires


for(Map.Entry<String,String> e : placement.entrySet()){
System.out.println(e.getKey()+" place.e en "+ e.getValue() );
}
}
}

39 / 41
exemple/Démo
Bilan après 1er cours

 Collecton, ensemble, liste, pile, fle, table associatve,


graphe = concepts qui peuvent être modélisés
indépendamment d'un langage de programmaton.
 Mise en œuvre en 2 temps en Java :
– Interfaces
– Implementatons de ces interfaces.
 Java propose plusieurs implémentatons d'une même
interface.
 Pour utliser les structures de données proposées par
un langage, il faut étudier la documentaton (et ne pas
reprogrammer ce qui existe si ce n'est pas nécessaire).
40 / 41
Discussions générales
Limites de la présentaton

 Ces diapos ne sont pas exhaustves sur :


– structures de données (il y en a d'autres)
– les opératons et leurs propriétés

 Voir types abstraits algébriques pour plus de détails


– Première approche :
htps://en.wikipedia.org/wiki/Abstract_data_type

41 / 41
Discussions générales