structuredepiles · 12/2/2016  · définition applications implémentations files...

54
Définition Applications Implémentations Files Notation postfixée Structure de piles Émeric Tourniaire 15 novembre 2016

Upload: others

Post on 05-Sep-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Structure de piles

Émeric Tourniaire

15 novembre 2016

Page 2: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Table of contents

Définition

Applications

Implémentations

Files

Notation postfixée

Page 3: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Type abstrait

• Données à stocker• Lien logique• Définition mathématique• Opérations possibles

Page 4: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Type abstrait

• Données à stocker• Lien logique• Définition mathématique• Opérations possibles

Exemple 1 :• Annuaire téléphonique• Ensemble de triplets (nom, adresses, numéros)• Recherche par nom ? Par adresse ? Par numéro ?• Changer un numéro ? Une adresse ?

Page 5: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Type abstrait

• Données à stocker• Lien logique• Définition mathématique• Opérations possibles

Exemple 2 :• Ensemble de nombres entiers• A ⊂ Z• Créer {n} pour n ∈ Z• A ∪ B, A ∩ B, A− B, x ∈ A, . . .

Page 6: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Type abstrait

• Données à stocker• Lien logique• Définition mathématique• Opérations possibles

Exemple 3 :• Système de fichiers• Structure d’arbre• Créer un répertoire, déplacer des fichiers• Renommer un fichier, gérer des permissions, . . .

Page 7: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Structure de donnée

• Implémentation d’un type abstrait• Cahier des charges• Complexité des opérations• Confusion entre la structure et son type abstrait

Page 8: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide14426

64214

Page 9: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide

14

426

64214

Page 10: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide

1442

6

64214

Page 11: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide

14426

64214

Page 12: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide

1442

6

6

4214

Page 13: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide

14

426

6

42

14

Page 14: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide14426

642

14

Page 15: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Last In First Out• Créer une pile vide• Ajouter un élément• Retirer l’élément en tête

• Tester si la pile est vide14426

64214

Page 16: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

PileType abstrait

• Créer une pile vide : new_stack()• Ajouter un élément : pile.push(a)• Retirer l’élément en tête : a = pile.pop()• Tester si la pile est vide : is_empty(pile)

Page 17: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0res = 1res = 2res = 3return(res)

14426

Page 18: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0

res = 1res = 2res = 3return(res)

14426

Page 19: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0

res = 1res = 2res = 3return(res)

14426

Page 20: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

1442

6

res = 0

res = 1

res = 2res = 3return(res)

1442

6

Page 21: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14

426

res = 0res = 1

res = 2

res = 3return(res)

14

426

Page 22: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0res = 1res = 2

res = 3

return(res)

14426

Page 23: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14

426

res = 0res = 1res = 2

res = 3

return(res)

14

426

Page 24: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

1442

6

res = 0res = 1res = 2

res = 3

return(res)

1442

6

Page 25: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0res = 1res = 2

res = 3

return(res)

14426

Page 26: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

14426

res = 0res = 1res = 2res = 3

return(res)

14426

Page 27: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Compter les éléments d’une pile(sans la modifier)

def nbr_elements(pile):temp = new_stack()res = 0while not is_empty(pile):

res = res+1temp.push(pile.pop())

while not is_empty(temp):pile.push(temp.pop())

return res

Page 28: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Historique de navigation

• Empiler quand on clique sur un lien

• Dépiler quand on appuie sur• Pourquoi la pile n’est pas recopiée quand on ouvre un nouvelonglet ?

Page 29: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Bouton undo sur un éditeur

• Pile des modifications d’un document• ˆZ permet d’annuler les dernières modifications

• Une annulation n’est pas une modification• Cette pile est-elle enregistrée dans le fichier ?

Page 30: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Bouton undo sur un éditeur

• Pile des modifications d’un document• ˆZ permet d’annuler les dernières modifications• Une annulation n’est pas une modification

• Cette pile est-elle enregistrée dans le fichier ?

Page 31: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Bouton undo sur un éditeur

• Pile des modifications d’un document• ˆZ permet d’annuler les dernières modifications• Une annulation n’est pas une modification• Cette pile est-elle enregistrée dans le fichier ?

Page 32: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Aparté : gestionnaire de version

• diff évalue la différence entre deux fichiers, en trouvant leslignes identiques.

• rsync synchronise deux répertoires.• Systèmes de version (svn, git)• Problème si les fichiers diffèrent trop (PDF, wordlike, etc.)

Page 33: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Aparté : gestionnaire de version

Page 34: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Aparté : gestionnaire de version

• diff évalue la différence entre deux fichiers, en trouvant leslignes identiques.

• rsync synchronise deux répertoires.• Systèmes de version (svn, git)• Problème si les fichiers diffèrent trop (PDF, wordlike, etc.)

Page 35: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Aparté : gestionnaire de version

• diff évalue la différence entre deux fichiers, en trouvant leslignes identiques.

• rsync synchronise deux répertoires.• Systèmes de version (svn, git)• Problème si les fichiers diffèrent trop (PDF, wordlike, etc.)

Page 36: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Aparté : gestionnaire de version• diff évalue la différence entre deux fichiers, en trouvant leslignes identiques.

• rsync synchronise deux répertoires.• Systèmes de version (svn, git)• Problème si les fichiers diffèrent trop (PDF, wordlike, etc.)

Page 37: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Problème de piles : tour de Hanoï

• n cylindres empilés.• Objectif : les changer de pile• Règles :

• On ne peut déplacerqu’un cylindre à la fois.

• On ne peut pas déplacerun cylindre sur un cylindreplus petit.

Page 38: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Autres applications(spoiler alert)

• Récursivité• Notation postfixe• Files

Page 39: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Liste simplement chainée

• Rien (None ou [])• Liste de 2 choses• Un élément (la tête)• Une liste simplement chainée

Page 40: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

En Python

def newpile():return([])

def push(elem,pile):return([elem,pile])

def pop(pile):if len(pile)==0:raise(IndexError)

else:return(pile[0],pile[1])

pile = newpile()pile = push(14,pile)pile = push(42,pile)a,pile = pop(pile)a

Page 41: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Tableau dynamique

• Listes par défaut en python• Ajouter un élément ou l’enlever• Comment ça marche ?

• Fonctionnalités en plus : len(pile) ou pile[k]

Page 42: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Tableau dynamique

• Listes par défaut en python• Ajouter un élément ou l’enlever• Comment ça marche ?• Fonctionnalités en plus : len(pile) ou pile[k]

Page 43: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

En Python

• Nouvelle pile :pile = []

• Ajouter un élément :pile.append(14)

• Tester si la pile est vide :pile == []len(pile) == 0

• Sortir la tête de la pile :a = pile.pop()

• Taille de la pile :len(pile)

• Indexation (peu utile) :pile[k]

ComplexitéToutes ces opérations sont en O(1) (éventuellement amorti)

Page 44: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Exercices

• Écrire une fonction palindrome(chaine) qui détecte sichaine est un palindrome, en utilisant une pile.

• Écrire une fonction bien_parenthesee(chaine) qui doitrenvoyer True si et seulement si chaine est une suite de (, ),{, ou } bien parenthésée.

Page 45: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Exercices

def palindrome(chaine):pile = []n = len(chaine)for i in range(n):

#print(pile)if i < n//2:

pile.append(chaine[i])if i > (n-1)//2:

if chaine[i] != pile.pop():return False

return True

Page 46: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Les files

• First In First out• File d’attente (magasin, routeur, multitâches)• Sortir d’un labyrinthe

Page 47: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Primitives

• Créer une file vide : new_queue()• Ajouter un élément : enqueue(file,a)• Retirer l’élément en tête : a = dequeue(file)Rappel : il s’agit de l’élément qui est depuis le plus longtempsdans la file.

• Tester si la file est vide : is_empty(file)

Page 48: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Implémentation

• On utilise deux piles

• def new_queue():return([],[])

• enqueue(file,a)• dequeue(file)• is_empty(file)

Page 49: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Implémentation

• On utilise deux piles

• def new_queue():return([],[])

• enqueue(file,a)• dequeue(file)• is_empty(file)

def is_empty(file):p0 = file[0]p1 = file[1]return len(p1)+len(p2) == 0

Page 50: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Implémentation

• On utilise deux piles

• def new_queue():return([],[])

• enqueue(file,a)• dequeue(file)• is_empty(file)

def enqueue(a,file):p1 = file[1]p1.append(a)

Page 51: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Implémentation

• On utilise deux piles

• def new_queue():return([],[])

• enqueue(file,a)• dequeue(file)• is_empty(file)

def flip(p1,p0):while len(p1)>0:

p0.append(p1.pop())

def dequeue(file):p0 = file[0]p1 = file[1]if len(p0) > 0:

return(p0.pop())else:

flip(p1,p0)return(p0.pop())

Page 52: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Exercice

On dispose d’un labyrinthe de n cases décrit par le tableau laby àdeux dimensions : laby[i] est la liste des cases auxquelles onpeut aller depuis la i-ème. On commence toujours à la case 0, ongagne si on arrive à accéder à la case n-1

• Écrire un programme solvable(laby) qui détermine si labya une solution ou non.

• Améliorer le programme précédent pour qu’il détermine encombien de coups on peut gagner.

Page 53: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

def resoudre(laby):file = new_queue()n = len(laby)distance = [-1 for i in range(n)]distance[0] = 0predecesseur = [-1 for i in range(n)]enqueue(0,file)while not is_empty(file) > 0 and distance[-1] == -1:

case= dequeue(file)d = distance[case]for i in laby[case]:

if distance[i] == -1:distance[i]=d+1predecesseur[i]=caseenqueue(i,file)

return(distance,predecesseur)

resoudre([[1,2],[2],[3],[]])resoudre([[1],[2],[3],[]])

Page 54: Structuredepiles · 12/2/2016  · Définition Applications Implémentations Files Notationpostfixée Typeabstrait Donnéesàstocker Lienlogique Définitionmathématique Opérationspossibles

Définition Applications Implémentations Files Notation postfixée

Notation Polonaise Inverse

Si on a le temps...