Types abstraits de données (TAD)



Documents pareils
Package Java.util Classe générique

Utilisation d objets : String et ArrayList

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

Chapitre V. Les classes : Object, Vector, etc.

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

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

4. Groupement d objets

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

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

Java 1.5 : principales nouveautés

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

Paginer les données côté serveur, mettre en cache côté client

Un ordonnanceur stupide

1. Base de données SQLite

Chapitre 10. Les interfaces Comparable et Comparator 1

Analyse de sécurité de logiciels système par typage statique

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Une introduction à Java

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)

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

Programmation Par Objets

Initiation à la programmation en Python

Architecture des ordinateurs

OCL - Object Constraint Language

Programmer en JAVA. par Tama

Développement Logiciel

Stockage du fichier dans une table mysql:

Accès aux bases de données

OUTIL DE TRAVAIL COLLABORATIF

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

TP Bases de données réparties

Arbres binaires de recherche

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP Blender n 2 : Importation d un modèle SketchUp et animation

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

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

Programmation Orientée Objet

Les arbres binaires de recherche

Modélisation et Gestion des bases de données avec mysql workbench

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

Approche Contract First

Threads. Threads. USTL routier 1

Programmation Orientée Objet Java

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation Objet I

1 Recherche en table par balayage

BASE. Vous avez alors accès à un ensemble de fonctionnalités explicitées ci-dessous :

Auto-évaluation Programmation en Java

Programmation parallèle et distribuée

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Tutoriel de formation SurveyMonkey

Classes et Objets en Ocaml.

Corrigés des premiers exercices sur les classes

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

BIRT (Business Intelligence and Reporting Tools)

Django et PostgreSQL sous la charge

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

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

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Conventions d écriture et outils de mise au point

Cours de Génie Logiciel

TP1 : Initiation à Java et Eclipse

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Création et Gestion des tables

Chapitre VI- La validation de la composition.


Introduction à la Programmation Parallèle: MPI

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Plan du cours. Historique du langage Nouveautés de Java 7

Optimisations des SGBDR. Étude de cas : MySQL

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Temps Réel. Jérôme Pouiller Septembre 2011

Cours Bases de données 2ème année IUT

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Differential Synchronization

AWS avancé. Surveiller votre utilisation d EC2

ARBRES BINAIRES DE RECHERCHE

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Algorithmique, Structures de données et langage C

Bernard HAMM, Évelyne LAVOISIER

Certificat Big Data - Master MAthématiques

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

A QUOI SERVENT LES BASES DE DONNÉES?

TAGREROUT Seyf Allah TMRIM

Quelques Algorithmes simples

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

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

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

Recherche dans un tableau

Évaluation et implémentation des langages

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Patrons de Conception (Design Patterns)

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Publier dans la Base Documentaire

CREATION WEB DYNAMIQUE

Transcription:

Les structures de données de base (structures de données «concrètes») Tableaux Listes chaînées l header trailer CSI250 Types abstraits de données (TAD) Contient des objets On peut INSÉRER On peut ENLEVER On peut.. CSI250 2 CSI250

insérer = PUSH enlever = POP insérer = ENQUEUE enlever = DEQUEUE PILE(STACK) FILE(QUEUE) last in first out first in first out DEQUE insérer : InsertFirst, InsertLast enlever : RemoveFirst RemoveLast CSI250 3 Ce que nous allons voir maintenant Généralisation CSI250 4 CSI250 2

LISTES = collection d'éléments ordonnés d une façon linéaire Array-lists (listes-à-tableaux) Node-lists (listes-à-noeuds) Par indice ou rang par position (par adresse) SÉQUENCE Combinaison des deux CSI250 5 Listes et Séquences Array-Lists Node-Lists Séquences CSI250 6 CSI250 3

Array-Lists Allocation séquentielle Les éléments sont identifiés par leur indice/rang Pas de relation spatiale entre les éléments (que par le rang) On peut accéder a n importe quel élément directement (pas seulement le premier ou dernier) Tout élément est accessible par son indice/rang = nombre des éléments qui le précédent (dont les identités sont inconnues pour l élément) Ex.: Liste d étudiants organisée suivant les numéros d id CSI250 7 Array-lists ière 2 ième 3 ième 4 ième 5 ième 6 ième 7 ième 8 ième Questions comme: Qui est le 5 ième? CSI250 8 CSI250 4

Le TAD Array-List Une séquence S (avec n éléments) qui supporte les méthodes suivantes: -get(i): Retourne l élément de S au index i; une erreur survient si i < 0 ou i > n - -set(i,e): -add(i,e): Remplace l élément au rang i avec e et retourne l ancien élément; un erreur survient si i < 0 ou i > n - Insère un nouvel élément dans S qui aura le rang i; un erreur survient si i< 0 ou i > n -remove(i): Retire de S l élément au rang i; une erreur survient si i< 0 ou i > n - CSI250 9 Observation Adapter Pattern - Deux structures de données (classes) A et B avec des fonctionnalités similaires - Adapter la structure B pour être utilisée comme A - Créer une wrapper class A qui contient B Exemples: Tableau -Array-list Array-list- Deque Deque removefirst(), removelast() Array-List getfirst(), getlast() get(0), get(size()-) addfirst(e), addlast(e) add(0,e), add(size(),e) remove(0), remove(size()-) CSI250 0 CSI250 5

Implémentation intuitive: avec un tableau - Intuitivement avec un tableau V de taille N - Une variable n indique la taille du de l Array-List (nombre d éléments stockés) - La méthode get(i) est exécuté en temps O() (retourne V[i]) V 0 2 i n CSI250 Insertion Dans l opération add(r, o), nous avons besoin de créer l espace pour le nouvel élément en déplaçant avant les n - r éléments V[r],, V[n - ] Dans pire des cas (r = 0), le temps d'exécution est O(n) add(r,e): for i = n -, n - 2,..., r do S[i+] s[i] S[r] e n n + V V V 0 2 r n 0 2 r n o 0 2 r n CSI250 2 CSI250 6

Suppression Dans l opération remove(r), nous avons besoin de remplir le trou laissé par l élément enlevé en déplaçant en arrière les n - r - éléments V[r + ],, V[n - ] Dans pire des cas (r = 0), le temps d'exécution est O(n) remove(r): e S[r] for i = r, r +,..., n - 2 do S[i] S[i + ] n n - return V V V o 0 2 r n 0 2 r n 0 2 r n CSI250 3 Performance - L espace utilisé par la structure de données est O(n) - size, isempty, get et set sont exécutées en un temps O() - add et remove sont exécutées en un temps O(n) Pour la méthode add, quand le tableau est plein (n=n), au lieu d avoir une erreur, nous pouvons remplacer le tableau avec un tableau plus grand CSI250 4 CSI250 7

Performance Complexité des diverses méthodes: size O() isempty O() get O() replace O() insert remove O(n) O(n) CSI250 5 La Classe java.util.arraylist<e> - Inherits from java.util.abstractcollection<e> java.util.abstractlist<e> Implements Iterable<E> Collection<E> List<E> RandomAccess Les methodes size(), isempty(), get(int) et set(int,e) en temps O() add(int,e) et remove(int) en temps O(n) Implémentation avec tableaux extensibles CSI250 6 CSI250 8

--- Tableaux extensibles --- Utilisés en Java pour TAD Pile, File, Liste, etc CSI250 7 Idée: Implémentation d un pile avec Tableaux extensibles Quand le tableau S est plein, nous pouvons remplacer le tableau par un plus grand tableau et continuer à traiter les opération push Algorithm push(obj): if size() = N then A new array of length f(n) for i 0 to N - A[i] S[i] S A t t + S[t] obj CSI250 8 CSI250 9

Tableaux extensibles Quelle devrait être la dimension du nouveau tableau? Stratégie «tight» (ajouter une constante): f(n) = N + c Stratégie de croissance (doubler): f(n) = 2N CSI250 9 A plein Tableaux extensibles- Strategie de croissance Créer B B copier A dans B B Réassigner la référence A au nouveau tableau A CSI250 20 CSI250 0

Tableaux extensibles- Stratégie de croissance OPÉRATION Opération push régulière: ajouter un élément Opération push spéciale: créer un tableau de taille 2N, copier N éléments, et ajouter un élément Temps exécuté 2N+N+ CSI250 2 0 Tableaux extensibles 2 + + créer copier push 2 4 + 2 + 3 8 + 4 + 2 2-4 6 + 8 + phase 2 3 - CSI250 22 22 CSI250

Tableaux extensibles i 2 i- - 2 i- push dans la phase i, ( special parmi eux) spécial normal coût d un push spécial i: 2 i + 2 i- + = 3 2 i- + creer copier push Totale Phase i: 3 2 i- + + 2 i- - CSI250 23 coût total Phase i: 3 2 i- + + 2 i- - = 2 i+ Tableaux extensibles Stratégie de croissance Phase 4 COMBIEN DE PHASES POUR effectuer n push? Taille du tableau Phase 2 Phase 3 Si n est une puissance de 2: La taille du tableau devient n quand n = 2 i i = log n 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 Quand j ai effectué n push je me trouve dans la phase log n CSI250 24 CSI250 2

Tableaux extensibles Donc, il y a log n phases: ( log n pour être précis) Chaque phase coût: 2 i+ log n Σ0 2 i+ = log n 2 (Σ0 2 i ) N OUBLIEZ PAS: n S = Σ 2 i = 2 n+ - i=0 = 2(2 logn+ -) = 2(2 2 logn -) = 2(2 n -) = O(n) CSI250 25 Le TAD Array List Implémentation avec une liste doublement chaînée Est-ce que c est efficace d'implémenter une «array-list» avec une liste doublement chaînée? header trailer Non get(i)??? CSI250 26 CSI250 3

Algorithm get(rank) if (rank <= size()/2) { //scan forward from head node header.next for (int i=0; i < rank; i++) node node.next }else { // scan backward from the tail node trailer.prev for (int i=0; i < size()-rank- ; i++) node node.prev } return node; CSI250 27 Performance avec une liste doublement chaînée size O() isempty O() get O(n) replace O(n) insert remove O(n) O(n) CSI250 28 CSI250 4

Node-List Contenant d éléments où chaque élément est stocké à une position donnée; Les positions sont rangées dans un ordre linéaire Chaque élément fait référence aux éléments suivant et précèdent et il est accessible à partir de ses voisins On ne peut pas accéder à un élément directement, on peut accéder juste au premier ou au dernier. Les éléments sont accédés par leur position. Les positions sont définies relatives aux autres positions (adresse/place). Les positions sont liées par les relations spatiales avant/après CSI250 29 premier moi précèdent prochain Je ne connais pas mon indice - la notion de indice ou n existe pas. Je sais seulement qui est le prochain et le précèdent. CSI250 30 CSI250 5

premier dernier 2 Bank prec prochain 3 Laurier 7 Bronson CSI250 3 premier dernier 7 Bronson prec 2 Bank prochain Lees CSI250 32 CSI250 6

2 Bank...... Si j ai connais une addresse Je peux poser une question comme: Qui est après 2 Bank? Qui est premier? Qui est dernier? CSI250 33 Le TAD Node List Une séquence S de n éléments qui supporte les méthodes suivantes: first(): Retourne la position du premier élément de S; une erreur survient si S est vide last(): Retourne la position du dernier élément de S; une erreur survient si S est vide prev(p):retourne la position de l élément de S qui précède celui qui est à la position p; une erreur survient si p est le premier élément de S next(p):retourne la position de l élément de S qui suit celui qui est à la position p; une erreur survient si p est le dernier élément de S CSI250 34 CSI250 7

Le TAD Node List set(p,e): Remplace l élément à la position p par e et retourne l élément se situant à p auparavant addfirst(e): Insère un élément e dans S en tant que premier élément addlast(e): Insère un élément e dans S en tant que dernier élément addbefore(p,e): Insère un élément e dans S avant la position p addafter(p,e): Insère un élément e dans S après la position p remove(p): Supprime et retourne l élément e de S se trouvant à la position p et invalide cette position dans S Une erreur survient si p null ou déjà supprimé ou est une position d une autre liste etc. CSI250 35 Implementation intuitive: avec une liste doublement chaînée Une liste doublement chaînée est l'implémentation intuitive de le TAD Liste Nœuds implémente Position et conserve: élément Link à le nœud précèdent Link à le nœud prochain Nœuds spécial : trailer et header header Prec Proc élément nœud nœuds/positions trailer elements CSI250 36 CSI250 8

Insertion Nous visualisons l opération addafter(p, X), qui retourne le position q p addafter(p,e) Create a new node v v.setelement(e) v.setprev(p) v.setnext(p.getnext()) (p.getnext()).setprev(v) p.setnext(v) e v CSI250 37 Suppression Nous visualisons remove(p), où p = last() p p CSI250 38 CSI250 9

p t remove(p) t p.element (p.getprev()).setnext(p.getnext()) (p.getnext()).setprev(p.getprev()) p.setprev(null) p.setnext(null) return t CSI250 39 Le TAD Séquence Un plus général TAD Combine les TAD Array-list et Node-List (héritage multiple) Ajoute des méthodes qui font le pont entre rangs et positions -atindex(i) retourne une position -indexof(p) retourne un indice (entier) CSI250 40 CSI250 20

Implémentation à base de tableau Le tableau circulaire conserve des positions Un objet position conserve: Élément Indice f et l gardent la première et la 0 2 3 dernière postions positions S f CSI250 4 l 0 2 3 YOW YYZ YVR YUL 2 YYC f l add(2,yyc) CSI250 42 CSI250 2

0 2 3 YOW YYZ YVR YUL 2 YYC f l add(2,yyc) CSI250 43 2 YYC 0 YOW YYZ 3 YVR 4 YUL f l CSI250 44 CSI250 22

Implémentation à base de tableau addfirst, addbefore, addafter, remove O(n) Aussi: add, remove basé sur indices O(n) Autres methodes O() CSI250 45 Implémentation avec Liste doublement chaînée Toutes les méthodes sont héritées Ponts: atindex(i), indexof(p): O(n) CSI250 46 CSI250 23

SÉQUENCE Les variables p, pk correspondent aux positions insertfirst(2) retourne position de 2 : p insertfirst(9) retourne position de 9 : p2 2 9, 2 insertafter(p2,44) retourne position de 44 : p3 9, 44, 2 CSI250 47 p2 p3 p last()? returne p 9, 44, 2 p2 p3 p indexof(p)? 3 atindex()? p2 remove(2) 9, 2 returne 44 p2 p remove(p2) returne 9 2 p CSI250 48 CSI250 24

Séquences et Java Collections Framework java.util.list<e> est un interface qui est réalisé par java.util.linkedlist<e> java.util.arraylist<e> Aside: List works with indicies/rank Fait partie du Java Collections Framework Structure du framework interfaces, e.g., List, Queue, Map, Set implementations, e.g., ArrayList, IndexList, PriorityQueue, HashSet Toujours: iterator(), size(), isempty() CSI250 49 Performance Dans le réalisation de le TAD Liste avec une liste doublement chaînée L espace utilisé par une liste avec n éléments est O(n) L espace utilisé par chaque position de la liste est O() Chaque méthode de le TAD Liste est exécutée en temps O() Opération element() de le TAD est exécutée en temps O() CSI250 50 CSI250 25

Liste Doublement chaînée dans Java Collections Framework Réalisation alternative d une séquence en Java Inherents from java.util.abstractcollection<e> java.util.abstractlist<e> java.util.abstractsequentiallist<e> Implements Methods Iterable<E> Collection<E> Deque<E>, List<E>, Queue<E> size(), isempty(), addfirst(e) and addlast(e) in O() time Il n y a pas: prev, next, addbefore ou addafter qui sont nécessaires pour nodelist ADT CSI250 5 Observation Iterators Iterators passent a travers une collection d'éléments Ils sont associes a une séquence Il y a la notion d'élément actuel Il y a accès au prochain On peux avancer au prochain Iterator ADT hasnext() next() Collections support Iterators in Java interface Iterable<E> Une méthode: Iterator<E> iterator() généralisation d une boucle FOR sur les élément de la collection CSI250 52 CSI250 26

java.util.linkedlist<e> Ce n est pas un nodelist; seulement a liste doublement chaînée Stratégie: utilisez java.util.linkedlist Avec l Iterator java.util.listiterator Regardez l iterator comme une sous-classe d un ADT position. CSI250 53 SEQUENCES: CONCLUSION CSI250 54 CSI250 27

Séquences avec Tableaux : Il faut deplacer des elements addfirst,addbefore,addafter,add(i,e) ---- O(n) remove(position) remove(index) ---- O(n) Ponts: atindex(i), indexof(p): ---- O() get(i), set(i,e) ----- O() Parce que la position garde aussi l info sur l index CSI250 55 Séquences avec listes doublement chaînes: addfirst,addbefore,addafter, remove(position) --- - O() add(i,e) remove(index) ---- O(n) Bridges: atindex(i), indexof(p): ---- O(n) get(i), set(i,e) ----- O(n) Il faut traverser pour trouver l index CSI250 56 CSI250 28