Les arbres (II) Un exemple d arbre à parcourir. Différents parcours. Nour-Eddine Oussous, Éric Wegrzynowski. 21 novembre 2007

Documents pareils
Les structures de données. Rajae El Ouazzani

Les arbres binaires de recherche

Arbres binaires de recherche

Quelques Algorithmes simples

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

Application 1- VBA : Test de comportements d'investissements

INF601 : Algorithme et Structure de données

Recherche dans un tableau

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

1. Structure d'un programme FORTRAN 95

ARBRES BINAIRES DE RECHERCHE

Algorithmique & programmation

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

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

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

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

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

Algorithmique, Structures de données et langage C

Examen Médian - 1 heure 30

Introduction à MATLAB R

1 Recherche en table par balayage

Corrigé des TD 1 à 5

Raisonnement probabiliste

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Algorithmique et programmation : les bases (VBA) Corrigé

LES TYPES DE DONNÉES DU LANGAGE PASCAL

DG-ADAJ: Une plateforme Desktop Grid

Organigramme / Algorigramme Dossier élève 1 SI

Manuel de validation Fascicule v4.25 : Thermique transitoire des structures volumiques

.NET - Classe de Log

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

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

Cours Informatique Master STEP

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

Licence Sciences et Technologies Examen janvier 2010

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

Bases de données documentaires et distribuées Cours NFE04

TRIGONOMETRIE Algorithme : mesure principale

Objets Combinatoires élementaires

Programmation linéaire

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

Chapitre 7. Récurrences

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

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Rappels sur les suites - Algorithme

Qualité du logiciel: Méthodes de test

0 si a=b. Si a^ et b^ sont deux éléments différents du même anneau, alors le résultat de

MIS 102 Initiation à l Informatique

Initiation à l algorithmique

Compilation (INF 564)

L exclusion mutuelle distribuée

Résolution de systèmes linéaires par des méthodes directes

AWS avancé. Surveiller votre utilisation d EC2

Plan du cours Cours théoriques. 29 septembre 2014

Classes et Objets en Ocaml.

Listes de validation dans OpenOffice Calc

4 Exemples de problèmes MapReduce incrémentaux

Théorie et codage de l information

Algorithmique et Programmation

Rapport de Mini-Projet en ArcGIS Engine

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

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

L ALGORITHMIQUE. Algorithme

Initiation à la Programmation en Logique avec SISCtus Prolog

Algorithmique et Programmation, IMA

Fonctions linéaires et affines. 1 Fonctions linéaires. 1.1 Vocabulaire. 1.2 Représentation graphique. 3eme

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

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)

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Chapitre 3. Les distributions à deux variables

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

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Utilitaires méconnus de StrataFrame

Chapitre 10. Les interfaces Comparable et Comparator 1

Activité 11 : Nuage de points ou diagramme de dispersion

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

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

Résolution d équations non linéaires

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

KL5121. Pour activer des sorties en fonction de la position d'un codeur

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

Limitations of the Playstation 3 for High Performance Cluster Computing

Cours de Génie Logiciel

Documentation Technique du programme HYDRONDE_LN

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Introduction aux algorithmes répartis

M é ca n ism e Pr o lo g. Ex e m p le

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

Gestion mémoire et Représentation intermédiaire

Le langage VHDL. Eduardo Sanchez EPFL

Ordonnancement temps réel

Transcription:

Nour-Eddine Oussous, Éric Wegrzynowski 21 novembre 2007 Parcours d arbres Parcours préfixé Parcours postfixé Parcours infixé Algorithmes sur les arbres binaires Recherche d un élément Arbres binaires ordonnés et propriété Recherche dans un arbre ordonné Différents parcours Un exemple d arbre à parcourir Contrairement aux listes que l on parcourt de manière séquentielle, il y a plusieurs parcours possibles d un arbre : le parcours préfixé ; le parcours postfixé ; et le parcours infixé. 1 2 3 4 5 6 7 8 9 10 11 Fig.: Exemple d arbre à parcourir

Parcours préfixé Parcours préfixé Parcours consistant à 1. traiter la racine 2. parcourir le sous-arbre gauche 3. parcourir le sous-arbre droit Exemple Sur l arbre de la figure 1, dans un parcours préfixé, les nœuds sont traités dans l ordre 1, 2, 4, 8, 5, 9, 10, 3, 6, 11, 7 Parcours postfixé Parcours postfixé Parcours consistant à 1. parcourir le sous-arbre gauche 2. parcourir le sous-arbre droit 3. traiter la racine Exemple Sur l arbre de la figure 1, dans un parcours postfixé, les nœuds sont traités dans l ordre 8, 4, 9, 10, 5, 2, 11, 6, 7, 3, 1 Parcours infixé Parcours infixé Parcours consistant à 1. parcourir le sous-arbre gauche 2. traiter la racine 3. parcourir le sous-arbre droit Exemple Sur l arbre de la figure 1, dans un parcours infixé, les nœuds sont traités dans l ordre 8, 4, 2, 9, 5, 10, 1, 6, 11, 3, 7 taille : AB(E) N a taille de a = nbre de nœuds taille( ) = 0 taille(<1; <3; ; >; >) = 2

Algorithme Schéma récursif du calcul de la taille d un arbre a 1. si a =, alors taille(a) = 0 2. si a = <e; g; d >, alors taille(a) = 1 + taille(g) + taille(d) Taille / / t a i l l e ( a ) = n b r e d e n o e u d s d a n s a function t a i l l e ( a : ARBRE) : CARDINAL ; if e s t A r b r e V i d e ( a ) then t a i l l e := 0 else t a i l l e := 1 + t a i l l e ( gauche ( a ) ) + t a i l l e ( d r o i t ( a ) ) ; end { t a i l l e } ; Coût du calcul de la taille Rappel c(a) = nombre de tests de la condition estarbrevide(a). c( ) = 1 c(<e; g; d >) = 1 + c(g) + c(d) Le coût de la fonction taille est linéaire en le nombre de nœuds de l arbre. de la hauteur La hauteur d un arbre est la longueur de sa plus longue branche. cela impose que l arbre n est pas vide en conséquence la hauteur de l arbre vide n est pas définie par cette définition

Rappel hauteur : AB(E) N a hauteur de a hauteur(<1; ; >) = 0 hauteur(<1; <3; ; >; >) = 1 Convention Pour faciliter le calcul (récursif) de la hauteur d un arbre, nous conviendrons que la hauteur de l arbre vide est égale à -1. hauteur( ) = 1 Algorithme hauteur : AB(E) N { 1} a hauteur de a Schéma récursif du calcul de la hauteur d un arbre a 1. si a =, alors hauteur(a) = 1 hauteur( ) = 1 hauteur(<1; ; >) = 0 hauteur(<1; <3; ; >; >) = 1 2. si a = <e; g; d >, alors hauteur(a) = 1 + max(hauteur(g), hauteur(d))

Hauteur / / h a u t e u r ( a ) = h a u t e u r d e a function h a u t e u r ( a : ARBRE) : INTEGER ; if e s t A r b r e V i d e ( a ) then h a u t e u r := 1 else h a u t e u r := 1 + max( h a u t e u r ( gauche ( a ) ), h a u t e u r ( d r o i t ( a ) ) ) ; end { h a u t e u r } ; Coût du calcul de la hauteur c(a) = nombre de tests de la condition estarbrevide(a). c( ) = 1 c(<e; g; d >) = 1 + c(g) + c(d) Le coût de la fonction hauteur est linéaire en le nombre de nœuds de l arbre. Recherche d un élément recherche : E AB(E) Booleen { Vrai si e a e, a Faux sinon recherche(1, <1; <3; ; >; >) = Vrai recherche(2, <1; <3; ; >; >) = Faux Recherche d un élément Recherche / / r e c h e r c h e ( e, a ) = V R A I s i e a / / FAUX s i n o n function r e c h e r c h e ( e : ELEMENT; a : ARBRE) : BOOLEAN ; if e s t A r b r e V i d e ( a ) then r e c h e r c h e := false else if r a c i n e ( a)=e then r e c h e r c h e := true else r e c h e r c h e := r e c h e r c h e ( e, gauche ( a ) ) or r e c h e r c h e ( e, d r o i t ( a ) ) ; end { r e c h e r c h e } ;

Recherche d un élément Coût de la recherche c(a) = nombre de tests de la condition estarbrevide(a). meilleur cas : e se trouve à la racine, on fait un seul test pire cas : e n est pas dans l arbre ou se trouve dans la dernière feuille, c(a) est linéaire en n et propriété On suppose que l ensemble E des étiquettes des nœuds des arbres est un ensemble totalement ordonné par une relation notée. Un arbre A AB(E) est ordonné si 1. il est vide, A = 2. ou bien, il ne l est pas, A = <e; g; d >, et il vérifie les quatre conditions suivantes g est un arbre binaire ordonné ; d est un arbre binaire ordonné ; e est inférieur à toutes les étiquettes de d ; e est supérieur ou égal à toutes les étiquettes de g ; L ensemble des arbres binaires ordonnés est noté ABO(E). et propriété et propriété 3 1 4 1 2 5 9 2 1 9 1 5 4 3

et propriété Propriété caractéristique Théorème Soit A AB(E) un arbre binaire. A est un arbre binaire ordonné si et seulement si la liste des étiquettes des nœuds dans l ordre infixé est une liste triée dans l ordre croissant. Recherche dans un arbre ordonné rechercheabo : E ABO(E) Booleen { Vrai si e a e, a Faux sinon rechercheabo(1, 3;<1; <1; ; >; <2; ; >> <4; ; <5; ; <9; ; >>> = Vrai rechercheabo(6, 3;<1; <1; ; >; <2; ; >> <4; ; <5; ; <9; ; >>> = Faux Recherche dans un arbre ordonné / / r e c h e r c h e A B O ( e, a ) = V R A I s i e a / / FAUX s i n o n function rechercheabo ( e : ELEMENT; a : ARBRE) : BOOLEAN ; if e s t A r b r e V i d e ( a ) then rechercheabo := false else if r a c i n e ( a ) = e then rechercheabo := true else if r a c i n e ( a ) > e then rechercheabo := rechercheabo ( e, gauche ( a ) ) else rechercheabo := rechercheabo ( e, d r o i t ( a ) ) ; end { r e c h e r c h e A B O } ; Recherche dans un arbre ordonné Coût de la recherche c(a) = nombre de tests de la condition estarbrevide(a). meilleur cas : l élément se trouve à la racine, un seul test pire cas : ce nombre dépend de la hauteur de l arbre si l arbre est bien équilibré, pour un ABO de n nœuds, ce nombre sera majoré par log 2 (n) si l arbre est un peigne, ce nombre sera proportionnel à n Le coût de la fonction rechercheabo dépend de la forme de l arbre.

insererabo : E ABO(E) ABO(E) e, a a a = arbre a modifié par l ajout en feuille du nouvel élément e. 3141592 insererabo(4, <3; <1; ; >; >) = <3; <1; ; >; <4; ; >> insererabo(1, <3; <1; ; >; <4; ; >>) = <3; <1; <1; ; >; >; <4; ; >> 141592 3 / / i n s e r e r A B O ( e, a ) 3141592 314159 2 / / a j o u t e u n n o u v e l é l é m e n t e e n f e u i l l e d e / / l a r b r e a. L a r b r e a e s t m o d i f i é procedure insererabo ( e : ELEMENT; var a : ARBRE) ; var b : ARBRE ; if estarbrevide ( a ) then 41592 3 1 a := c r e e r A r b r e ( e, ARBREVIDE, ARBREVIDE) else if r a c i n e ( a ) <= e then b := d r o i t ( a ) ; insererabo ( e, b ) ; m o d i f i e r D r o i t ( a, b ) ; end else b := gauche ( a ) ; insererabo ( e, b ) ; m o d i f i e r G a u c h e ( a, b ) ; end ; end { i n s e r e r A B O } ; 1592

Coût de l insertion c(a) = nombre de tests estarbrevide(a). L insertion se fait en feuille Ce nombre dépend de la hauteur de l arbre si l arbre est bien équilibré, pour un ABO de n nœuds, ce nombre sera majoré par log 2 (n) si l arbre est un peigne, ce nombre sera proportionnel à n Il est donc souhaitable d équilibrer les arbres au fur et à mesure des opérations d insertion Le coût de la fonction insererabo dépend de la forme de l arbre.