Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Chap. 4 Recherche en Table
Rappels C.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Piles, files et listes: notions théoriques
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Au programme du jour …. Un peu plus de structures de données
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Types de données abstraites
Cours n° 8 Conception et Programmation à Objets
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Algorithme et structure de données
Les structures de données
Chap. 1 Structures séquentielles : listes linéaires
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Initiation et perfectionnement à lutilisation de la micro-informatique Créer un blog avec Windows Live Spaces sur un Mac ou sur un PC ©Yves Roger Cornil.
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
UE NFA006 STRUCTURES DE DONNEES
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Introduction à l’algorithmique
Cours d’Algorithmique

ALGORITHMIQUE Plan du cours Généralités -définition -importance
II. Chaînage, SDD séquentielles
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
II. Chaînage, SDD séquentielles
Programmation fonctionnelle Le langage LISP
Standard Template Library (STL)
Structures de données IFT-2000
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT-10541A : Hiver 2003 Semaine 5 : Piles et files.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Présentation Structures de Données et TDA
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
STRUCTURES DE DONNÉES Maxime CROCHEMORE

Introduction au Langage C
Standard Template Library
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.

Structures de données IFT-2000
Aire d’une figure par encadrement
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
Structures de données IFT-2000

L’essentiel du langage C
Le langage C Structures de données
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
70 : 72 : soixante -dix : soixante -douze: Le nombre du jour :73
Un survol du language C.
Arbres binaires et tables de hachage
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
ETNA – 1ème année Guillaume Belmas –
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données avancées : Introduction D. E ZEGOUR Institut National d ’Informatique.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Transcription de la présentation:

Types abstraits UMLV ã Types de base entiers, réels, booléens, caractères, pointeurs (adresses),… Constructeurs puissance En type_E ... […] produit cartésien E x F x … struct { … } itération (étoile) E* Types abstraits - objets indépendants du langage et de l'implémentation décrits par : - interface (ensemble de base, opérations, relations, axiomes) - implémentation (codage en C ou autre) Exemples : Vecteur Ensemble Liste Arbre Graphe …

Entiers UMLV ã N N N N N N N N N - Ensemble : intervalle de - Opérations (exemples) + - * / mod = ¹ < £ > ³ succ pred maxint _ +_ : x  succ   :  maxint :  _ £_  : x  Booléens, etc. - Axiomes ( a + b) + c = a + ( b + c ), a £ b et b £ c  a £ c, etc. - Implémentation (courante) r = 54710 Bin (r) 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 sur 16 bits r = -54710 Bin (216 + r) 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0 1 N N N N Signature N N N N N

R R R R R R R R R R Réels R UMLV ã Ensemble sous ensemble (fini) de Opérations + - * / = < cos log int sqrt etc. _ + _  : x  cos :  <     : x  Booléens puiss : x  Axiomes corps ordonné x x (y + z) = x x y + x x z etc. R R R Signature R R R R R R R

UMLV ã Implémentation (standard IEEE) x = ( -1 )s . 2 E - 127 . 1,F signe caractéristique mantisse S E F 0 1 2 8 9 10 31 0,8 = (-1)0 . 2 126-127 . 1,10011001100 … 2 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0,75 = (-1)0 . 2 126-127 . 1,100 … 2 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,8 - 0,75 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0,05 = (-1)0 . 2 122-127 . 1,10011001100 … 2 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0

Vecteurs UMLV ã Ensemble ensemble des suites finies indicées d'éléments d'un même type Opérations Vect : Entier x Entier  Vecteur ième  : Vecteur x Entier  Elément chg-ième  : Vecteur x Entier x Elément  Vecteur etc. Axiomes (exemples) [ v vecteur, i, j indices, e élément ] ième ( chg-ième ( v, i, e ), i ) = e i ¹ k Þ ième ( chg-ième ( v, i, e ), k ) = ième ( v, k ) quand indice_min  i, j  indice_max Implémentations possibles type v [ ] table de hachage

Listes Concept UMLV ã (e1, e2 , e3 , …, en ) accès séquentiel mémorisation d'une suite d'éléments (e1, e2 , e3 , …, en ) accès séquentiel e1  e2  e3  …  en parcours   : - tête - successeur - fin position / adresse

UMLV ã fonction UNIQUE ( L liste ) : liste ; /* supprime de L les copies d'éléments */ p,q sont des adresses début p ¬ Tête ( L ) ; tant que p défini faire q ¬ p ; tant que Succ ( q, L ) défini faire si Val ( p, L ) = Val ( Succ (q, L )) alors Enlever ( Succ (q, L )) sinon q ¬ Succ ( q, L ) ; p ¬ Succ ( p, L ) ; retour L ; fin. NOTE  : Temps de calcul = O ( |L|2 ) Exercice : Écrire un algorithme fonctionnant en O ( |L| log |L| )

UMLV ã Listes Ensemble Ensemble des suites finies d'éléments d'un même type. E = ensemble des éléments E* = {(e1, e2, …, en) / n 0, ei Î E pour i = 1,…,n } longueur ((e1, e2, …, en)) = |(e1, e2, …, en)| = n liste vide = ( ) = e position de ei dans (e1, e2, …, en) = i accès séquentiel   : p = place ou adresse de ei Succ (p) = adresse de ei+1 si elle existe Tête (L) = adresse de e1 Axiomes p adresse d'un élément de L Þ $k ³ 0 p = Succk (Tête(L)) k ³ longueur (L) Þ Succk (Tête (L)) non défini

UMLV ã Opérations de base Liste_vide : ® Liste Tête : Liste ® Adresse Fin  : Liste ® Liste Cons  : Elément x Liste ® Liste Premier : Liste ® Elément Elt  : Adresse ® Elément Succ  : Adresse ® Adresse Axiomes (exemples) Tête (L), Fin (L), Premier (L) définis ssi L ¹ e L ¹ e Þ Premier (L) = Elt (Tête (L)) Fin ( Cons ( e, L )) = L Premier ( Cons (e, L)) = e L ¹ e Þ Succ (Tête(L)) = Tête (Fin(L)) Implémentations possibles par tables, pointeurs, curseurs, ...

Extensions UMLV ã Concaténation Produit : Liste x Liste  Liste (e1, …, en) . (f1, …, fm) = (e1, …, en, f1, …, fm) Modifications Ajouter  : Elément x Adresse x Liste  Liste ajouter e après l'élément d'adresse p Supprimer  : Adresse x Liste  Liste Elément  : Elément x Liste  Booléen Autres Place  : Elément x Liste  Adresse Position  : Elément x Liste  Entier Ième  : Entier x Liste  Elément Tri  : Liste  Liste etc.

Choix d’une implémentation UMLV ã Choix d’une implémentation Problème faisant intervenir une ou des listes Modélisation Opérations élémentaires sur les listes Critères de la réalisation (simplicité, rapidité, langage, ...) Implémentation des listes

Implémentation par table UMLV ã Implémentation par table Table L = (e1, e2, …,en) 1 e1 e2 L ei Longueur en Positions explicites Adresse (ei ) = i - 1 = Position (ei ) - 1 Succ ( p ) = p + 1 (si 1  p < n -1 ) Avantages simple, économique en espace Inconvénients concaténation lente, opérations de modifications lentes n vide

UMLV ã struct { int long ; Element table [MAX] ; } Liste; Fonction ajouter (L Liste, p Adresse, e Element) : Liste ; début si L. long = MAX alors erreur (“opération impossible”) sinon si p < -1 ou p  L. long alors sinon pour k ¬ L. long - 1 à p + 1 pas - 1 faire L . table [k + 1] ¬ L. table [k] ; L. table [p + 1] ¬ e ; L. long ¬ L. long + 1 ; retour (L) ; fin .

Pointeurs L = (e1, e2, …, en) UMLV ã Queue L e1 e2 ei en Adresse = adresse mémoire Successeur explicite L peut être identifié à Tête (L) Avantages nombreuses opérations rapides gestion souple, autorise plusieurs listes accès à tout l’espace mémoire disponible Inconvénients pas d ’accès direct un peu gourmand en mémoire

UMLV ã Ajout/Suppression L p temp e L p temp

UMLV ã typedef struct CELLULE { element elt ; struct CELLULE * succ ; typedef cellule * adresse ; typedef adresse liste ; ... liste ajouter ( liste L, adresse p, element e ) { temp = (adresse) malloc(sizeof(cellule)) ; if ( temp == NULL ) erreur () ; else { temp -> elt = e ; temp -> succ = p -> succ ; p -> succ = temp ; } return L ;

Curseurs L = (e1, e2, …, en) e3 L en e1 UMLV ã Elt Succ e2 Queue Variante des pointeurs adresses = indices M AX Avantage Gestion directe de l ’espace Inconvénient Choix de MAX ?

UMLV ã type Liste = Adresse = -1 .. MAX ; Cellule = structure { elt : Element ; succ : Adresse ; } ; Var Espace : table [0 .. MAX] de cellule ; fonction AJOUTER (L Liste, p Place, e Element) : Liste ; début temp ¬ indice d ’une case libre de Espace ; Espace [ temp ] . elt ¬ e ; Espace [ temp ] . succ ¬ Espace [ p ] . succ ; Espace [ p ] . succ ¬ temp ; retour ( L ) ; fin. Temps constant si la recherche d ’une case libre prend un temps constant Question Comment trouver efficacement une case libre ?

Allocation/Libération UMLV ã Allocation/Libération Transfert d’une cellule d’une liste à une autre Exemple : allocation L LIBRE libération L p M q

temp->succ ¬ p->succ ; UMLV ã Transfert fonction TRANSFERT (L, M Listes, p, q Adresses) : Adresse ; début temp ¬ q->succ ; q->succ ¬ temp->succ ; temp->succ ¬ p->succ ; p->succ ¬ temp ; retour ( temp ) ; fin . Temps constant si implémentation par pointeurs ou curseurs

Ajout/Suppression UMLV ã Listes possédant une tête de liste LIBRE : liste des cellules disponibles fonction AJOUTER (L Liste, p Adresse, e Element) : Liste ; début si Vide (LIBRE) alors erreur (“mémoire saturée”) sinon temp ¬ TRANSFERT (L, LIBRE, p, LIBRE) ; temp->elt ¬ e ; retour ( L ) ; fin.

UMLV ã fonction ENLEVER (L Liste, p Adresse) : Liste ; début si p->succ est défini alors TRANSFERT (LIBRE, L, LIBRE, p) ; retour (L) ; fin.

Tout ajout se fait après une cellule UMLV ã Tête de liste L = (e1, e2, …, en) e1 en Tête de liste Ajout en tête = ajout après Tête(L) Tout ajout se fait après une cellule

… sinon UMLV ã e fonction AJOUTER_en_TETE (L Liste, e Element) Liste ; début temp ¬ adresse d ’une nouvelle cellule ; temp->elt ¬ e ; temp->succ ¬ L ; L ¬ temp ; retour (L) ; fin .

Sentinelle UMLV ã Accélère la recherche séquentielle fonction Place (e Element, L Liste) : Adresse ; début Sentinelle->elt ¬ e ; p ¬ Tête (L) ; tant que p->elt  e faire p ¬ p->succ ; si p = Sentinelle alors retour (NULL) sinon retour (p) ; fin

UMLV ã Variations Double chaînage e2 e1 e3 en L e1 en L e1 en

Pile en sommet e3 e2 e1 UMLV ã Liste avec accès par une seule extrémité liste LIFO : « Last In First Out » Opérations Pile_vide : ® Pile Empiler : Pile x Elément ® Pile Dépiler : Pile ® Pile Sommet : Pile ® Elément Vide : Pile ® Booléen Axiomes Dépiler (P) et Sommet (P) défini ssi Vide (P) = faux Dépiler (Empiler (P, e)) = P Sommet (Empiler (P, e)) = e Vide (Pile_vide) = vrai Vide (Empiler (P, e)) = faux e2 e3 en e1 sommet

1 pile 2 piles > 2 piles sommet en Listes chaînées e2 e1 UMLV ã Implémentations possibles 1 pile 2 piles > 2 piles sommet S1 Pile 1 en Listes chaînées e2 S2 e1 Pile 2 Elt

Tours de Hanoï UMLV ã a b c Coup : x-y = déplacement d ’un disque de x vers y H (n, x, y, z) = suite de coups pour déplacer n disques de x vers y avec le baton intermédiaire z x-y si n = 1 H (n-1, x, z, y) . x-y . H (n-1, z, y, x) si n > 1 H (n, x, y, z) =

UMLV ã fonction H (n, x, y, z) ; / * version itérative */ début P  Pile_vide ; Empiler (P, (n, x, y, z)) ; tant que non Vide (P) faire début e  Sommet (P) ; Dépiler (P) ; si e = x’-y’ ou e = (1, x’, y’, z’) alors écrire (x’-y’) sinon début /* e = (n, x’, y’, z’) */ Empiler (P, (n-1, z’, y’, x’)) ; Empiler (P, x’-y’) ; Empiler (P, (n-1, x’, z’, y’)) ; fin fin .

Pile en table UMLV ã Type Pile = structure { somm : -1 .. MAX ; elt : table [0 .. MAX] of Element ; } fonction Pile_vide (P Pile) : Pile ; début P.somm  -1 ; retour (P) ; fin ; fonction Empiler (P Pile, e Element) : Pile ; début si P.somm = MAX alors erreur sinon début P.somm  P.somm + 1 ; P.elt [P.somm]  e ; retour (P) fin fin ;

UMLV ã fonction Dépiler (P Pile) : Pile ; début si Vide (P) alors erreur ; sinon début P.somm  P.somm - 1 ; retour (P) ; fin fin ; fonction Sommet (P Pile) : Element ; début si Vide (P) alors erreur sinon retour (P.elt [P.somm]) ; fonction Vide (P Pile) : booléen ; début retour (P.somm = -1) ;

File UMLV ã Liste d’attente, queue liste FIFO : « First In First Out » Opérations File_vide :  File Ajouter : File x Element  File Enlever : File  File Premier : File  Element Vide : File  Booléen Axiomes Enlever (F) et Premier (F) définis ssi Vide (F) = faux Vide (F) = vrai  Premier (Ajouter (F, e)) = e Vide (F) = faux  Premier (Ajouter (F, e)) = Premier (F) Vide (F) = vrai  Enlever (Ajouter (F, e)) = file_vide Vide (F) = faux  Enlever (Ajouter (F, e)) = Ajouter (Enlever (F, e)) Vide (file_vide) = vrai Vide (Ajouter (F,e)) = faux

ei UMLV ã Implémentations possibles F = (e1, e2, …, en) 1 2 1 2 Succ ( i ) = i + 1 mod MAX Condition : MAX  max | F | + 1 F en Queue Tête e1 ei MAX -1

File Chaînée UMLV ã Types File = cellule * ; cellule = structure { elt  : Element ; succ  : File ; } fonction File_vide (F File)  : File ; début créer une cellule d'adresse F ; F->succ  F ; retour ( F ) ; fin ; fonction Ajouter (F File, e Element)  : File ; F->elt  e ; Transfert (F, LIBRE, F, Tête (LIBRE)) ; F  F->succ ; retour ( F)

en e1 e2 en-1 o o o o o F o ajout de e en o e o e1 e2 en-1 o o o F o UMLV ã en e1 e2 en-1 o o o o o F o ajout de e en o e o e1 e2 en-1 o o o F o en e1 e2 o e o o o o en-1 o F o en temps constant

UMLV ã fonction Enlever (F File )  : File ; début Transfert ( LIBRE, F, Tête ( LIBRE), F ) ; retour ( F) ; fin ; fonction Premier ( F File )  : File ; retour ( F->succ->elt ) ; fonction Vide ( F File )  : Booléen ; retour ( F = F->succ ) ;

Ensemble UMLV ã Ensembles de base Sous-ensembles finis de E Opérations principales Union, Intersection, Partition, … Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever : Ens x Elément  Ens Elément : Ens x Elément  Booléen Vide : Ens  Booléen Implémentations dépendantes du type d'opérations élémentaires Vecteurs booléens, Tables, Tables hachées, Listes chaînées, Arbre de recherche, ...

R R Polynomes UMLV ã Ensemble Opérations somme : Poly x Poly  Poly produit  : Poly x Poly  Poly Valeur  : Poly x Réel  Réel, … Axiomes structure d'anneau, … Implémentations possibles coeff a0 a1 -------------- an ---------- 0 1 n MAX degré P o o 0 a0 o 1 a1 o n an o