Cours No 8 : Abstraction de données - Arbres binaires

Documents pareils
Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Les structures de données. Rajae El Ouazzani

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

Arbres binaires de recherche

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Resolution limit in community detection

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

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

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

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

Recherche dans un tableau

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

MIS 102 Initiation à l Informatique

Les arbres binaires de recherche

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Algorithmique, Structures de données et langage C

Cours d algorithmique pour la classe de 2nde

Cours de Programmation 2

TP Contraintes - Triggers

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)

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Objets et Programmation. origine des langages orientés-objet

Systèmes d information et bases de données (niveau 1)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Bases de Données Avancées

Chapitre VI- La validation de la composition.

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Unix/Linux I. 1 ere année DUT. Université marne la vallée

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

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

Initiation à l algorithmique

UML et les Bases de Données

Chapitre 6. Fonction réelle d une variable réelle

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

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

Chapitre 1: Introduction générale

Rappel sur les bases de données

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Programmation avec des objets : Cours 7. Menu du jour

Conventions d écriture et outils de mise au point

Qualité du logiciel: Méthodes de test

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

Programme Compte bancaire (code)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Licence Sciences et Technologies Examen janvier 2010

Architecture des ordinateurs

IV- Comment fonctionne un ordinateur?

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Cours Informatique Master STEP

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

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

Problèmes liés à la concurrence

Les structures. Chapitre 3

MPI Activité.10 : Logique binaire Portes logiques

Plan du cours. Historique du langage Nouveautés de Java 7

Compilation (INF 564)

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

Analyse en Composantes Principales

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

A PROPOS DES CRITERES D ATTRIBUTION DES EQUIVALENCES

Introduction aux bases de données Cours 1 : Généralités sur les bases de données

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

chapitre 4 Nombres de Catalan

Algorithmes récursifs

Gestion de stock pour un magasin

Chap III : Les tableaux

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

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

Représentation d un entier en base b

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

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

FICHE UE Licence/Master Sciences, Technologies, Santé Mention Informatique

Plus courts chemins, programmation dynamique

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Le Langage De Description De Données(LDD)

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

V- Manipulations de nombres en binaire

Le prototype de la fonction main()

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

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)

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Définitions. Numéro à préciser. (Durée : )

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Bases de données Cours 1 : Généralités sur les bases de données

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

Matrice d accès. Master SEMS, Pierre Paradinas. October 16, 2013

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Cours 14 Les fichiers

Bases de données. Chapitre 1. Introduction

STAGE IREM 0- Premiers pas en Python

Mysql. Les requêtes préparées Prepared statements

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

Création et Gestion des tables

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

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

Cours de Génie Logiciel

Transcription:

Université Montpellier-II UFR des Sciences - Département Informatique - Licence Informatique UE GLIN302 - Programmation Applicative et Récursive Cours No 8 : Abstraction de données - Arbres binaires Notes de cours - 2007-2012 15 Abstraction de données 15.1 Définitions Donnée : entité manipulée dans un programme, définie par un type. ex : Les entiers 1, 3 et 5 sont des données d un programme réalisant des calculs. Abstraction de données : processus permettant de rendre des données abstraites, c est à dire utilisables via un ensemble de fonctions constituant leur interface sans que l on ait à connaître ou sans que l on puisse connaître (selon la philosophie prévention/répression du langage) leur représentation en machine (dite représentation interne). Type Abstrait : Définition abstraite (et par extension implantation) d un type de données sous la forme de l ensemble des opérations que l on peut appliquer à ses éléments indépendamment de l implantation de ces opérations et de la représentation interne de ces éléments. Interface : ensemble des fonctions que l on peut appliquer aux éléments d un type abstrait. On peut éventuellement distinguer dans l interface la partie création, permettant de créer de nouveaux éléments du nouveau type, la partie accès pour accéder aux propriétés (lorsque ces fonctions d accès appartiennet à l interface) des éléments la partie utilisation ou fonctionnelle ou encore métier permettant de les utiliser. La programmation par objet a généralisé la création de nouveaux types de données. L interface de création est constituée de la fonction new et d un ensemble de fonctions d initialisation (généralement nommées constructeurs). On y parle également d accesseurs et de fonctions métier. 15.2 Définition de nouveaux types abstraits par les utilisateurs Pascal : Enregistrement - Record C, Scheme : Structure - Struct JAVA : Classe - Class - Réalisation de l encapsulation données - fonctions. 15.3 Un exemple : les nombres rationnels (d après Abelson Fano Sussman Interface création : make rat 1

accès : denom numer métier : +rat rat rat /rat =rat Implantation 1 (define (+rat x y) 2 (make-rat 3 (+ ( (numer x) (denom y)) 4 ( (denom x) (numer y))) 5 ( (denom x) (denom y)))) 7 (define ( rat x y) 8 (make-rat 9 ( (numer x) (numer y)) 10 ( (denom x) (denom y)))) Interface de création, Représentation No 1 : doublets, sans réduction 1 (define (make-rat n d) (cons n d)) 2 (define (numer r) (car r)) 3 (define (denom r) (cdr r)) Les différents niveaux d abstraction utilisation des rationnels +rat rat make-rat numer denom représentation des rationnels, Utilisation des doublets doublets : cons, car, cdr représentation des doublets??? Interface de création, Représentation no 2, vecteurs et réduction Vecteur : Collection dont les éléments peuvent être rangés et retrouvés via un index, qui occupe moins d espace qu une liste contenant le même nombre d éléments. Manipulation de vecteurs. (make-vector taille) : création vide (vector el1... eln) : définition par extension (vector-ref v index) : accès indexé en lecture (vector-set! v index valeur) : accès indexé en écriture 1 (define (make-rat n d) 2

2 (let ((pgcd (gcd n d))) 3 (vector (/ n pgcd) (/ d pgcd)))) 5 (define (numer r) (vector-ref r 0)) 7 (define (denom r) (vector-ref r 1)) 15.4 Arbres binaires Graphe : ensemble de sommets et d arêtes Graphe orienté : ensemble de sommets et d arcs (arrête partant d un noeud et arrivant à un noeud) Arbre : graphe connexe sans circuit tel que si on lui ajoute une arrête quelconque, un circuit apparaît. Les sommets sont appelés noeuds. Exemple d utilisation : Toute expression scheme peut être représentée par un arbre. Arbre binaire : - soit un arbre vide - soit un noeud ayant deux descendants (fg, fd) qui sont des arbres binaires Arbre binaire de recherche : arbre dans lesquels une valeurv est associé à chaque noeud n et tel que si n1 fg(n)(resp.fd(n)) alors v(n1) < v(n) (resp. v(n1) > v(n)) Arbre partiellement équilibré : la hauteur du SAG et celle du SAD diffèrent au plus de 1. 15.5 Arbres binaires de recherche en Scheme Création : (make-arbre v fg fd) Accès aux éléments d un noeud n : (val-arbre n), (fg n), (fd n) Test (arbre-vide? n) interface métier : (inserer valeur a) : rend un nouvel arbre résultat de l insertion de la valeur n dans l arbre a. L insertion est faite sans équilibrage de l arbre. (recherche v a) : recherche dichotomique d un élément dans un arbre (afficher a) : affichage des élements contenus dans les noeuds de l arbre, par défaut affichage en profondeur d abord. 15.5.1 Représentation interne - version 1 Consommation mémoire, feuille et noeud : 3 doublets. Simple à gérer. 1 (define (make-arbre v fg fd) 2 (list v fg fd)) 4 (define (arbre-vide? a) (null? a)) 3

6 (define (val-arbre a) (car a)) ;; 8 (define (fg a) (cadr a)) 10 (define (fd a) (caddr a)) 15.5.2 Insertion sans duplication 1 (define (insere n a) 2 (if (arbre-vide? a) 3 (make-arbre n () ()) 4 (let ((valeur (val-arbre a))) 5 (cond ((< n valeur) (make-arbre valeur (insere n (fg a)) (fd a))) 6 ((> n valeur) (make-arbre valeur (fg a) (insere n (fd a)))) 7 ((= n valeur) a))))) 1 (define a (make-arbre 6 () ())) 2 (insere 2 (insere 5 (insere 8 (insere 9 (insere 4 a))))) 15.5.3 Recherche dans un arbre binaire Fonction booléenne de recherche dans un arbre binaire. La recherche est dichotomique. 1 (define (recherche v a) 2 (and (not (arbre-vide? a)) 3 (let ((valeur (val-arbre a))) 4 (cond ((< v valeur) (recherche v (fg a))) 5 ((> v valeur) (recherche v (fd a))) 6 ((= v valeur) #t))))) 15.5.4 Seconde représentation interne Coût mémoire, noeud (3 doublets), feuilles (1 doublet). Nécessite un test supplémentaire à chaque fois que l on accède à un fils. 1 (define (make-arbre v fg fd) 2 (if (and (null? fg) (null? fd)) 3 (list v) 4 (list v fg fd))) 6 (define (fg n) (if (null? (cdr n)) () (cadr n))) 8 (define (fd n) (if (null? (cdr n)) () (caddr n))) 4

Toutes les autres fonctions de manipulation des arbres binaires (interface fonctionnelle) sont inchangées. 15.6 L exemple des dictionnaires Le type dictionnaire est un type récurrent en programmation, on le trouve dans la plupart des langages de programmation (java.util.dictionary). En scheme, il a été historiquement proposé sous le nom de listes d association. Une liste d associations est représentée comme une liste de doublets ou comme une liste de liste à deux éléments. 15.6.1 Interface de manipulation 1 >(define l1 ((a 1) (b 2))) 2 >(assq a l1) 3 (a 1) 4 >(assq c l1) 5 #f 6 >(assoc a l1) 7 (a 1) 8 >(define l2 ( ((a) (une liste de un élément)) ((a b) (deux éléments)) )) 9 >(assq (a b) l2) 10 #f 11 >(assoc (a b) l2) 12 ((a b) (deux éléments)) 15.6.2 Interface : construction et manipulations Scheme n a pas prévu d interface de construction, on construit directement les listes. Ceci implique que l on ne peut pas changer la représentation interne des dictionnaires. Imaginons une interface de construction 1 (define prem-alist car) 2 (define reste-alist cdr) 3 (define null-alist? null?) 4 (define make-alist list) 5 (define (add clé valeur l) 6 ;; rend une nouvelle aliste incluant une nouvelle liaison clé valeur 7 ;; ne vérifie pas si la clé était déjà utilisée 8 (cons (list clé valeur) l)) 1 (define (my-assoc clé al) 2 (let loop ((al al)) 3 (cond ((null-alist? al) #f) 4 ((equal? (car (prem-couple al)) clé) (prem-couple al)) 5 (else (loop (reste-alist al))))) 5