alg - Arbres enracinés [tn] Algorithmique

Documents pareils
alg - Classes, instances, objets [oo] Exercices résolus

Les structures de données. Rajae El Ouazzani

C++ - Classes, instances, objets [oo] Exercices résolus

INF601 : Algorithme et Structure de données

Les arbres binaires de recherche

Quelques Algorithmes simples

chapitre 4 Nombres de Catalan

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

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

ARBRES BINAIRES DE RECHERCHE

CH.6 Propriétés des langages non contextuels

LE PROBLEME DU PLUS COURT CHEMIN

Introduction à la théorie des graphes. Solutions des exercices

CARTE DE VOEUX À L ASSOCIAEDRE

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Représentation d un entier en base b

Fondements de l informatique Logique, modèles, et calculs

L exclusion mutuelle distribuée

MIS 102 Initiation à l Informatique

Raisonnement probabiliste

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Licence Sciences et Technologies Examen janvier 2010

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

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

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

Algorithmique, Structures de données et langage C

Protection individuelle

Feuille TD n 1 Exercices d algorithmique éléments de correction

La mémoire. Un ordinateur. L'octet. Le bit

TD 1 - Structures de Traits et Unification

Formats d images. 1 Introduction

UML (Diagramme de classes) Unified Modeling Language

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

Représentation des Nombres

L ARBORESCENCE. Qu est-ce qu un dossier? L arborescence?

Arbres binaires de recherche

COURS EULER: PROGRAMME DE LA PREMIÈRE ANNÉE

Chapitre 1 I:\ Soyez courageux!

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Chapitre 5 : Flot maximal dans un graphe

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

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

Domain Name Service (DNS)

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

Système de Gestion de Fichiers

Techniques d interaction dans la visualisation de l information Séminaire DIVA

Arbres binaires de décision

Université Paris-Dauphine DUMI2E 1ère année, Applications

Python - introduction à la programmation et calcul scientifique

Arborescence et interface

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

Chapitre 3 : outil «Documents»

Rappel sur les bases de données

Utiliser Freemind à l'école

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

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

1.1 L EXPLORATEUR WINDOWS

Cours 1 : La compilation

Serveurs de noms Protocoles HTTP et FTP

Continuité et dérivabilité d une fonction

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

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

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

Objets Combinatoires élementaires

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

Cours de mathématiques

BACCALAUREAT GENERAL MATHÉMATIQUES

Mathématiques financières

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Initiation à la Programmation en Logique avec SISCtus Prolog

TP 4 de familiarisation avec Unix

OPTION SCIENCES BELLE-ISLE-EN-TERRE

Cours 1 : Qu est-ce que la programmation?

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

Ebauche Rapport finale

Le langage SQL Rappels

SAGE: Introduction. 1 Connections WEB. 2 Généralités. 1.1 Sur le web insset. 2.1 Conception modulaire. Sage. 100-Introduction

Nouvelles propositions pour la résolution exacte du problème de sac à dos bi-objectif unidimensionnel en variables binaires

Introduction à l informatique en BCPST

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )

Programmation linéaire

CORRECTION EXERCICES ALGORITHME 1

Solutions en ligne Guide de l utilisateur

Algorithmes récursifs

COUCHE 7/OSI : TRANSFERT DE FICHIERS FTAM

Résolution d équations non linéaires

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

DE LA HOLDING ANIMATRICE A LA HOLDING PATRIMONIALE : QUELLES CONSEQUENCES? 15 septembre 2014

UML (Paquetage) Unified Modeling Language

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Algorithmes d'apprentissage

Algorithmique et Programmation

Aide : publication de décisions VS

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Relation entre deux variables : estimation de la corrélation linéaire

Transcription:

alg - Arbres enracinés [tn] Algorithmique Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 25 avril 2015 Table des matières 1 Exemples de données arborescentes 2 2 Définitions et terminologie 4 2.1 Définitions................................... 4 2.2 Terminologie.................................. 5 3 Arbres binaires 8 3.1 Définitions................................... 8 3.2 Quelques caractéristiques........................... 9 3.3 Fonctionnalités et Implémentation...................... 10 4 Parcours des arbres 12 4.1 Parcours en profondeur............................ 12 4.2 Parcours en largeur.............................. 14 Introduction Mots-Clés Arbres enracinés, Graphes, Algorithmique. Requis Axiomatique objet. Les arbres sont très utilisés en informatique, d une part parce que les informations sont souvent hiérarchisées et peuvent être représentées naturellement sous une forme arborescente, et d autre part, parce que les structures de données arborescentes permettent de stocker des données volumineuses de façon que leur accès soit efficace. Ce module présente quelques exemples de données arborescentes, les définitions et la terminologie concernant les arbres enracinés, le cas particulier des arbres binaires ordonnés puis les parcours des arbres. 1

Unisciel algoprog tn00acours, April 25, 2015 2 1 Exemples de données arborescentes Expressions arithmétiques On peut représenter les expressions arithmétiques par des arbres étiquetés par des opérateurs, des constantes et des variables. La structure de l arbre rend compte de la priorité des opérateurs et rend inutile tout parenthésage. Par exemple, l arbre suivant correspond à l expression arithmétique (y/2 t)(75 + z). Arbres syntaxiques Un arbre syntaxique représente l analyse d une phrase à partir d un ensemble de règles qui constitue la grammaire : une phrase est composée d un groupe nominal suivi d un groupe verbal, un groupe nominal peut être constitué d un article et d un nom commun,... Arbres généalogiques Un arbre généalogique (descendant dans le cas présent) représente la descendance d une personne ou d un couple. Les noeuds de l arbre sont étiquetés par les membres de la famille et leurs conjoints. L arborescence est construite à partir des liens de parenté (les enfants du couple).

Unisciel algoprog tn00acours, April 25, 2015 3 Arbres lexicographiques Un arbre lexicographique, ou dictionnaire, représente un ensemble de mots. Les préfixes communs à plusieurs mots apparaissent une seule fois dans l arbre, ce qui se traduit par un gain d espace mémoire. De plus la recherche d un mot est assez efficace, puisqu il suffit de parcourir une branche de l arbre en partant de la racine, en cherchant à chaque niveau parmi les fils du noeud courant la lettre du mot de rang correspondant.

Unisciel algoprog tn00acours, April 25, 2015 4 2 Définitions et terminologie 2.1 Définitions Arbre enraciné, racine Un arbre enraciné, ou arborescence, est un ensemble organisé de sommets dans lequel l un des sommets de distingue des autres. On appelle ce sommet la racine. Dans la suite de ce module et sauf avis contraire, tous les arbres que nous manipulerons seront des arbres enracinés et nous omettrons de le préciser. En outre, on appellera souvent noeuds les sommets des arbres (enracinés). Père, Fils Soit T un arbre de racine r. Si T contient l arête (y, x) alors y est le père de x et x est le fils de y. La racine est le seul noeud qui n ait pas de père. Feuille, Noeud interne Un noeud sans fils est un noeud externe ou une feuille. Un noeud qui n est pas une feuille est un noeud interne. Représentation visuelle Lorsqu on dessine un arbre, on a l habitude de le représenter avec la tête en bas, c.-à-d. que la racine est tout en haut et les noeuds fils sont représentés en-dessous du noeud père. Arbre enraciné = Arbre orienté En réalité, la racine impose un sens de parcours de l arbre qui se retrouve orienté par l utilisation qui en est faite. Ainsi, la figure suivante présente deux arbres qui ne diffèrent que s ils sont considérés comme des arbres enracinés.

Unisciel algoprog tn00acours, April 25, 2015 5 Représentation informatique Chaque noeud porte une étiquette ou valeur ou clé. Un noeud est ainsi défini par son étiquette et ses sous-arbres. On peut donc représenter un arbre par un n-uplet e, a 1,..., a k dans lequel e est l étiquette portée par le noeud, et a 1,..., a k sont ses sous-arbres. Exemple L arbre correspondant à l expression arithmétique (y/2 t)(75 + z) : sera représenté par :,, /, y, 2, t, +, 75, z 2.2 Terminologie La terminologie est inspirée des liens de parenté.

Unisciel algoprog tn00acours, April 25, 2015 6 Ancêtre, Chemin Soit x un noeud d un arbre T de racine r. Un noeud quelconque y sur l unique chemin qui relie x à la racine r est appelé ancêtre de x. Descendant, Sous-arbre Si y est un ancêtre de x, alors x est un descendant de y. Le sous-arbre de racine x est l arbre composé des descendants de x enraciné en x. Frère d un noeud Un frère d un noeud x est un fils du père de x et qui n est pas x. Degré d un noeud Le nombre de fils du noeud x est appelé le degré de x. Donc, suivant qu un arbre (enraciné) est vu comme un arbre (enraciné) ou un graphe, le degré de ses sommets n a pas la même valeur! Profondeur d un noeud La longueur du chemin entre la racine r et le noeud x est la profondeur (ou niveau) de x : le premier niveau (par convention, profondeur 0) contient la racine seulement, le deuxième niveau contient les deux fils de la racine,..., les noeuds du niveau k sont les fils des noeuds du niveau k 1... Hauteur de l arbre La plus grande profondeur que puisse avoir un noeud quelconque de l arbre T est la hauteur de T. C est donc aussi le nombre de noeuds qui jalonnent la branche la plus longue.

Unisciel algoprog tn00acours, April 25, 2015 7 Définition de la hauteur Elle varie en fonction des auteurs. Pour certains la hauteur d un arbre contenant un seul noeud est -1. Arbre ordonné Un arbre ordonné est un arbre enraciné dans lequel les fils de chaque noeud sont ordonnés entre eux. Exemple Le sous-arbre enraciné en 8 contient les noeuds 8, 6, 5 et 9. Les deux arbres ne diffèrent que s ils sont ordonnés. Ils sont identiques si on les regarde comme de simples arbres (enracinés). 7 profondeur 0 7 3 10 4 profondeur 1 3 10 4 8 12 11 2 profondeur 2 12 8 11 2 6 5 1 profondeur 3 1 6 5 9 profondeur 4 9 Les arbres en théorie des graphes En théorie des graphes, un arbre est un graphe connexe et sans cycles, c.-à-d. qu entre deux sommets quelconques du graphe il existe un chemin et un seul. On parle dans ce cas d arbre non planté, puisqu il n y a pas de sommet particulier qui joue le rôle de racine. Les sommets sont voisins les uns des autres, il n y a pas de hiérarchie qui permet de dire qu un sommet est le père (ou le fils) d un autre sommet. On démontre qu un graphe de n sommets qui a cette propriété contient exactement n 1 arêtes, et que l ajout d une nouvelle arête crée un cycle, tandis que le retrait d une arête le rend non connexe.

Unisciel algoprog tn00acours, April 25, 2015 8 3 Arbres binaires 3.1 Définitions On distingue les arbres binaires (AB) des arbres généraux. Leur particularité est que les fils sont singularisés : chaque noeud a un fils gauche et un fils droit. Ils se décrivent plus aisément de manière récursive : Définition récursive Un arbre binaire est une structure définie sur un ensemble fini de noeuds qui est : Soit vide. Soit formé de trois ensembles disjoints de noeuds : une racine, un arbre binaire appelé son sous-arbre gauche et un arbre binaire appelé son sous-arbre droit. L écriture d un arbre s en trouve modifiée puisqu un noeud a toujours deux fils. En reprenant l expression arithmétique (y/2 t)(75 + z), l arbre binaire qui la représente s écrit :,, /, y,,, 2,,, t,,, +, 75,,, z,, Un arbre binaire est plus qu un arbre ordonné dont chaque noeud serait de degré au plus deux : dans un arbre binaire, si un noeud n a qu un seul fils, la position de ce fils qu il soit fils gauche ou fils droit est importante. Exemple La figure présente deux arbres enracinés qui ne diffèrent que quand ils sont vus comme des arbres binaires.

Unisciel algoprog tn00acours, April 25, 2015 9 Arbre binaire complet Un arbre binaire est complet si chaque noeud est soit une feuille, soit de degré deux aucun noeud n est donc de degré un. Arbre k-aire Un arbre k-aire est une généralisation de la notion d arbre binaire où chaque noeud est de degré au plus k et non plus simplement de degré au plus 2. 3.2 Quelques caractéristiques Propriété Le nombre de feuilles au niveau h d un arbre binaire complet est 2 h 1. Preuve Soit A un arbre binaire complet. Le nombre de noeuds de A au niveau 0 est 1, au niveau 1 est 2 1, au niveau 2 est 2 2,..., et au niveau p est donc 2 p.

Unisciel algoprog tn00acours, April 25, 2015 10 Propriété Le nombre total de noeuds d un arbre binaire complet de h niveaux est : h 1 i=0 2 i = 2 h 1 Corollaire La hauteur h(a) (le nombre de niveaux) d un arbre binaire A contenant n noeuds est au moins égale à : lg n + 1 Preuve Soit A est un arbre de hauteur h comportant n noeuds. Pour tout entier m, on a : Par contraposée, on a : h m 1 n < 2 m 1 n 2 m 1 h m Le plus grand entier m vérifiant n 2 m 1 est lg n + 1. On a donc : h lg n + 1 Montrez que pour tout entier n 1 : lg n + 1 = lg (n + 1) Conséquence La hauteur minimale lg n +1 est atteinte lorsque l arbre est complet. Pour être efficaces, les algorithmes qui utilisent des arbres binaires font en sorte que ceux ci soient équilibrés (voir les tas ou les AVL-arbres par exemple). 3.3 Fonctionnalités et Implémentation Fonctionnalités Pour pouvoir manipuler des arbres binaires, on doit disposer des fonctionnalités suivantes : racine(a) filsgauche(a) filsdroit(a) val(a)

Unisciel algoprog tn00acours, April 25, 2015 11 Implémentation C/C++ On utilise en général des pointeurs pour représenter les liens entre un noeud et ses fils. Python On peut représenter un arbre vide par une liste vide [] et un arbre non vide par une liste comprenant 3 éléments [clé,filsgauche,filsdroit].

Unisciel algoprog tn00acours, April 25, 2015 12 4 Parcours des arbres Nous ne considérons ici que des arbres ordonnés. 4.1 Parcours en profondeur Les parcours permettent d effectuer tout un ensemble de traitement sur les arbres. Le parcours le plus simple à programmer est celui dit en profondeur d abord. Parcours en profondeur d abord On descend le plus profondément possible dans l arbre puis, une fois qu une feuille a été atteinte, on remonte pour explorer les autres branches en commençant par la branche «la plus basse» parmi celles non encore parcourues ; les fils d un noeud sont bien évidemment parcourus suivant l ordre sur l arbre. Algorithme PP PP(A) Début Si A n est pas réduit à une feuille Faire Pour tous les fils u de racine(a) Faire Dans l ordre PP(u) FinPour FinSi Fin Cas d un arbre binaire non vide On parcourt récursivement son sous-arbre gauche, puis son sous-arbre droit, la racine de l arbre pouvant être traitée au début, entre les deux parcours ou à la fin. Dans le premier cas, on dit que les noeuds sont traités dans un ordre préfixe, dans le second cas dans un ordre infixe et dans le troisième cas dans un ordre postfixe. Algorithme Parcours Parcours(AB a) Début Si Non estvide(a) TraitementPrefixe(val(A)) Parcours(filsGauche(A)) TraitementInfixe(val(A)) Parcours(filsDroit(A)) TraitementPostfixe(val(A)) FinSi Fin

Unisciel algoprog tn00acours, April 25, 2015 13 Affichage des valeurs d un arbre binaire Les trois algorithmes suivants affichent les valeurs contenues dans les noeuds d un arbre binaire, selon des parcours en profondeur préfixe, infixe et postfixe respectivement. Parcours préfixe d un arbre binaire Préfixe(A) Début Si A <> Nil Faire // Non estvide(a) Afficher(racine(A)) Préfixe(filsGauche(A)) Préfixe(filsDroit(A)) FinSi Fin Exemple Pour l arbre ci-dessous, un affichage préfixe donnerait : 12 1 91 67 7 82 61 Parcours infixe d un arbre binaire Infixe(A) Début Si A <> Nil Faire Infixe(filsGauche(A)) Afficher(racine(A)) Infixe(filsDroit(A)) FinSi Fin Exemple Pour l arbre exemple : 91 1 67 12 7 61 82

Unisciel algoprog tn00acours, April 25, 2015 14 Parcours postfixe d un arbre binaire Postfixe(A) Début Si A <> Nil Faire Postfixe(filsGauche(A)) Postfixe(filsDroit(A)) Afficher(racine(A)) FinSi Fin Exemple Pour l arbre exemple : 91 67 1 61 82 7 12 4.2 Parcours en largeur Dans un parcours en largeur d abord, tous les noeuds à une profondeur i doivent avoir été visités avant que le premier noeud à la profondeur i + 1 ne soit visité. Un tel parcours nécessite que l on se souvienne de l ensemble des branches qu il reste à visiter. Pour ce faire, on utilise une file (ici notée F ).

Unisciel algoprog tn00acours, April 25, 2015 15 Parcours en largeur d un arbre PL(A) Début F <- enfiler(racine(a)) TantQue non FileVide(F) Faire u <- defiler(f) Pour tous les fils v de u faire Dans l ordre enfiler(f, v) FinPour Fin