COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On...

43
COURS INFORMATIQUE : PILES PC PICON PICON COURS INFORMATIQUE : PILES 1 / 43

Transcript of COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On...

Page 1: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

COURS INFORMATIQUE : PILESPC

PICON

PICON COURS INFORMATIQUE : PILES 1 / 43

Page 2: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

1 Structures de données : généralités

2 Rappels : quelques structures de données en Pythontupleslistesmatrices

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machineMise en oeuvre par listePiles à capacité bornée

5 Exercices

PICON COURS INFORMATIQUE : PILES 2 / 43

Page 3: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Sommaire

1 Structures de données : généralités

2 Rappels : quelques structures de données en Python

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machine

5 Exercices

PICON COURS INFORMATIQUE : PILES 3 / 43

Page 4: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Un langage de programmation possède des types de donnéessimples. Leur traitement est presque immédiat, très proche dutraitement du processeur.Par exemple en Python, on peut considérer comme type simpleLes entiersLes flottantsLes booléensLes caractères

PICON COURS INFORMATIQUE : PILES 4 / 43

Page 5: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Ces types de données ne permettent pas de traiter facilement lesdonnées plus complexes.Exemple : programmation d’un traitement de texte.On a donc besoin de types complexes ou composés.

PICON COURS INFORMATIQUE : PILES 5 / 43

Page 6: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Vous avez déjà vu des types composés en Python par exempleles complexes,les tuples,les listes,les chaînes de caractères, (c’est un peu faux en Python)les matrices du module numpy.

PICON COURS INFORMATIQUE : PILES 6 / 43

Page 7: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Il en existe d’autres, les dictionnaires par exemple.

En réalité, Python est un langage orienté objet assez peu structuré etla notion de type simple est modifié par la notion de classe.

PICON COURS INFORMATIQUE : PILES 7 / 43

Page 8: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Conséquence : on crée des types de données complexes pourrépondre à une tache précise.Par exemple :les tuples pour ordonner différents objetsles listes pour ordonner et traiter différents objetsles matrices pour les sciences mais aussi le traitement d’imageles chaînes de caractères pour traiter du texte

PICON COURS INFORMATIQUE : PILES 8 / 43

Page 9: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Créer une structure de donnée c’est :Organiser des types simples de façon structurée en vue de les traiterCréer les opérations de traitement.

PICON COURS INFORMATIQUE : PILES 9 / 43

Page 10: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Structures de données, généralités

Cette création peut être ordonnée par l’algorithme en vue de traiterun problème.En fait souvent la réflexion sur le type de structure de donnée estpréalable à l’algorithme.Il s’agit ensuite de mettre en œuvre dans le langage deprogrammation donné le nouveau type de données et l’algorithme.

PICON COURS INFORMATIQUE : PILES 10 / 43

Page 11: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Selon le langage de programmation, les types structurés classiquespeuvent être déjà en place (on dit implémentés) ou bien doivent êtreprogrammés.En Fortran (langage très scientifique), les matrices sontimplémentées.En Python, elles sont dans un module numpy. Si on n’a pas cemodule, il faut reprogrammer toutes les opérations.

PICON COURS INFORMATIQUE : PILES 11 / 43

Page 12: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Sommaire

1 Structures de données : généralités

2 Rappels : quelques structures de données en Pythontupleslistesmatrices

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machine

5 Exercices

PICON COURS INFORMATIQUE : PILES 12 / 43

Page 13: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Prenons l’exemple des tuples

Mise en oeuvre en machine

Organiser les données :Créer une case mémoire pour chaque élément du tupleCréer une chaîne d’adresses pour reconstituer l’ordre du tuple

PICON COURS INFORMATIQUE : PILES 13 / 43

Page 14: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

TraitementAccéder à un élémentConnaître la longueur du tuple.

On rentre un tuple l’ouverture d’une parenthèse :

>>> A=("e",4,3.8,’ceci est une phrase’)

On accède à un élément par son numéro

>>> A[2]3.8

Et comme d’habitude on commence par 0On récupère la longueur par

>>> len(A)4

PICON COURS INFORMATIQUE : PILES 14 / 43

Page 15: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

À quoi ça sert un tuple ?

À aller plus vite qu’avec les listes.À être sur qu’on ne modifie pas les données.À pouvoir être parcouru, par une variable par exemple.

PICON COURS INFORMATIQUE : PILES 15 / 43

Page 16: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Rappels sur les listes en Python

Une liste est une structure souple qui peut grandir ou rétrécir àvolonté. Ses éléments sont accessibles à tout moment, peuvent êtreinsérés ou supprimés à n’importe quel endroit. On peut concaténerou diviser une liste.Les opérations de base sur les listes sont

Insérer un élément à une position

Localiser un élément x en retournant la première position où ilapparaît et un code s’il n’apparaît pas.

Accéder à un élément en position p sans le retirer.

Supprimer l’élément en position p.

Accéder au précédent ou au suivant de l’élément en position p.

Remettre à zéro la liste.

Vérifier si la liste est non vide.

Lister tous les éléments.PICON COURS INFORMATIQUE : PILES 16 / 43

Page 17: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Python gère une particularité dans les listes : les données peuventêtre de type différents (des chaînes de caractères, des entiers, desflottants etc.)

PICON COURS INFORMATIQUE : PILES 17 / 43

Page 18: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Entrer une liste :

>>> A=["e",4,3.8,’ceci est une phrase’]

Une liste est entourée par des crochets.Principales commandes :On accède et on peut modifier un élément de la liste

>>> A[2]=1>>> A[’e’, 4, 1, ’ceci est une phrase’]

On a sa longueur par

>>> len(A)4

PICON COURS INFORMATIQUE : PILES 18 / 43

Page 19: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

On peut ajouter un élément à la fin

>>> A.append("nouveau")>>> A[’e’, 4, 1, ’ceci est une phrase’, ’nouveau’]

On peut aussi insérer

>>> A.insert(2,"*****")>>> A[’e’, 4, ’*****’, 1, ’ceci est une phrase’, ’nouveau’]

Ou bien enlever un élément précis

>>> A=[2,3,5,2,3]>>> A.remove(3)>>> A[2,5,2,3]

PICON COURS INFORMATIQUE : PILES 19 / 43

Page 20: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Ou bien enlever un élément indexé

>>> A=[2,3,5,2,3]>>> del A[2]>>> A[2,3,2,3]

PICON COURS INFORMATIQUE : PILES 20 / 43

Page 21: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

On peut concaténer des listes

>>> A=[1,3,5]>>> B=[2,8,7]>>> A+B[1, 3, 5, 2, 8, 7]

Multiplier ! ! !

>>> A=[1,3,5]>>> A*3[1, 3, 5, 1, 3, 5, 1, 3, 5]

Bien sur, on multiplie par un entierOn peut chercher si un élément est dans la liste

>>> 4 in AFalse>>> 5 in ATrue

PICON COURS INFORMATIQUE : PILES 21 / 43

Page 22: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Cas particulier de la copie La copie indépendante de B dans A se faitpar

>>>A=B[:]

ou par la méthode copy qui est plus générale

>>>A=B.copy()

PICON COURS INFORMATIQUE : PILES 22 / 43

Page 23: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Rappels sur les matrices de numpy en Python.Sera fait TD prochain

PICON COURS INFORMATIQUE : PILES 23 / 43

Page 24: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Sommaire

1 Structures de données : généralités

2 Rappels : quelques structures de données en Python

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machine

5 Exercices

PICON COURS INFORMATIQUE : PILES 24 / 43

Page 25: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Empiler Dépiler

On doit stocker des données (d’un même type ?) avant traitementindividuel. On empile les données en mémoire et on fait s’en fait unereprésentation du type pile d’assiette

Les éléments sont ajoutés par le haut.

PICON COURS INFORMATIQUE : PILES 25 / 43

Page 26: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Dans l’absolu, la mémoire est considérée comme infinie. On ne sesoucie pas du nombre d’éléments empilés.En réalité on peut avoir des limitations de place et la pile peut avoirune taille maximale mais c’est toujours précisé.En particulier si on utilise un tableau de taille fixe pour stocker unepile, il faudra gérer le problème de la taille.Si on utilise une liste chaînée pour stocker une pile on peut avoir unetaille qui n’est limitée que par les problèmes matériels.Exemples :pile d’une calculatrice. (taille fixe)Pile d’un processeur (taille fixe).Pile des données avant le passage par un bus vers le processeur(taille variable).En fait, pour un ordinateur on considère que les supports externesgèrerons le besoin en mémoire et que la mémoire est donc infinie.

PICON COURS INFORMATIQUE : PILES 26 / 43

Page 27: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Dépiler : par qui commencer ?

PICON COURS INFORMATIQUE : PILES 27 / 43

Page 28: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Si on commence par le premier arrivé c’est une FILE, principe de lafile d’attente (QUEUE en anglais :)

Appellation commune : FIRST IN FIRST OUT FIFO

PICON COURS INFORMATIQUE : PILES 28 / 43

Page 29: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Si on commence par le dernier arrivé, c’est une PILE,principe de la pile d’assiettes (anglais : STACK)

Appellation commune : LAST IN FIRST OUT LIFOC’est ceci qui est au programme d’informatique.

PICON COURS INFORMATIQUE : PILES 29 / 43

Page 30: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Une pile est donc un type particulier de liste dans lequel touteinsertion ou suppression d’éléments se fait à une extrémité appeléele "dessus" ou le "sommet".Quelles sont les opérations "primitives" à faire sur une pile ?

PICON COURS INFORMATIQUE : PILES 30 / 43

Page 31: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

LES OPERATIONS PRIMITIVES SUR LES PILES

Remettre la pile P à zéro ou la créer vide RAZ(P)

Supprimer l’élément au sommet de la pile P DEPILER(P)

Retourner l’élément au sommet de la pile P (sans le dépiler)SOMMET(P)

Insérer l’élément x au sommet de la pile P EMPILER(x,P)

Savoir si une pile est vide par retour d’un booléen VIDE(P)

PICON COURS INFORMATIQUE : PILES 31 / 43

Page 32: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Exemple 1

La pile d’une calculatrice.

On considère que la machine stocke toutes les données (nombre,opération, parenthèse, résultat) tant qu’elle ne peut pas calculer.Cette machine reconnaît les priorités opératoires.Décrire l’état de la pile d’une calculatrice lors du calcul :(2+3)×5+3× (2+8) =Donner les primitives utilisées.Quelle taille doit avoir la pile de calcul de la calculatrice pour pouvoireffectuer ce calcul ?

PICON COURS INFORMATIQUE : PILES 32 / 43

Page 33: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Exemple 2

Fonctionnement d’un éditeur de texte :Les éditeurs de texte permettent l’utilisation d’une touche spécifiquepour effacer le dernier caractère et ainsi de suite pour tout caractèresur une ligne. Cette touche génère un caractère spécial que l’onnotera # pour cet exemple. Il y a une autre combinaison de touchespour détruire l’ensemble du contenu de la ligne. On notera @ lecaractère ainsi envoyé par le clavier. L’éditeur traite la ligne decaractère à l’aide d’une pile.Décrire les états successifs de la pile lors de la frappe de la ligneabd##edeab@bedkl#2#1dfDécrire les primitives mises en œuvre lors des différentes étapes.

PICON COURS INFORMATIQUE : PILES 33 / 43

Page 34: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Sommaire

1 Structures de données : généralités

2 Rappels : quelques structures de données en Python

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machineMise en oeuvre par listePiles à capacité bornée

5 Exercices

PICON COURS INFORMATIQUE : PILES 34 / 43

Page 35: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Avec la structure de liste, on n’a ni à gérer la taille de la pile, ni àavoir des données de type homogène.Certaines primitives sont directement des fonctions ou méthodes dePython, d’autres doivent être programmées.

PICON COURS INFORMATIQUE : PILES 35 / 43

Page 36: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Remettre à zéro P :

P=[]

Insérer x au sommet de P :

P.append(x)

Dépiler l’élément au sommet de P (en le supprimant de la pile)

P.pop()

À améliorer si on ne veut pas d’erreurs....

Élément au sommet sans dépiler :

def sommet(P):a=P.pop(P)P.append(a)return a

À améliorer si on ne veut pas d’erreurs....

PICON COURS INFORMATIQUE : PILES 36 / 43

Page 37: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

• Savoir si une pile est vide

def Vide(P):#renvoie vrai si la liste est vide

return len(P)==0

PICON COURS INFORMATIQUE : PILES 37 / 43

Page 38: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

On représente encore la pile par un tableau à une dimension de taillefixe c’est à dire des places mémoires contigues mais on a besoin d’uncurseur pour savoir à quel moment s’arrête les données de la pile.Donc la pile est une liste contenant un entier et un tableau.Si les données sont de type homogène on peut utiliser le type arraypour le tableau, sinon il faudra travailler avec une liste.En Python on peut considérer plusieurs méthodes pour simuler despiles à capacité bornée mais si on n’utilise pas de tableau, on ne tirepas parti du fait que les données sont contigues.La différence principale entre une pile à capacité finie et une pile àcapacité infinie est qu’il faut tester si la pile n’est pas pleine lorsqu’onempile.

PICON COURS INFORMATIQUE : PILES 38 / 43

Page 39: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Primitives d’une pile à capacité bornée

Codage utilisé : une liste dont le premier élément est la taille de lapile, les suivants sont les éléments de la liste. Le nombre d’élémentsne peut dépasser M.Écrire les primitives d’une pile dans cette représentation.

PICON COURS INFORMATIQUE : PILES 39 / 43

Page 40: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Sommaire

1 Structures de données : généralités

2 Rappels : quelques structures de données en Python

3 Empiler, dépiler

4 Mise en œuvre des piles en Python et en machine

5 Exercices

PICON COURS INFORMATIQUE : PILES 40 / 43

Page 41: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Exercice 1.Écrire une fonction qui permet de prendre deux piles et d’empilerdans l’ordre les éléments de la seconde dans la première.Décomposer ce problème en deux parties.Quelque part il faut s’avoir renverser l’ordre des éléments d’une pile.Complexité.Invariants de bouclesPreuve de terminaison.

PICON COURS INFORMATIQUE : PILES 41 / 43

Page 42: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Exercice 2.Écrire une fonction qui teste si deux piles sont égales. Résultatbooléen.

PICON COURS INFORMATIQUE : PILES 42 / 43

Page 43: COURS INFORMATIQUE : PILES - PCaf.picon.pagesperso-orange.fr/archiveinfo/cours_pilesimp.pdf · On représente encore la pile par un tableau à une dimension de taille fixe c’est

Exercice 3.On donne une chaîne de caractères ne contenant que desparenthèses.Utiliser une pile pour vérifier que le parenthésage est correct.Existe-t-il une autre manière de vérifier ?

PICON COURS INFORMATIQUE : PILES 43 / 43