Programmation avancée

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

Cours de Programmation 2

Cours 1 : La compilation

Les arbres binaires de recherche

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

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

Arbres binaires de recherche

Classes et Objets en Ocaml.

Programme Compte bancaire (code)

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

# 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>

Package Java.util Classe générique

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Les structures de données. Rajae El Ouazzani

Initiation à l algorithmique

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Corrigé des exercices sur les références

Recherche dans un tableau

1 Recherche en table par balayage

Analyse de sécurité de logiciels système par typage statique

Programmation C++ (débutant)/instructions for, while et do...while

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

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

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Représentation d un entier en base b

Programmation Orientée Objet

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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)

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

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Spécification et certification d implantation chaînée avec des orbites : les hypercartes combinatoires

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Création d objet imbriqué sous PowerShell.

Chapitre 10. Les interfaces Comparable et Comparator 1

Limites finies en un point

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Logiciel Libre Cours 2 Fondements: Programmation

Utilisation d objets : String et ArrayList

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


Algorithmique et Programmation, IMA

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Licence Sciences et Technologies Examen janvier 2010

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Paginer les données côté serveur, mettre en cache côté client

Cours Bases de données 2ème année IUT

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Programmation Par Objets

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Les processus légers : threads. Système L3, /31

équipement radio Procédure

Dans l'article précédent, vous avez appris

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

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

STAGE IREM 0- Premiers pas en Python

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

TP3 : Manipulation et implantation de systèmes de fichiers 1

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

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Utilitaires méconnus de StrataFrame

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Module http MMS AllMySMS.com Manuel d intégration

Introduction au PL/SQL Oracle. Alexandre Meslé

NoSQL : hype ou innovation? Grégory Ogonowski / Recherches Octobre 2011

Logiciel de facturation (ASP) pour les distributeurs de combustibles

AWS avancé. Surveiller votre utilisation d EC2

CAC: Un algorithme d arc-consistance. configurable, générique et adaptatif.

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

Configurer la supervision pour une base MS SQL Server Viadéis Services

PHP et les Bases de données - Généralités

as Architecture des Systèmes d Information

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

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

Programmation avec des objets : Cours 7. Menu du jour

1 Position du problème

Bases de Données Avancées PL/SQL

Algorithmes sur les mots (séquences)

TP JAVASCRIPT OMI4 TP5 SRC

Instructions Installation ELLIS Business: Vidéo Local Windows 2003 & XP poste de Travail

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

JSIam Introduction talk. Philippe Gradt. Grenoble, March 6th 2015

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

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

BASES DE DONNEES TP POSTGRESQL

Transcription:

Programmation avancée Dictionnaires ENSIIE Semestre 2 2011 12 ENSIIE : Programmation avancée 1/15

Listes d association ENSIIE : Programmation avancée 2/15

Implémentation par liste d association Type concret : liste contenant des couples (clef, valeur) créer : retourner la liste vide insérer : ajoute le couple (clef,valeur) en tête de liste rechercher : parcourir la liste jusqu à trouver un couple avec la bonne clef supprimer : parcourir la liste et supprimer le couple avec la clef correspondante s il existe ENSIIE : Programmation avancée 3/15

Complexité Complexité Moyenne Pire inserer O(1) O(1) rechercher O(n) O(n) supprimer O(n) O(n) ENSIIE : Programmation avancée 4/15

Implémentation en OCaml type ( key, value) dict = ( key * value) list let creer _ = [] let rec rechercher d k = match d with [] -> raise Not_found (k,v)::_ when k = k -> v _::q -> rechercher q k let inserer d k v = (k,v)::d ENSIIE : Programmation avancée 5/15

Implémentation en OCaml (suite) let supprimer d k = match d with [] -> [] (k,_)::q when k = k -> supprimer q k a::q -> a::supprimer q k ENSIIE : Programmation avancée 6/15

Implémentation en OCaml (suite) let supprimer d k = match d with [] -> [] (k,_)::q when k = k -> supprimer q k a::q -> a::supprimer q k Version récursive terminale : let supprimer d k = let rec aux accu = function [] -> accu (k,_)::q when k = k -> aux accu q x::q -> aux (x::accu) q in aux [] d ENSIIE : Programmation avancée 6/15

Implémentation en C struct dict_base { key key; value data; dict next; }; dict creer(int size) { return NULL; } value rechercher (dict d, key key) { while (d!= NULL) { if (key == tab->key) return d->data; d = d->next; }; return NULL; } ENSIIE : Programmation avancée 7/15

Insérer en C dict inserer(dict d, key k, value v) { dict new = malloc(sizeof(struct dict_base)); new->key = k; new->data = v; new->next = d; return new; } ENSIIE : Programmation avancée 8/15

Supprimer en C dict supprimer(dict d, key k) { dict accu = NULL; while (d) { if (d->key!= k) accu = inserer(accu, d->key, d->data); d = d->next; }; return accu; } ENSIIE : Programmation avancée 9/15

Supprimer en C (version destructive) dict supprimer(dict d, key k) { dict i = d; dict tmp; if (i == NULL) return NULL; if (i->key == k) return i->next; while(i->next) { if (i->next->key==key) { tmp = i->next->next; free(i->next); i->next = tmp; } else i = i->next; }; return d; } ENSIIE : Programmation avancée 10/15

Correction (OCaml) rechercher(creer(i),k) = ERR : creer(i) est la liste vide, donc rechercher renvoie effectivement une erreur rechercher(inserer(d,k,v),k) = v : inserer d k v = (k,v)::d rechercher ((k,v)::d) k = v rechercher(inserer(d,k,v),k ) = rechercher(d,k ) k k : inserer d k v = (k,v)::d rechercher ((k,v)::d) k = rechercher d k ENSIIE : Programmation avancée 11/15

Correction (OCaml, suite) rechercher(supprimer(d,k),k) = ERR : Impossible de poursuivre sans connaître le contenu de d ENSIIE : Programmation avancée 12/15

Preuve par induction Pour montrer que P(l) est vrai pour toute liste l, il suffit de montrer que P([]) est vrai P(x :: q) est vrai si on suppose que P(q) est vrai Plus approprié qu une récurrence sur la longueur de la liste Peut-être utilisé pour tous les types sommes usuels (arbres, expressions arithmétiques,...) Assistant à la démonstration Coq (Inria) ENSIIE : Programmation avancée 13/15

Correction (OCaml, suite) rechercher(supprimer(d,k),k) = ERR : On procède par induction sur la liste d : d = [] : supprimer d k = [] rechercher [] k renvoie une erreur d = (k,v)::q : si k = k, supprimer d k = supprimer q k rechercher (supprimer d k) k = rechercher (supprimer q k) k sinon supprimer d k = (k,v):: supprimer q k rechercher (supprimer d k) k = rechercher ((k,v) :: supprimer q k) k = rechercher (supprimer q k) k Or par hypothèse d induction, rechercher(supprimer(q,k),k) = ERR ENSIIE : Programmation avancée 14/15

Correction (C) Plus difficile, besoin de prouver un invariant : Toutes les listes obtenues uniquement à l aide des fonctions creer, inserer et supprimer sont bien fondées, c est-à-dire qu elles ne comportent pas de cycle. Outil FramaC (plugin Jessie) (CEA/Inria) : permet d annoter les programmes avec les propriétés à prouver Les preuves sont ensuite déléguées à des prouveurs automatiques et/ou interactifs ENSIIE : Programmation avancée 15/15