Rappels. Cours : Structures de données arborescentes partie 1. Vocabulaire. Exemple

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

Les arbres binaires de recherche

Quelques Algorithmes simples

ARBRES BINAIRES DE RECHERCHE

INF601 : Algorithme et Structure de données

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

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique, Structures de données et langage C

Recherche dans un tableau

Découverte de Python

Arbres binaires de recherche

Algorithmes récursifs

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

Chapitre 7. Récurrences

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

Domain Name Service (DNS)

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

Algorithmique et langages du Web

Organigramme / Algorigramme Dossier élève 1 SI

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

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

Programme Compte bancaire (code)

LES TYPES DE DONNÉES DU LANGAGE PASCAL

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

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

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

Initiation à la Programmation en Logique avec SISCtus Prolog

Gestion mémoire et Représentation intermédiaire

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

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

Programmation linéaire

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

1 Recherche en table par balayage

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


Algorithmique et Programmation

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

Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Organiser les informations ( approche technique )

BIRT (Business Intelligence and Reporting Tools)

Initiation à LabView : Les exemples d applications :

Cours d algorithmique pour la classe de 2nde

1. Structure d'un programme FORTRAN 95

Dualité dans les espaces de Lebesgue et mesures de Radon finies

Master IMEA 1 Calcul Stochastique et Finance Feuille de T.D. n o 1

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Examen Médian - 1 heure 30

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

Initiation à la programmation en Python

Java Licence Professionnelle CISII,

Traduction des Langages : Le Compilateur Micro Java

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

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

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

Analyse empirique et modélisation de la dynamique de la topologie de l Internet

Commission Polydog Règlement de compétition SportPlaisir Catalogue des disciplines catégorie adresse niveau B

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Algorithmes de recherche d itinéraires en transport multimodal

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Corrigé des TD 1 à 5

INF 321 : mémento de la syntaxe de Java

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

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

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

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

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

Principes des langages de programmation INF 321. Eric Goubault

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

CAPTEURS - CHAINES DE MESURES

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

Plateforme PAYZEN. Définition de Web-services

Limites finies en un point

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

La classification automatique de données quantitatives

Console IAP Manuel d utilisation

Parallélisme et Répartition

TUTORIAL 1 ETUDE D UN MODELE SIMPLIFIE DE PORTIQUE PLAN ARTICULE

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Chapitre 10. Les interfaces Comparable et Comparator 1

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

chapitre 4 Nombres de Catalan

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

MIS 102 Initiation à l Informatique

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Algorithmique et Programmation, IMA

DG-ADAJ: Une plateforme Desktop Grid

as Architecture des Systèmes d Information

Faites connaissance avec votre Rubik s Cube Étape 1

Apprendre à apprendre avec les cartes heuristiques

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)

Programmer en JAVA. par Tama

Partie publique / Partie privée. Site statique site dynamique. Base de données.

Transcription:

Rappels Cours : Structures de données arborescentes partie Jean-Stéphane Varré Université Lille jean-stephane.varre@lifl.fr structure de données non linéaire, organisation hiérarchique entre les données stockées, utilisée pour structurer des données : système de fichiers, base de données sites web fichier xml Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Vocabulaire Exemple nœud : caractérisé par une valeur + un nombre fini de fils, possède un unique père feuille :nœudsansfils nœud interne :unnœudquin estpasunefeuille arité d un nœud n : nombre de fils du nœud n arité d un arbre a : nombre maximal de fils d un nœud de a racine d un arbre a :c estleseul nœud sans père profondeur d un nœud n : nombre de nœuds sur la branche entre la racine et le nœud n exclu hauteur d un arbre a : c est le nombre de nœuds sur la branche qui va de la racine de a à la feuille de profondeur maximale hauteur 4 7 6 racine noeuds internes feuilles Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 4/

Structures de données associées Représentation chaînée Cas où l arité n est pas bornée type a arbre = Vide Cons of a noeud and a noeud = { valeur : a; 4 fils : a arbre list (* mais aussi un tableau, une table de hachage,... *) 6 } Cas où l arité est bornée (ici un arbre à fils maximum) type a arbre = Vide Cons of a noeud and a noeud = { valeur : a; 4 gauche : a arbre; droit : a arbre 6 } Exemple tiré du cours d API. Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 6/ Hauteur, profondeur, arité Parcours en profondeur Soit A un arbre d arité a, detaillen et de hauteur h. le nombre n p de nœuds de A à profondeur 0 apple p apple h vérifie apple n p apple a p la taille n vérifie l encadrement On traite récursivement les nœuds de l arbre. Trois sens de parcours : préfixé : traiter la racine puis les fils de gauche à droite, postfixé : traiter les fils de gauche à droite puis la racine, infixé (n a vraiment de sens que pour les arbres binaires) : traiter le fils de gauche, puis la racine, puis le fils de droite h +apple n apple ah+ a le hauteur h vérifie l encadrement Tiré du cours d API log a (n(a ) + ) apple h apple n Exemple a b d g h e c f infixé postfixé préfixé b, g, d, h, a, e, c, f g, h, d, b, e, f, c, a a, b, d, g, h, c, e, f Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 7/ Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes /

Parcours en profondeur - récursif Parcours en profondeur - itératif avec pile procedure AffichagePrefixe(a) si a n est vide alors (* traitement de la racine *) a cher la valeur de la racine (* traitement des fils gauche et droit *) AffichagePrefixe(fils gauche de a) AffichagePrefixe(fils droit de a) fin procedure Note : pour changer le type de parcours il su instructions du if. Comment dérécursiver le parcours? t d échanger les trois procedure AffichagePrefixe(a) soit p une pile d arbres empiler a dans p tant que p n est pas vide faire (* on traite l arbre au sommet de la pile *) s sommet de p dépiler p si s n est pas vide alors a cher la valeur de la racine de s empiler le fils droit de s dans p empiler le fils gauche de s dans p fin tant que fin procedure Il ne faut pas se tromper et bien empiler le sous-arbre droit avant le sous-arbre gauche car la pile est une structure LIFO. Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 0/ Parcours en largeur Parcours en largeur - itératif avec file On traite les nœuds, des moins profonds aux plus profonds, par strates. Exemple b g d a h e c f a,b,c,d,e,f,g,h Comment réaliser un tel parcours? procedure AffichageEnLargeur(a) soit f une file d arbres tant que f n est pas vide faire s tête de f défiler f si s n est pas vide alors a cher la racine de s enfiler le fils gauche de s dans f enfiler le fils droit de s dans f fin tant que fin procedure Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes /

Rappel sur les arbres binaires un arbre binaire est un arbre dont chaque nœud possède au plus deux fils un arbre binaire complet est un arbre binaire dont tous les nœuds internes possèdent exactement deux fils un arbre binaire parfait est un arbre binaire complet pour lequel toutes les feuilles sont à la même profondeur un arbre binaire quasi parfait de hauteur h est un arbre binaire tel que : toutes les feuilles sont à profondeur h ou h, dont tous les nœuds internes sauf eventuellement un à profondeur h possèdent deux fils, et toutes les feuilles de profondeur h sont groupées à gauche. Une nouvelle structure de données : le tas Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Tas un tas max est un arbre binaire quasi-parfait dont la valeur associée à chaque nœud est plus grande que celles de ses fils Trier avec un tas? Comment faire? Idée : extraire la valeur maximale, puis la seconde, etc... propriétés : la valeur la plus grande est située à la racine du tas pas d ordre entre les valeurs des fils d un nœud (ce n est pas un arbre binaire ordonné!) mais la seconde valeur maximale est nécessairement la valeur d un des deux fils de la racine la hauteur d un tas de taille n est h = blog nc Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / extraire la racine, remonter la seconde valeur maximale à la racine recommencer récursivement Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 6/

Implantation d un tas si le tas est utilisé pour un tri, alors le nombre d éléments est borné on peut alors utiliser une structure statique plutôt qu une structure dynamique!! Problème : l arbre obtenu n est plus un tas puisque ce n est plus un arbre quasi parfait les fils d un nœud représenté à l indice i se trouvent en positions i +et i + 0 4 Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Suppression de l élément maximum!! Problème : l arbre obtenu n est plus un tas puisque ce n est plus un arbre quasi parfait Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes /

procedure ReorganiserTas(t) p racine du tas repéter g le fils gauche de p d le fils droit de p (* recherche du max entre le fils gauche et droit *) max p si g 6= Videet valeur(max) < valeur(g) alors max g si d 6= Videet valeur(max) < valeur(d) alors max d (* arr^et lorsqu on ne peut plus descendre dans l arbre *) fini p =max si non fini alors é c h a n g e r l e s v a l e u r s d e s n œ u d s p et max jusqu à fini fin procedure Implantation de la suppression du maximum type a tas = { mutable taille : int; le_tas : a array 4 } 6 (** 7 supprimer [tas] : supprime l element max du [tas] et le retourne a tas -> a *) 0 let supprimer_max tas = let max = tas.le_tas.(0) in tas.le_tas.(0) <- tas.le_tas.(tas.taille-); 4 tas.taille <- tas.taille - ; if tas.taille >= then reorganiser tas 0; 6 max Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Implantation de la réorganisation Complexité de la réorganisation et de la suppression let reorganiser tas = let fini = ref false and pere = ref 0 4 in while not!fini do 6 let g = *!pere + (* indice du fils gauche *) 7 and d = *!pere + (* indice du fils droit *) and imax = ref!pere (* indice du maximum *) in 0 (* recherche du max entre le fils gauche et droit *) if g < tas.taille && tas.le_tas.(!imax) < tas.le_tas.(g) then imax := g; if d < tas.taille && tas.le_tas.(!imax) < tas.le_tas.(d) then 4 imax := d; (* arret lorsqu on ne peut plus descendre dans l arbre *) 6 fini := (!pere =!imax); 7 if not!fini then echanger tas.le_tas!pere!imax; pere :=!imax 0 done Réorganisation : à chaque tour de boucle, dans le pire des cas, on descend dans l arbre, et on a un échange d éléments un tas a une hauteur blog nc, la boucle est donc réalisée log n fois au maximum la complexité est donc en O(log n) Suppression : on a un échange d éléments + une réorganisation la complexité est donc en O(log n) Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 4/ Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes /

Création d un tas comment construire le tas à partir d un ensemble de valeurs quelconque? la dernière moitié du tableau représente les feuilles, les feuilles sont des tas, mais pas les sous-arbres idée : réorganiser les sous-arbres en commençant par les plus profonds 7 7 7 7 7 Modification de reorganiser Paramètre indiquant le nœud racine du sous-arbre à réorganiser. let reorganiser tas p = let fini = ref false and pere = ref p 4 in while not!fini do 6 let g = *!pere + (* indice du fils gauche *) 7 and d = *!pere + (* indice du fils droit *) and imax = ref!pere (* indice du maximum *) in 0 (* recherche du max entre le fils gauche et droit *) if g < tas.taille && tas.le_tas.(!imax) < tas.le_tas.(g) then imax := g; if d < tas.taille && tas.le_tas.(!imax) < tas.le_tas.(d) then 4 imax := d; (* arret lorsqu on ne peut plus descendre dans l arbre *) 6 fini := (!pere =!imax); 7 if not!fini then echanger tas.le_tas!pere!imax; pere :=!imax 0 done Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 7/ Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Implantation de la création Complexité de la création (** a array -> a tas *) 4 let creer t = let n = Array.length t 6 in 7 let tas = { taille = n; le_tas = Array.copy t } in (* reorganisation de t *) 0 for i = tas.taille / downto 0 do reorganiser tas i; done; tas En première approche : une boucle sur la moitié du tableau : n chaque réorganisation est en O(log n) d où une complexité en O(n log n) Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes 0/

Complexité de la création Implantation du tri Plus finement : à la construction, la réorganisation se fait sur des sous-arbres de hauteur di é r e n t e s : d e 0 à blog nc nombre de sous-arbres de hauteur i : h si i est la hauteur d un sous-arbre, le coût de la réorganisation est O(i) on en déduit que la complexité est!! hx hx h i O(i) =O h i X i = O n = O(n ) = O(n) i i i=0 avec P i i=0 = i ( = ) i=0 i=0 i (** a array -> a array *) 4 let trier t = let tas = creer t 6 in 7 while tas.taille >= do (* extraction de la valeur maximale de t dans v et reorganisaton *) let v = supprimer_max tas 0 in (* rangement de la valeur maximale dans a *) tas.le_tas.(tas.taille) <- v done; 4 tas.le_tas Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes / Complexité du tri création en O(n) + boucle sur la taille du tableau : n suppression de l élément maximum en O(log n) tri en O(n log n) Université Lille, Info 04 - ASD, Licence Informatique S4 Structures arborescentes /