Algorithmique et Analyse d Algorithmes



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

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les structures de données. Rajae El Ouazzani

Arbres binaires de recherche


Recherche dans un tableau

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Conventions d écriture et outils de mise au point

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

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

Cours 1 : La compilation

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Algorithmique et Programmation, IMA

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Algorithmique, Structures de données et langage C

Introduction à la programmation concurrente

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Qualité du logiciel: Méthodes de test

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

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

Initiation. àl algorithmique et à la programmation. en C

Évaluation et implémentation des langages

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Programmer en JAVA. par Tama

Représentation d un entier en base b

Bases de programmation. Cours 5. Structurer les données

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

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

Chapitre 5 : Flot maximal dans un graphe

TP 1. Prise en main du langage Python

Cours de Programmation 2

UE Programmation Impérative Licence 2ème Année

UE C avancé cours 1: introduction et révisions

STAGE IREM 0- Premiers pas en Python

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Cours A7 : Temps Réel

Utilisation d objets : String et ArrayList

I. Introduction aux fonctions : les fonctions standards

UML et les Bases de Données

TP : Gestion d une image au format PGM

Structurer ses données : les tableaux. Introduction à la programmation

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Exercices INF5171 : série #3 (Automne 2012)

Cours d initiation à la programmation en C++ Johann Cuenin

TD3: tableaux avancées, première classe et chaînes

Premiers Pas en Programmation Objet : les Classes et les Objets

Compilation (INF 564)

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Initiation à la programmation en Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours d Algorithmique et de Langage C v 3.0

Algorithmique et programmation : les bases (VBA) Corrigé

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chap III : Les tableaux

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Système de Gestion de Fichiers

Cours Bases de données

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Chapitre 2. Eléments pour comprendre un énoncé

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Classes et Objets en Ocaml.

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Introduction au langage C

Processus d Informatisation

as Architecture des Systèmes d Information

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Introduction à MATLAB R

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

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

Programmes des classes préparatoires aux Grandes Ecoles

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Plus courts chemins, programmation dynamique

Introduction à la Programmation Parallèle: MPI

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

SYSTÈME DE GESTION DE FICHIERS

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Initiation à Excel. Frédéric Gava (MCF)

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Cours de Programmation Impérative: Zones de mémoires et pointeurs

V- Manipulations de nombres en binaire

Problèmes liés à la concurrence

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Transcription:

Algorithmique et Analyse d Algorithmes L3 Info Cours 5 : Structures de données linéaires Benjamin Wack 2015-2016 1 / 37

La dernière fois Logique de Hoare Dichotomie Aujourd hui Type Abstrait de Données Pile, File, File à Priorité Algorithmes de bon parenthésage 2 / 37

Plan Notion de Type Abstrait de Données Structures linéaires Pile File File à Priorité Un TAD, plusieurs implantations Bon parenthésage Version simple Parenthèses multiples Imbrication, contextes 3 / 37

Notion de Type Abstrait de Données Motivation L écriture d un algorithme efficace requiert souvent une façon adéquate : d accéder aux données de les modifier de les réorganiser Le langage fournit des types atomiques (int, float, char, bool...) pour des données simples. Pour des données complexes, c est le rôle de la structure de données définie par l utilisateur ou fournie dans une bibliothèque. 5 / 37

Notion de Type Abstrait de Données Type Abstrait de Données : pourquoi, pour qui? Ce qui est important c est l interface de la structure de données. Le TAD est un contrat entre : chef de projet (décide, spécifie) développeur (implante) utilisateur (utilise) Il dit quoi faire, comment on va s en servir, mais pas comment on doit le faire. Remarque Même les types atomiques ou les tableaux sont déjà une abstraction d une représentation concrète. On ne s amuse pas à manipuler la représentation binaire d un entier pour changer son signe! 6 / 37

Notion de Type Abstrait de Données Avantages de l approche TAD En phase de conception : permet de se concentrer sur les fonctionnalités attendues indépendant du langage on ne change pas ce que veut le client parce que c est «facile» ou «difficile» En phase de développement : on ne code pas en fonction d un scénario d utilisation privilégié démarche de test unitaire En phase d utilisation : travail à haut niveau on ne casse pas les propriétés de la structure en la manipulant directement 7 / 37

Notion de Type Abstrait de Données Définition d un TAD Nom : éventuellement paramétré par d autres types Utilise : les types de données requis Opérations autorisées (liste limitative) avec leurs profils parmi lesquelles on peut distinguer des constructeurs Préconditions de chaque opération Axiomes : généralement à propos de plusieurs opérations Les opérations = et sont définies pour tout TAD (sinon pas d axiome!). Les axiomes : ne doivent pas être contradictoires doivent permettre de prévoir le résultat de toute opération pour peu que les préconditions soient respectées Guide d écriture : toutes les combinaisons opération(constructeur) valides doivent être traitées. 8 / 37

Notion de Type Abstrait de Données À propos des opérations On prend dans ce cours le point de vue fonctionnel : Une opération sur t renvoie un nouvel objet (souvent de type t) Pas d effets de bord Pas de donnée-résultat En pratique dans la plupart des langages de programmation : Paramètres modifiables Passage par référence (C) Caractère modifiable explicite (Ada) évite les problèmes d empreinte mémoire, la gestion d un ramasse-miettes... ET/OU Objets et méthodes (Java) Sous-entend que la méthode peut modifier l objet Évite de passer la structure en paramètre Permet d utiliser la valeur de retour pour autre chose 9 / 37

Structures linéaires Notion de structure linéaire On maintient une collection dans laquelle on peut insérer et extraire des éléments. l = (a 1, a 2... a n ) éventuellement vide Pas de hiérarchie autre que celle induite par une «position» dans la structure On doit pouvoir combiner deux structures linéaires de même type par simple concaténation. (a 1, a 2... a n ).(b 1, b 2... b m ) (a 1, a 2... a n, b 1, b 2... b m ) 11 / 37

Structures linéaires Pile Aperçu Idée intuitive Semblable à une pile d assiettes. Politique : Dernier arrivé, premier servi (LIFO). Applications Appels de fonctions Parcours d arbre, de graphe avec retour arrière Parenthésage (cf fin du cours) a. insérer 4 b. insérer 2 c. extraire a b c 2 4 4 4 3 3 3 3 1 1 1 1 5 5 5 5 13 / 37

Structures linéaires Pile Spécification Nom Pile (Element) Utilise Element, bool Opérations PileVide : () Pile Empiler : Element Pile Pile EstVide : Pile bool Dépiler : Pile Pile Sommet : Pile Element Préconditions Dépiler(p) : EstVide(p) Sommet(p) : EstVide(p) Axiomes EstVide(PileVide()) = vrai EstVide(Empiler(e, p)) = faux Dépiler(Empiler(e, p)) = p Sommet(Empiler(e, p)) = e 14 / 37

Structures linéaires File Aperçu Idée intuitive Correspond à la «file d attente» des supermarchés. Politique : Premier arrivé, premier servi (FIFO). Applications Accès de plusieurs clients à une ressource (service web, imprimante, processeur) Parcours «équilibré» d arbre, de graphe insérer 4 insérer 2 extraire Entrée w 3 1 5 w Sortie w 4 3 1 5 w w 2 4 3 1 5 w w 2 4 3 1 w 16 / 37

Structures linéaires File Spécification Nom File (Element) Utilise Element, bool Opérations FileVide : () File Enfiler : Element File File EstVide : File bool Défiler : File File Tête : File Element Préconditions Défiler(f ) : EstVide(f ) Tête(f ) : EstVide(f ) Axiomes EstVide(FileVide()) = vrai EstVide(Enfiler(e, f )) = faux Tête(Enfiler(e, FileVide())) = e Tête(Enfiler(e, f )) = Tête(f ) si f non vide Défiler(Enfiler(e, FileVide())) = FileVide() Défiler(Enfiler(e, f )) = Enfiler(e, Défiler(f )) si f non vide 17 / 37

Structures linéaires File à Priorité Aperçu Idée intuitive Chaque élément est muni d une priorité. Politique : Le plus prioritaire est le premier servi. Applications Files d attente avec passe-droit Processus dans un système d exploitation Plusieurs algorithmes (cf fin du semestre) 19 / 37

Structures linéaires File à Priorité Spécification Nom FAP (Element) Utilise Element, bool, int Opérations FAPVide : () FAP Insérer : Element int FAP FAP EstVide : FAP bool Extraire : FAP FAP Prioritaire : FAP Element Préconditions Extraire(f ) : EstVide(f ) Prioritaire(f ) : EstVide(f ) 20 / 37

Structures linéaires File à Priorité Spécification de la FAP (axiomes) EstVide(FAPVide()) = vrai EstVide(Insérer(e, i, f )) = faux Prioritaire(Insérer(e, i, f )) = e si EstVide(f ) ou i > la priorité de tous les éléments de f Prioritaire(Insérer(e, i, f )) = Prioritaire(f ) si f contient un élément de priorité > i Extraire(Insérer(e, i, f )) = f si EstVide(f ) ou i > la priorité de tous les éléments de f Extraire(Insérer(e, i, f )) = Insérer(e, i, Extraire(f )) si f contient un élément de priorité > i Remarque : comportement de Extraire et Prioritaire non spécifié si f contient plusieurs éléments de priorité maximale. Dans ce cas on extrait un des éléments de priorité maximale, mais pas forcément le premier ou le dernier arrivé. 21 / 37

Un TAD, plusieurs implantations Méthodologie d implantation Choisir une représentation interne Fournir les opérations de la spécification Si possible prouver les axiomes (Programmation défensive : lever une exception si précondition non respectée) Un TAD bien fait empêche de se servir de l implantation pour court-circuiter les opérations de la spécification (modules en Ada, OCaml...). 23 / 37

Un TAD, plusieurs implantations File dans un tableau (naïve) Représentation 2 4 3 1 5 on mémorise également le nombre nb d éléments dans la file T[nb] est en tête de file, et T[1] en queue Opérations FileVide nb := 0 Défiler(f ) nb := nb - 1 Enfiler(e, f ) 2 4 3 1 5 e 2 4 3 1 5 nb := nb + 1 24 / 37

Un TAD, plusieurs implantations File dans un tableau (efficace) Représentation 2 4 3 1 5 queue tete on mémorise deux indices tete et queue Opérations FileVide tete := 1 ; queue := 1 Défiler(f ) tete := tete - 1 Enfiler(f, e) T[queue] := e queue := queue - 1 En cas de dépassement des bornes : tableau «circulaire» 3 1 5 2 4 tete queue 25 / 37

Un TAD, plusieurs implantations File dans une liste chaînée Représentation queue 2 4 3 1 5 on maintient aussi un pointeur sur le dernier élément de la liste. Attention, ce dernier élément est la queue de la file. Opérations FileVide tete Défiler(f ) queue Enfiler(f, e) 2 4 3 1 5 queue tete e 2 4 3 1 5 tete 26 / 37

Un TAD, plusieurs implantations Que choisir? Tableau Avantages : allocation unique, accès rapide, empreinte mémoire faible Inconvénients : file bornée, ou espace mémoire jamais utilisé Liste chaînée Avantages : optimisation de la mémoire, pas de borne sur la taille Inconvénients : gestion de mémoire plus lourde (avec les risques de fuite inhérents) Cela peut enfin dépendre des opérations supplémentaires voulues (chaînage double...) 27 / 37

Bon parenthésage Version simple Le problème Étant donné un «texte» (flot de caractères) comportant des parenthèses ouvrantes et fermantes, vérifier si à chaque parenthèse en correspond exactement une autre. Exemples ( ( ) ( ) ) ( ( ) ) ( ) sont bien parenthésés. ( ( ) ( ) ( ( ) ) ) ) ( ne le sont pas. Enfin le texte peut comporter des caractères «neutres» : aaa(bbb(cc)dd)e. 29 / 37

Bon parenthésage Version simple Algorithme PARENTHESAGE_SIMPLE p := PileVide() while il reste des caractères c := caractère suivant if c = ( Empiler(p, c) if c = ) if EstVide(p) return Erreur de parenthésage else Dépiler(p) if EstVide(p) return Parenthésage correct else return Erreur de parenthésage 30 / 37

Bon parenthésage Parenthèses multiples Une première variante Remarque La pile ne sert ici qu à compter les parenthèses ouvertes... il suffirait d un entier! Cas plus général : différentes paires de parenthèses Langages de programmation () {} begin end Langages de balises <html></html> <div></div> <b></b>... Exemple ( { ) } est correct si on ne tient compte que d un type de parenthèses, mais pas pour les deux à la fois. 32 / 37

Bon parenthésage Parenthèses multiples Adaptation de l algorithme PARENTHESAGE_MULTIPLE p := PileVide() while il reste des caractères c := caractère suivant if c est une parenthèse ouvrante Empiler(p, c) if c est une parenthèse fermante if EstVide(p) ou Sommet(p) ne correspond pas à c return Erreur de parenthésage else Dépiler(p) if EstVide(p) return Parenthésage correct else return Erreur de parenthésage Adaptation possible pour les parenthèses non orientées (guillemets...) 33 / 37

Bon parenthésage Imbrication, contextes Notion de contexte Le niveau d imbrication en un point du texte est le nombre de parenthèses ouvertes (et non encore fermées). On appelle contexte une partie du texte comprise entre deux parenthèses correspondantes et de même niveau d imbrication. Exemple Dans aaa[bb(ccc{ddd}ccc[eee]ccc)bb]a : Le niveau d imbrication maximal est 3 (pour les lettres d et e). Chaque caractère correspond à un contexte différent. 35 / 37

Bon parenthésage Imbrication, contextes Quelques problèmes On peut alors poser plusieurs problèmes : Calculer le niveau d imbrication maximal Il suffit de mémoriser et d actualiser la hauteur courante de la pile, ainsi que sa hauteur maximale. Apparier les parenthèses correspondantes en donnant leurs positions dans le texte Il suffit d empiler avec chaque parenthèse sa position dans le texte. Calculer les longueurs des contextes On maintient à jour la longueur du contexte courant. Lorsqu on ouvre une nouvelle parenthèse, on empile également la longueur du contexte «supérieur» et on repart à 0. Lorsqu on ferme une parenthèse, on dépile la longueur déjà lue du contexte et on reprend à partir de cette valeur. 36 / 37

Bon parenthésage Imbrication, contextes En résumé Aujourd hui Un Type Abstrait de Données décrit les opérations autorisées, pas le détail de la représentation En variant les opérations permises on obtient différentes structures linéaires : Pile, File, File à Priorité... Algorithme de bon parenthésage : efficace grâce à l utilisation d une structure de données appropriée La prochaine fois Type abstrait Arbre Structures arborescentes Partition Binaire de l Espace 37 / 37