Types abstraits de données (TAD)

Documents pareils
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Génie Logiciel avec Ada. 4 février 2013

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Evaluation et mise en place d un serveur de messages pour Chamilo 2.0

OCL - Object Constraint Language

LOSLIER Mathieu. Filière Informatique et Réseau 1 ère année. TP DNS. Responsable : LOHIER Stephane. Chargé de TD : QUIDELLEUR Aurélie

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Utilisation d objets : String et ArrayList

Les structures de données. Rajae El Ouazzani

Architecture des ordinateurs

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Exercices INF5171 : série #3 (Automne 2012)

Partie 7 : Gestion de la mémoire

Programmation Orientée Objet Java

Algorithmique, Structures de données et langage C

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Plan 1/9/2013. Génération et exploitation de données. CEP et applications. Flux de données et notifications. Traitement des flux Implémentation

Algorithmique répartie

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Guichet automatique de banque

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Un ordonnanceur stupide

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

18 TCP Les protocoles de domaines d applications

Cours de Programmation 2

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Outils pour la pratique

Vérification formelle de la plate-forme Java Card

Cours A7 : Temps Réel

Listes de fournitures du secondaire pour la rentrée

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Package Java.util Classe générique

Les arbres binaires de recherche

Le modèle de données

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Présentation - Tableau de bord du CA Carrefour informationnel et documentaire des Laurentides

Elisabeth Vareilles Animation numérique de territoire Office de Tourisme Intercommunal Pays de Forcalquier Montagne de Lure

Générer du code à partir d une description de haut niveau

Patrons de Conception (Design Patterns)

Systemes d'exploitation des ordinateurs

PROTEGER SA CLE USB AVEC ROHOS MINI-DRIVE

Capacité de mémoire Tablettes

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

La messagerie électronique avec La Poste

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Java Naming and Directory Interface

FRANCAIS MANUEL D UTILISATION THERMOMETRE MEDICAL SANS CONTACT A INFRAROUGE MODELE LX-26

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Projet en nouvelles technologies de l information et de la communication

Guide utilisateur pour le déblocage de cartes et/ou la modification d un code PIN

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Classes et Objets en Ocaml.

Séminaire d information MIGRATION WINDOWS 7 ET OFFICE 2010

ARBRES BINAIRES DE RECHERCHE

La JVM. La machine virtuelle Java. La JVM. La JVM

Démarrer et quitter... 13

guide d installation Collection Frame

Internet Marketing Manager

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

"! "#$ $ $ ""! %#& """! '& ( ")! )*+

CONFIGURATION DE L AUTOMATE SIEMENS

OUTILS DE COMMUNICATION

Partie publique / Partie privée. Site statique site dynamique. Base de données.

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Problèmes liés à la concurrence

Gestion d'une billeterie défilé des talents

GUIDE COMPLET APP STORE OPTIMIZATION. Comment bien référencer son application dans les stores?

Les algorithmes de base du graphisme

Traduction des Langages : Le Compilateur Micro Java

SANKORÉ. Le manuel qui manquait. Traite de la version du logiciel Sankoré

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

Programmation Par Objets

Résumé Génération de code Le code intermédiaire

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Cours de Génie Logiciel

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Cours d algorithmique pour la classe de 2nde

Installation ou mise à jour du logiciel système Fiery

Les nombres entiers. Durée suggérée: 3 semaines

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

EBOLA - épidémie Transport en ambulance d'un cas suspect

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

GL Le Génie Logiciel

Direction Artistique Marie-Danielle Grimaud Lettre d information n 69, Février 2015

Services bancaires par Internet aux entreprises. Guide pratique pour : Rapports de solde Version

Foire Internationale de Marseille

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Création et Gestion des tables

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

_ PARAMETRE DU COMPTE _ ACCEUIL. 1 ere Etape «Créer un compte principal» Créer un compte secondaire. Ouvrir un compte principal

Héritage presque multiple en Java (1/2)

Conception des systèmes répartis

INFO 364 : Bases de Données Projet Professeur : Esteban Zimányi Assistants : Pierre Stadnik et Mohammed Minout Année Académique :

Transcription:

Types abstraits de données (TAD) Un type abstrait de données (Abstract Data Type - ADT) = description d un ensemble de données Un TAD fait une abstraction de la structure de données (structure interne inconnue de l extérieur) Un TAD spécifie: Le type de données contenues Une description détaillée des opérations qui peuvent être effectuées sur les données Un TAD ne spécifie pas: La façon dont les données sont stockées Comment les méthodes sont implémentées Types abstraits de données (TAD) Exemple Modéliser un sac de billes avec un TAD: Le TAD contient des billes Le TAD fournit la possibilité de remettre une bille dans le sac ou d en prendre une 1

Types abstraits de données (TAD) TAD: Sac de billes Exemple d implémentation du TAD sac de billes: Un tissu en coton avec un ruban Algorithme : Jeu de billes Le joueur prend une bille du sac de billes et la lance vers la bille cible. Le joueur avec la bille la plus proche du but gagne toutes les billes et remet les billes dans son sac L algorithme fait référence au sac des billes uniquement et non pas au tissu en coton Abstraction: Séparation entre les propriétés du type de données et son implémentation => Modularité : Changer l implémentation d un module sans affecter l implémentation de l autre 3 Types abstraits de données (TAD) TAD: Sac de billes Exemple d implémentation du TAD sac de billes: Un tissu en coton noué avec un ruban Interface Exemple d implémentation du TAD sac de billes: Un sac en cuir Class Exemple d implémentation du TAD sac de billes: Un sac plastique avec une fermeture L implémentation de l algorithme jeu de billes est indépendante de l implémentation du TAD Sac de billes

Types abstraits de données (TAD) - Spécifier précisément les opérations qui peuvent être exécutées - Les implémentations sont cachées et peuvent changer facilement Exemples données: l annuaire de téléphone Operations: chercher, ajouter, effacer Piles, Files, and Deques TAD Piles (Stack) Implémentation avec tableau Implémentation avec liste simplement chaînée TAD Files (Queue) Implémentation avec tableau Implémentation avec liste simplement chaînée TAD Deques (Files à deux bouts) Implémentation avec liste doublement chaînée 3

Piles PUSH POP Piles Une pile contient des objets insérés et retirés selon le principe du dernier rentré, premier sorti (last-in-first-out LIFO) Les objets peuvent être insérés à tout moment, mais seulement le dernier (le plus récemment inséré) peut être retiré Insérer un objet dans la pile correspond à l empiler (pushing). Dépiler la pile (popping) correspond au retrait d un objet. Analogie: distributeur de bonbons PEZ 4

Le TAD Pile (Stack) Méthodes fondamentales: push(e): Insérer l objet e en top de la pile (Empiler l objet e) pop(): Retirer l objet se situant en top de la pile et le retourner (dépiler la pile); une erreur survient lorsque la pile est vide. Méthodes secondaires - size(): Retourne le nombre d objets dans la pile isempty():retourne un booléen indiquant si la pile est vide top(): Retourne l objet du dessus de la pile, sans le retirer; une erreur survient lorsque la pile est vide. Applications de Piles Applications direct L'historique des pages visitées dans un navigateur web Défaire la séquence écrite dans un éditeur de texte (touche supprimer ) La chaîne d appel des méthodes dans la machine virtuelle Java Gestion des emails Applications indirect Une structure de données auxiliaire Une composante d'autres structures de données 5

Exemples Évaluer une expression avec deux piles ( ( (10+5) + 5) / ( (+3) * )) Comment nous le résolvons? Une séquence possible d'opérations ( ( ( 10+5 ) + 5) / (( +3 ) * )) ( ( 15 + 5) / ( 5 * )) ( 0 / 10 ) 6

Autre ( ( ( 10+5 ) + 5) / (( +3 ) * )) ( ( 15 + 5) / (( +3 ) * )) ( 0 / (( +3 ) * )) ( 0 / ( 5 * )) ( 0 / 10 ) une pour les opérandes une pour les opérateurs Avec deux Piles ( ( (10+5) + 5) / ( (+3) * )) 5 10 S1 + S 7

Avec deux Piles une pour les opérandes une pour les opérateurs quand on trouve une parenthèse fermée ( ( 15 + 5) / (( +3) * )) ( ( (10+5) + 5) / ( (+3) * )) POP S1 5 POP S + 5 10 15 + POP S1 10 S1 S Évaluer: 10 + 5 = 15 PUSH S1 le résultat une pour les opérandes une pour les opérateurs Avec deux Piles une parenthèse fermée ( 0 / (( +3) * )) ( ( (10+5) + 5) / ( (+3) * )) POP S1 5 5 15 0 + S1 S POP S + POP S1 15 Évaluer: 15 + 5 = 0 PUSH S1 le résultat 8

une pour les opérandes une pour les opérateurs Avec deux Piles une parenthèse fermée ( 0 / (( +3) * )) ( ( (10+5) + 5) / ( (+3) * )) POP S1 3 3 5 + 0 / S1 S POP S + POP S1 Évaluer + 3 = 5 PUSH S1 le résultat une pour les opérandes une pour les opérateurs Avec deux Piles ( 0 / ( 5 * )) ( ( (10+5) + 5) / ( (+3) * )) 5 0 / S1 S 9

une pour les opérandes une pour les opérateurs Avec deux Piles une parenthèse ( 0 / ( 5 * )) fermée ( ( (10+5) + 5) / ( (+3) * )) 10 5 0 S1 * / S POP S1 POP S * POP S1 5 Évaluer 5 * = 10 PUSH S1 le résultat Avec deux Piles une pour les opérandes une pour les opérateurs un parenthèse fermée ( 0 / 10 ) ( ( (10+5) + 5) / ( (+3) * )) 10 10 0 / / 0 S1 S 0 / 10= 10

Exemples Vérifier équilibre des parenthèses { [ (a+b) -c]/d} { [ a+b) -c]/d} Exemple dans le livre Réalisation d une pile avec tableau La pile consiste en un tableau S de N-élément et une variable entière t l'index du «premier» élément dans le tableau S (top de la pile). Algorithm size(): return t +1 Algorithm isempty(): return (t < 0) Algorithm top(): if isempty() then ERROR return S[t] 11

Algorithm push(obj): if size() = N then ERROR t t + 1 S[t] obj Algorithm pop(): if isempty() then ERROR e S[t] S[t] null t t-1 return e Performance et Limitations Performance Limitations Time size() isempty() top() push(obj) pop() Espace: O(n) n = taille de le tableau Structure statique 1

Réalisation d une Pile à l aide d une liste simplement chaînée TOP taille = 4 -Liste simplement chaînée avec un variable contenir la taille actuelle de la liste Structure Dynamique PUSH: Ajouter au devant POP: Prendre le première 13

top Algorithm push(obj): n new Node n.item obj n.setnext(top) top n size++ n top temp Algorithm pop(): if isempty() then ERROR temp top.item top top.getnext() size- - return temp Performance Temps: size() isempty() top() push(obj) pop() Espace: Variable Limitations:? 14

La File (The Queue) La File (Queue) first-in-first-out (FIFO) Une file contient des objets insérés et retirés selon le principe du premier rentré, premier sorti (first-in-first-out FIFO) Les éléments sont enfilés (insérés) du coté arrière et défilés (retirés) du coté avant 15

Applications de Queues Applications directes Les listes d'attentes L'accès aux ressources partagées (ex. imprimer) Multi-programmation Applications indirectes Les données auxiliaires structurent pour les algorithmes Le composant d'autres structures de données Exemple: Palindromes radar eye madam Able was I ere I saw Elba Lire la ligne dans une pile et dans une file Comparer les résultants de la file et la pile r a Q d a r r a d a r S 16

Le TAD File (Queue) Méthodes fondamentales: enqueue(o): Insérer l objet o à l arrière de la file dequeue(): Retirer l objet qui est au début de la file et le retourner; une erreur survient lorsque la file est vide Méthodes secondaires: size(): Retourne le nombre d objets dans la file isempty():retourne un booléen indiquant si la file est vide front(): Retourne l objet qui est au début de la file sans le retirer; une erreur survient lorsque la file est vide Implementation d une file avec tableau 0 1 3 4 5 6 7 8 9 10 FRONT REAR Inserer REAR enlever de: FRONT 0 1 3 4 5 6 7 8 9 10 FRONT REAR 17

Implementation d une file avec tableau 0 1 3 4 5 6 7 8 9 10 FRONT REAR 0 1 3 4 5 6 7 8 10 9 n-1 0 1 Insert? FRONT REAR REAR FRONT Implementation d une file avec tableau 0 1 3 4 5 6 7 8 9 10 FRONT REAR 0 1 3 4 5 6 7 8 9 10 n-1 0 1 REAR FRONT Remove: Front = (Front+1) mod n Insert: Rear = (Rear+1) mod n 18

configuration circulaire ( wrapped around ) Une taille fixé au début La file est composée d un tableau Q de N éléments et de deux variables entières: -f, l index de l élément du devant -r, l index de l élément suivant celui de l arrière n-1 0 1 0 1 3 4 5 6 7 8 9 10 Questions: f r Que veut dire f = r? La File est vide Comment calculer le nombre d'éléments dans la file? 19

0 1 3 4 5 6 7 8 9 10 r f (N - f + r) mod N Dan le exemple: (11-8 + 4) mod 11 = 7 Algorithm size(): return (N - f + r) mod N Algorithm isempty(): return (f = r) Algorithm dequeue(): if isempty() then ERROR temp Q[f] Q[f] null f (f + 1) mod N return temp Algorithm front(): if isempty() then ERROR return Q[f] Algorithm enqueue(o): if size = N - 1 then ERROR Q[r] o 0

Performance temps: size() isempty() front() enqueue(o) dequeue() espace: O(N) Réalisation d une File à l aide d une liste simplement chaînée Nœuds connectés en chaîne par de liens (links) La tête de la liste (head) est le début de la file, la queue de la liste (tail) constitue l arrière de la file. Pourquoi pas le contraire? 1

h Rappel : Suppression r (suppression de la élément après r) NULL Premier élément (facile) Élément après r (facile) Élément à r (difficile) h h.getnext() w r.getnext() r.setnext(w) Utiliser un pointeur à l élément précédant, ou Échanger les contenus de l élément à r avec les contenus de l élément suivent, et effacer l élément après r. **Très difficile si r indique dernier élément! Retirer l élément de tête Avancez la référence de la tête Insérer un élément à la tête est tout aussi facile

Insérer un élément à la queue Créez un nouveau nœud Enchaînez-le et déplacez la référence à la queue Comment retirer l élément d queue? Performance temps: size() isempty() front() enqueue(o) dequeue() Espace: Variable 3

Si nous savons en avance une limites supérieur raisonnable pour le nombre d'éléments dans la file, alors Autrement Tableau Listes Plus général TAD: Files à deux bouts (Deque) Une file à double têtes ou Deque (Double-ended queue) est une généralisation des types files et piles. Les insertions et les suppressions d éléments dans une Deque peuvent s effectuer aux deux bouts avant et arrière Méthodes fondamentales: insertfirst(e): Insérer l objet e au début de la Deque insertlast(e): Insérer l objet e à l arrière de la Deque removefirst(): Supprimer et retourner l objet qui est au début de la Deque * removelast(): Supprimer et retourner l objet qui est à l arrière de la Deque* Méthodes secondaires: getfirst(): Retourne l objet qui est au début de la Deque sans le retirer* getlast(): Retourne l objet qui est a l arrière de la Deque sans le retirer* size(): Retourne le nombre d objets dans la Deque isempty(): Retourne un booléen indiquant si la Deque est vide * Erreur si Deque vide 4

Réalisation des Deques à l aide d une liste doublement chaînée Effacer l élément de queue d une liste simplement chaînee ne peut pas être fait en un temps constant header trailer Pour réaliser une deque, nous utilisons une liste doublement chaînée avec des nœuds spéciaux pour l avant (header) et l arrière (trailer) Le nœud header est placé avant le premier élément de la liste. Sa référence suivant est valide tandis que sa référence précédent est null Le nœud trailer est placé après le dernier élément de la liste. Sa référence suivant est null tandis que sa référence précédent est valide header trailer NOTE: Les nœuds header et trailer sont des sentinelles ou nœuds bidons parce qu ils ne contiennent pas d éléments. 5

insertfirst(v): header w insertfirst(v) trailer v w header.getnext() v.setnext(w) v.setprev(header) w.setprev(v) header.setnext(v) Size size+1 removefirst(): u v removefirst() w header trailer u v.getprev() w v.getnext() w.setprev(u) u.setnext(w) v.setprev(null) v.setnext(null) size size-1 6

visualisons de code de removelast(). Avec cet réalisation, toutes les méthodes ont un temps d exécution constant (c est-à-dire O (1))! Réalisation de piles et de files à l aide de Deques Piles avec Deques: Méthodes de Pile isempty() top() push(e) pop() size() Implémentation en Deque isempty() getlast() insertlast(e) removelast() size() Files avec Deques: Méthodes de File isempty() front() enqueue(e) dequeue() size() Implémentation en Deque isempty() getfirst() insertlast(e) removefirst() size() 7