Chapitre VI. Arbres (définition, parcours, représentation)

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

Module Systèmes d’exploitation
Structures de données avancées : Principales structures de données
Structures de données avancées : MTH ( Multidimensional trie hashing )
Chapitre 3 Les arbres binaires
Initiation à la programmation et algorithmique cours 4
Piles, files et listes: notions théoriques
Fonctions & procédures
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Chapitre VIII. Introduction aux graphes
Cours 8 Arbres équilibrés
COURS SUR LA THEORIE DES GRAPHES
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Cours d’Algorithmique

LOGO Responsable du cours Mlle Amina GHRAB : 1 ère année IAG Institut Supérieur de Gestion de Tunis.
OCaml – Les arbres L3 MI.
Les structures de données arborescentes
Algorithmes Branch & Bound
Chapitre VII. Tri Tri par tas Tri rapide.
TD4 2 MIC Romaric GUILLERM Algo-Prog en Ada.
Bases de données lexicales
Gestion de Fichiers Arbres B.
Pr ZEGOUR Djamel Eddine
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
LES ARBRES IUP 2 Génie Informatique
Structures de données IFT-2000
IFT Complexité et NP-complétude
Gestion de Fichiers Indexes basés sur les structures d’arbres binaires et indexes à niveaux multiples.
Algorithmes d ’approximation
Les arbres binaires.
Les arbres et tas binomiaux
Exposé en structures de données
IV. Arbres  Arbre binaire (AB) Représentation SDD d’un AB
Algorithmique et structures de données en C
Structures de données IFT-2000
LES ARBRES Un arbre est une structure homogène dont chaque élément,
Structures de données IFT-2000
Exploration systématique de graphes
Diviser pour résoudre A. Principe général B. Applications
Le langage C Structures de données
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
Mathématiques Discrètes
Arbres binaires et tables de hachage
Exploration systématique de graphes
Structures de données avancées : Concepts du Multidimensionnel D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Problème de double digestion
Cours LCS N°4 Présenté par Mr: LALLALI
Alignement de génomes. MUMmer (1999) Utilise l’arbre des suffixe. Basé sur le principe de « Maximum Unique Match » (MUM). Étant donné deux génomes A et.
Introduction à la récursivité
Algorithmique et Conception Objet
Structures de données avancées : Variantes des B arbres
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : Principales structures de données
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
1 CSI 4506: Introduction à l’Intelligence Artificielle La Recherche Adversariale.
Traversées (Parcours ) de graphes
. Le B-Arbre.
Les arbres Arbres binaires
Algorithmes Branch & Bound Module IAD/RP/RO Master d ’informatique Paris 6 Philippe Chrétienne.
Cycle, Cocycle, Arbre et Arborescence
Transcription de la présentation:

Chapitre VI. Arbres (définition, parcours, représentation) Chapitre VI.1. Arbres généraux

Introduction Les structures arborescentes jouent un rôle important dans l’organisation de données - indexes des Bases de Données sont organisés sous forme des arbres afin de segmenter la mémoire et de réduire le temps d’accès aux données. -dans ce chapitre nous étudions l’objet « arbre » et proposons différentes stratégies de son exploration

Arbres(1) Un arbre peut être défini comme un ensemble des points, appelé des nœuds et un ensemble de lignes appelées des arcs, ou un arc relie deux nœuds distincts. Propriétés : (1) Il existe un nœud particulier appelé la racine (2) Tout nœud c autre que racine est relié par un arc à un autre nœud p appelé le père de c (3) Un arbre est qualifié de connexe car si nous commençons à n’importe quel nœud n autre que la racine et nous nous déplaçons vers le père de n, puis vers le père du père de n et ainsi de suite, nous atteindrons certainement la racine de l’arbre.

Arbres Exemple Huges Capet 939-996 Adélaïde d’Aquitaine Robert II 970-1031 Constance de Provence Henri Ier 1008-1060 Anne de Kiev « Jaroslavna » Robert Sans terre Philippe Ier 1053-1108 Berthe de Hollande Huges le Grand

La définition récursive des arbres La base : Un nœud seul n est un arbre. On dit que n est la racine de cet arbre à un nœud La récurrence : soit r un nouveau nœud et soient T1, T2, …,Tk des arbres ayant respectivement pour racines c1,c2,…,ck. Nous demandons à ce qu’aucun nœud n’apparaisse plus d’une fois dans les Ti; r étant un nouveau nœud , il ne peut pas apparaître dans un de ces arbres. Nous formons un nouvel arbre T à partir de r et de T1, T2,…,Tk : 1. Faire de r la racine de l’arbre T 2. Ajouter un arc entre r et chacun des c1,c2,…ck, de manière que chacun de ces nœuds soit un fils de la racine r

Chemins, ancêtres et descendants(1) Supposons que m1,m2,…,mk soit une séquence de nœuds telle que m1=père(m2), m2=père(m3)…mk-1=père (mk) Alors m1, m2,…,mk est appelée « chemin depuis m1 jusqu’à mk » dans l’arbre L=k-1 – longueur du chemin Illustration graphique

Chemins, ancêtres et descendants(2) m1 est l’ancêtre de mk mk est descendant de m1 Si L(m1, .., mk)>=1 alors m1 est ancêtre propre de mk et mk est descendant propre de m1 Sous-arbre : dans un arbre T un nœud n accompagné de tous ses descendants propres (si il en possède) est appelé un sous-arbre de T. Si père(ni)=père(nj), ni, nj sont appelé frères. Feuille : un nœud d’un arbre qui n’a pas de fils Nœuds intérieurs : ceux qui ont au moins un fils

Mesures sur les arbres(1) Le nombre de fils d’un nœud n dans un arbre est appelé le degré de n. L’existence de la racine donne une orientation aux arbres d(n)=4

Mesures sur les arbres (2) La profondeur d’un nœud n p(n) : la longueur du chemin depuis la racine jusqu’à n La hauteur d’un nœud n h(n) : la longueur du plus long chemin depuis n jusqu’à une feuille r h(n)=2, p(n)=2 n

Mesures sur les arbres (3) p(r)=0 p(n)=p(q) +1 si q=père(n) La hauteur ou la profondeur d’un arbre h(T) = max{h(n): n nœud de T} La longueur de cheminement La longueur du cheminement externe La longueur du cheminement interne

Arbres comme structures de données Arbres avec des nœuds étiquetés par des entiers 1,…,N Codage par tableau « père » :taille N 1 1 2 3 4 5 6 7 8 9 3 5 6 9 1 5 1 1 5 4 4 7 4 8 9 2

Codage par tableau « père » 1. Est-feuille (n)? 2. p(n)? 3. h(T)?

Représentation des arbres avec des tableaux de pointeurs info p1 p2 pbf info info info pbf : facteur d’arborescence = le nombre maximal de fils que peut avoir un noeud

Représentation des arbres avec des tableaux de pointeurs(2) Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Déclaration d’un arbre : MonA : PtrNoeud { pointeur vers la racine} Le temps d’accès au i-ème fils de n’importe quel nœud en O(1). L’inconvénient : gaspillage de l’espace mémoire.

Représentation des arbres avec des tableaux de pointeurs(3) Fils-aîné-frère-droit: info info info info pour un nœud autre que la racine

Représentation des arbres avec des tableaux de pointeurs(4) Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo fils_ainé : PtrNoeud frere_droit : PtrNoeud Fin Enregistrement;

Parcours des arbres (3) Un arbre peut être vu comme T1,…,Tk est un ensemble des arbres disjoints – « forêt » Du fait qu’il y a toujours un nœud (r) un arbre n’est jamais vide

Parcours des arbres(1) Procédure Parcours(A: PtrNoeud) Var i,nb : entiers Début nb:=NbrFils(A) Si feuille(A) alors TraitementTerminal sinon TraitementPref {traitement avant de voir les fils} Pour i de 1 à nb faire Parcours(ième(Liste-Fils),i) Traitement(i) {*} FinPour TraitementSuf{traitement après avoir vu tous les fils} FSi FinParcours

Parcours des arbres(2) 1. L’ordre Prefixe : chaque nœud n’est pris en compte que lors du premier passage: TraitementPref et TraitementTerminal sont actifs, les autres ne font rien. 2. L’ordre suffixe : chaque nœud n’est pris en compte que lors du dernier passage : TraitementSuff et TraitementTerminal sont actifs, les autres ne font rien.

Parcours des arbres(3) Parcours d’un arbre général

Exemple(1) : Affichage de contenu d’un arbre généalogique en parcours préfixe Procédure AffichePref(A: PtrNoeud) Var i,nb : entiers Début nb:=NbrFils(A) Si feuille(A) alors affiche(«info + plus de descendance ») sinon affiche(info) {TraitementPref : traitement avant de voir les fils} Pour i de 1 à nb faire Parcours(ième(Liste-Fils),i) FinPour FSi FinParcours

Primitives sur les arbres Type Arbre =PtrNoeud Type Forêt = Liste de PtrNoeud Signature Type Arbre, Forêt Opérations Cons : PtrNoeud X Forêt ->Arbre Racine: Arbre ->PtrNoeud List-arbres: Arbre ->Forêt Forêt-vide: ->Forêt Ième : Forêt X Entier->Arbre Nb-arbres : Forêt->Entier Insérer : Forêt X EntierXArbre->Forêt, …

Axiomes Précondition Insérer (F,i,A) est definie ssi Axiomes Racine(cons(o,F))=o List-arbres(cons(o,F))=F Nb-arbres(forêt-vide)=0 nb-arbres(insérer(F,i,A)=nb-arbres(F)+1 1<k<i->ième(insérer(F,i,A),k)=ième(F,k) K=i->ième(insérer(F,i,A),k)=A i+1<k<1+nb-arbres(F)-> ième(insérer(F,i,A),k)=ième(F,k-1) {décalage}

Mise en œuvre des primitives Représentation avec les tableau des pointeurs Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Primitive Insérer : Forêt X Entier X Arbre->Forêt Procedure Inserer (ref EnfantsDuNoeud : Tableau [1…bf] de PtrNoeud, i:entier, A : PtrNoeud) Debut Var j:entier Si i>0 et i<bf+1 alors Pour j de i à bf-1 EnfantsDuNoeud[j+1]:=EnfantsDuNoeud[j]; FPour { j pointe sur la première case vide du tableau des pointeurs} EnfantsDuNoeud[i]=A; Fin-Si FinInserer

Exemple(2) Supposons arbre généalogique avec l’ordre de la descendance selon primarité Ecrire la procédure d’ajout du fils cadet au dernier représentant de la lignée principale

Type PtrNoeud = ^Noeud Enregistrement Noeud info : TypeInfo enfants : Tableau[1,…bf] de PtrNoeud Fin Enregistrement; Procedure AjoutLePlusJeuneLD(Agen : PtrNoeud, FilsCadet : PtrNoeud) Début {Arbre n’est jamais vidé !} Si Agen.^enfants[1]=NIL { Base de récursivité 1 – le dernier descendant de la LD n’a pas de fils} alors Insérer(Agen.^enfants,1,FilsCadet) sinon {Agen.^enfants[1]<>NIL} Si Agen.^enfants[1].^enfants[1]=NIL {Base de récursivité 2- le dernier descendant de la LD a des fils} j=1 TQ(j<nbf et Agen.^enfants[j]<>NIL) j:=j+1; FTQ Si (j<nbf) alors { Test de capacité du mémoire réservé} Insérer(Agen.^enfants,j,FilsCadet) FSi sinon AjoutLePlusJeuneL(Agen.^enfants[1],FilsCadet) FinAjoutLePLusJeuneLD

Mise en œuvre des primitives NFA info Fils-aîné-frère droit Fonction ième(NFA: PtrNoeud, FD: PtrNoeud, i: entier):PtrNoeud Var k : entier ptr : PtrNoeud Debut Si i=1 alors retourner NFA sinon ptr:=FD; k:=3; Tq ptr<>NIL et k<i faire ptr:=ptr.FD; k++; Ftq FSi Retourner ptr; Fin ième