Piles, files et listes: notions théoriques

Slides:



Advertisements
Présentations similaires
Iceberg Cube Ne calculer que les cellules du datacube dont le nombre d'occurences satisfait la condition : HAVING COUNT(*) >= minsup Motivation Supposons.
Advertisements

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 5 Structures de données abstraites.
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Sémantique des déclarations pour le langage Z minimal
Introduction: Concepts de la programmation
Similitude et dissimilitude dans les systèmes dinformation Philippe Balbiani Institut de recherche en informatique de Toulouse.
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Sensibilisation à l’Algorithmique
Au programme du jour …. Un peu plus de structures de données
Introduction à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Algorithme et structure de données
Fonctionnement du moteur Prolog
A.Faÿ 1 Recherche opérationnelle Résumé de cours.
Les structures de données
Nicolas Bourbaki.
Chap. 1 Structures séquentielles : listes linéaires
Chapitre VI. Arbres (définition, parcours, représentation)
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Algo-Prog en Ada TD1 2 MIC Romaric GUILLERM
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.
OCaml - Les listes L3 MI.
Démarche de résolution de problèmes
Les piles Djamal Rebaïne.
OCaml – Les arbres L3 MI.
Les structures de données arborescentes
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.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Programmation fonctionnelle Le langage LISP
Structures de données IFT-2000
Etude dune bibliothèque: Permutations sur les listes.
LES ARBRES IUP 2 Génie Informatique
Code des opérateurs Appartenance à une liste ( appartient_l ) –Prototype: Bool appartient_l(type_el x, liste L) –Pré-conditions: aucunes. –Post-conditions:
IFT-10541A : Hiver 2003 Semaine 5 : Piles et files.
Structures de données IFT-2000
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 Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Présentation Structures de Données et TDA

Les bases des probabilités
Séance d’introduction
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Le langage C Structures de données
Les structures de données séquentielles contiguës
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Ch. PAUL - Piles et Files à l'aide de listes chainées
Spécification de programmes et de systèmes
LES PILES ET FILES.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
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 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
Introduction et Généralités sur l’Algorithmique
Algorithmique et Conception Objet
1 Listes des méthodes de la classe string, et exemples.
LOGIQUE ET PROGRAMMATION LOGIQUE
1.1: notions de bases de l’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.
LES TABLEAUX Définition: Création d’un tableau:
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Transcription de la présentation:

Piles, files et listes: notions théoriques Propriétés des structures linéaires Applications de chaque structure de données Spécifications algébriques Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

Propriétés des structures linéaires Les structures de données dites linéaires sont les listes, les piles et les files. Listes: structures linéaires générales. Ce qui les caractérise est le parcours linéaire: on n’accède à une valeur qu’à travers les précédentes ou les suivantes. Insertion et effacement en un nombre constant d’opérations, mais l’accès prend plusieurs opérations. Pour un tableau ce serait le contraire. Piles: structures linéaires qu’on n’accède que par une de ses extrémités. Insertion, effacement uniquement par cette extrémité. On appelle parfois les piles les structures LIFO ou Last-in First-out c’est-à-dire dernier arrivé premier sorti, ce qui décrit le protocole d’insertion/effacement. File: structures linéaires qu’on accède par les deux extrémités mais une sert à l’insertion alors que l’autre sert à l’effacement uniquement. On appelle parfois les files les structures FIFO ou First-in First-out c’est-à-dire premier arrivé premier sorti, ce qui décrit le protocole d’insertion/effacement. Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

Applications des structures de données linéaires Listes: Elles servent comme les tableaux à gérer dynamiquement des ensembles de valeurs. On les préfère aux tableaux quand on doit insérer-effacer souvent des valeurs et qu’un ordre existe entre les éléments. Les langages de programmation déclarative (de très haut niveau) s’en servent comme structure principale: Lisp, Scheme, Caml, ML, Haskell, Python, Prolog etc. Piles: On utilise une pile partout où il faut mémoriser son chemin et parfois rebrousser chemin: parcours d’un graphe (le fil d’Ariane est une pile), parcours d’un arbre, exécution des blocs d’un programme et des appels de fonctions, compilation d’un arbre syntaxique en langage cible etc. Files: On utilise une file quand il faut simuler une file d’attente et/ou conserver à la sortie l’ordre des éléments insérés à l’entrée: canal de communication, lecture/écriture d’un fichier, simulation de circuit intégré, simulation de systèmes à événements discrets (réseaux de transport, réseaux de télécom etc). Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

Spécifications algébriques Les spécifications algébriques sont des ensembles de déclarations, comme les spécifications des paquetages Ada, auxquelles on ajoute des axiomes. Ces derniers représentent les propriétés dynamiques des structures de données et constituent un cahier des charges pour toute implantation correcte. Nous allons montrer des spécifications pour les piles, les files puis une pour les opérations les plus simples sur les listes et enfin une spécification plus complète pour des opérations sur les listes. Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

spec PILE0 {Piles generiques de taille non-bornee} etend BOOL0, NAT0 sorte S, Pile {S= sorte des objets de base en pratique on utilise PILE0[S:=Ma_sorte_preferee] } operations pilenouv: -> Pile { constructeur: pile vide } empiler: Pile S -> Pile { constructeur } depiler: Pile -> Pile remplacer: Pile S -> Pile { remplacer le sommet} sommet: Pile -> S vide: Pile -> Bool { vacuite } hauteur: Pile -> Nat preconditions p:Pile; x:S pre( sommet(p)) = ~ (vide(p)) pre( depiler(p)) = ~ (vide(p)) pre(remplacer(p,x)) = ~ (vide(p)) Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

(p1) vide(pilenouv) = vrai (p2) hauteur(pilenouv) = 0 axiomes p:Pile; x:S (p1) vide(pilenouv) = vrai (p2) hauteur(pilenouv) = 0 (p3) vide(empiler(p,x)) = faux (p4) hauteur(empiler(p,x)) = hauteur(p) + 1 (p5) sommet(empiler(p,x)) = x (p6) depiler(empiler(p,x)) = p (p7) remplacer(p,x) = empiler(depiler(p),x) fspec Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

spec FILE0 {Files generiques de taille non-bornee} etend BOOL0, NAT0 sorte S , File {S= sorte des objets de base} operations filenouv: -> File {constructeur: file vide} adjq: File S -> File {constructeur: adjoindre a la queue.} supt: File -> File {supprimer la tete} tete: File -> S {element de tete} vide: File -> Bool {vacuite} lgr: File -> Nat {longueur} preconditions pre(tete(f)) = ~ vide(f) pre(supt(f)) = ~ vide(f) axiomes p:Pile; x:S (f1) vide(filenouv) = vrai (f2) lgr(filenouv) = 0 (f3) vide(adjq(f,x)) = faux (f4) lgr(adjq(f,x)) = lgr(f) + 1 (f5) tete(adjq(f,x)) = si vide(f) alors x sinon tete(f) fsi (f6) supt(adjq(f,x)) = si vide(f) alors filenouv sinon adjq(supt(f),x) fsi fspec Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

spec LISTE0 {Listes generiques de taille non-bornee} etend BOOL0, NAT0 sorte S , Liste {S= sorte des objets de base} operations listenouv: -> Liste { constructeur: liste vide } adjt: Liste S -> Liste {constructeur: adjoindre a la tete} supt: Liste -> Liste { supprimer la tete} tete: Liste -> S { element de tete } vide: Liste -> Bool { vacuite } lgr: Liste -> Nat { longueur } preconditions l:Liste pre(tete(l)) = ~ vide(l) pre(supt(l)) = ~ vide(l) axiomes l:Liste; x:S (l1) vide(listenouv) = vrai (l2) lgr(listenouv) = 0 (l3) vide(adjt(l,x)) = faux (l4) lgr(adjt(l,x)) = lgr(l) + 1 (l5) tete(adjt(l,x)) = x (l6) supt(adjt(l,x)) = l fspec Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains

spec LISTE1 {Extension de LISTE0 avec de nouvelles operations} etend LISTE0 {On suppose une operations d'egalite == sur S} operations app: Liste S -> Bool { appartenance } _[_]: Liste Nat -> S { l[i]= i-eme element de l } queue: Liste -> S { element de queue } adjq: Liste S -> Liste { adjoindre a la queue } conc: Liste Liste -> Liste { concatenation } supq: Liste -> Liste { supprimer la queue } preconditions l:Liste; x:S; i:Nat pre(l[i]) = 0 < i /\ i <= lgr(l) pre(queue(l)) = ~ vide(l) pre(supq(l)) = ~ vide(l) axiomes (l7) app(listenouv,x) = faux (l8) app(adjt(l,y),x) = x==y \/ app(l,x) (l9) l[1] = tete(l) (l10) adjt(l,x)[succ(i)] = l[i] (l11) queue(l) = l[lgr(l)] (l12) adjq(listenouv,x) = adjt(listenouv,x) (l13) adjq(adjt(l,y),x) = adjt(adjq(l,x),y) { ... a completer: definition de concaténation ... } fspec Licence informatique 2006-2007. Introduction à l’algorithmique. G. Hains