Arbre binaire.

Slides:



Advertisements
Présentations similaires
Les arbres binaires.
Advertisements

CEO Commerciale Casablanca UCC1 POS Maarif UCM1 UCM2 POS Centre UCC1 Rabat UR1 POS AgdalPOS Ville UC1 AchatMarketing UM1 UM2 UC1 Direction UD1 Schéma Général.
Introduction à la notion de fonction 1. Organisation et gestion de données, fonctions 1.1. Notion de fonction ● Déterminer l'image d'un nombre par une.
Université de Nantes CHORD Vincent Trève. Introduction ● Problématique – Comment accéder efficacement aux données réparties sur un système pair à pair?
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
INFO 2014 Fichiers et base de données Philippe Fournier-Viger Département d’informatique, U.de Moncton Bureau D216,
Volée 1316 S3 Cours No 2_3 : Le nombre en 1-2H. Les fonctions du nombre  Dénombrer, énumérer, décrire une collection. Aspect cardinal  Dater, classer,
Les objectifs de connaissance : Les objectifs de savoir-faire : - Connaître les règles de nomenclature des composés organiques (alcanes, alcools, aldéhydes,
Cours COMPOSANTES DES VECTEURS Dimitri Zuchowski et Marc-Élie Lapointe.
DIAGRAMME DE DEPLOIEMENT Exposé de: MBALLA MEKONGO Michèle MBOUNA FEUZE William SIEYADJEU Alex Lionel CHOPGWE Leonard NDUMATE Landry TIDJON Lionel.
A. Objectifs de la séquence: à l'issue de la séquence, il faut être capable de: Identifier l’ordre et la nature d’un filtre Tracer les diagrammes asymptotiques.
1er partie : Les lois du courant continu
Programmation en C++ Standard Library
La technologie des mémoires
Lire et manipuler du XML...
Projet de programme et recommandations
Coloration de graphe, backtracking, branch and bound
LES TABLEAUX EN JAVA.
1.3 COORDONNÉES DES POINTS
Les Bases de données Définition Architecture d’un SGBD
Initiation aux bases de données et à la programmation événementielle
L’Instruction de Test Alternatif
Généralité sur les bases de données
I Définition chapitre 1 Les Matrices.
JAVA et POO : Notion d'héritage
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
Polymorphisme : règles
Chapitre 9 : Les fonctions (2)
Algorithmique & Langage C
Plan Introduction Parcours de Graphe Optimisation et Graphes
VI. Tri par tas (Heap sort)
UMLV ã Arbres de recherche AVL
Techniques du Data Mining
Cours N°9: Algorithmiques Les Tableaux 1
Stabilité des porteurs horizontaux (Poutres)
Notion De Gestion De Bases De Données
Création Et Modification De La Structure De La Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Cours N°10: Algorithmiques Tableaux - Matrices
PROGRAMMATION ET ENSEIGNEMENT
Chapter 12: Structures de données
Programmation Android Bases De Données, SQL-lite
Formation sur les bases de données relationnelles.
Diagrammes UML 420-KE2-LG.
Chapitre 3 : Caractéristiques de tendance centrale
Programmation Android Première application Android
L1 Technique informatique
5 Analyse avec Designer d'Oracle
SIO SI3 : Exploitation des données
Langages de programmation TP11
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Reconnaissance de formes: lettres/chiffres
9 Méthodes multidimentionnelles et représentation d'associations
Tris Simples/Rapides.
Piles et files.
Le langage C# : Partie 1.
Les arbres généraux.
LISTES.
chapitre 10 : La Géométrie dans l’Espace.
Listes Chaînées.
Python Nicolas THIBAULT
Elections locales probabilistes
Association des conducteurs تجميع الموصلات الأومية
DICTIONNAIRES (MAPS).
Type Tableau Partie 1 : Vecteurs
Les données structurées et leur traitement
Transcription de la présentation:

Arbre binaire

Sommaire Introduction Terminologie Arbre Binaire  Arbre de recherche binaire Chapitre 8 Data Structures & Algorithm, 2nd Edition, Robert Lafore

Introduction Tableau ordonné : Liste chaînée :  opération de recherche : O(logN) opération d'insertion - suppression : recherche position déplacement N/2 items en moyenne  Liste chaînée :  opération d'insertion : O(1)  opération de suppression : O(1)  opération de recherche : O(N) Deux types de structure de données avec :  insertion/suppression rapide comme dans le cas de la liste  recherche rapide comme dans le tableau  Arbre : possède ces caractéristiques  structure de données la plus intéressante  Structures linéaires (séquences) : les listes chaînées, les piles et les queues  Structures non linéaires : Arbres  

Introduction Arbre : un arbre est une structure à deux dimensions comportant une collection d'éléments appelés nœuds (nodes) associés entre eux par des arcs (edges) selon un ordre hiérarchique strict Dans un arbre, chaque nœud peut avoir plusieurs nœuds descendants appelés enfants (fils) mais il ne peut avoir qu'un seul ascendant, le parent.  

Introduction Les nœuds sont identifiés par les lettres A à K  A est le père des nœuds B, C, D, E  B est le père des nœuds F et G  D est le père de H  E est le père des nœuds I, J, K

Introduction Les nœuds représentent des entités tels que : personne, les composants d'une voiture, une entité du monde réel, etc.  Les arcs : représentés par des références dans un programme Java (pointeurs en C++) Différents types d'arbres :  arbre avec plusieurs enfants par nœud  arbre avec un maximum de deux enfants par nœud : arbre binaire

Terminologie

Terminologie Chemin (path) : le chemin d'un nœud est la suite de nœuds par lesquels il faut relier la racine à celui-ci  Racine : La racine d'un arbre est le seul nœud n'ayant pas de parent – il y a une seule racine dans un arbre  Parent : un nœud quelconque (excepté la racine) ne peut avoir qu'un seul nœud ascendant – le parent  Enfant : Chaque nœud peut avoir plusieurs nœuds descendants appelés enfants  Feuille : une feuille est un nœud n'ayant aucun enfant  Sous arbre : un sous arbre est un sous ensemble de nœud d'un arbre ayant une structure d'arbre  Visiter un nœud : un nœud est visité lorsque le contrôle de programme arrive à ce nœud, généralement, pour effectuer une certaine opération au niveau du nœud  Traverser : traverser un arbre signifie visiter tous les nœuds d'un arbre dans un ordre spécifié  Niveau : le niveau d'un nœud correspond au nombre de nœud de son chemin  Exemple : racine de niveau 0 enfants de la racine de niveau 1  Clé : la clé d'un item est représentée dans un cercle

Arbre binaire Un arbre binaire est un arbre dont les nœuds peuvent avoir au maximum deux enfants Dans un arbre binaire les enfants d'un nœud sont respectivement appelés enfant de gauche et enfant de droite Un nœud dans un arbre binaire peut avoir :  un enfant de gauche et un enfant de droite un enfant de gauche seulement  un enfant de droite seulement  aucun enfant – feuille  Intérêt des arbres binaires :  simplicité utilisation répandue examen de tous les algorithmes de base  cas particulier : arbre de recherche binaire 

Arbre de recherche binaire (introduction) Un arbre de recherche est un arbre binaire satisfaisant aux propriétés suivantes : L'étiquette de chaque nœud contient une valeur particulière d'un type ordonné – cette valeur est appelée clé  Pour tous sous arbre, la clé de la racine est supérieure à toutes les clés du sous arbre gauche et inférieure à celles du sous arbre droit

Arbre de recherche binaire (représentation d’un arbre) Différentes approches peuvent implémenter un arbre :  tableau stocker les nœuds dans des espaces non contigus et les connecter par des références Exemples de représentation class Node { int iData; // donnée clé double fData; // autre donnée Node leftChild; // enfant de gauche Node rightChild // enfant de droite … public void displayNode() {… }

Arbre de recherche binaire (représentation d’un arbre) Exemples de représentation class Node { Person p; // donnée clé Node leftChild; // enfant de gauche Node rightChild // enfant de droite …. public void displayNode() {… } }  class Person int iData;

Arbre de recherche binaire (représentation d’un arbre) Définition de la classe arbre (Tree) class Tree { private Node root; // un seul champ … public void find(int key) { … }

Arbre de recherche binaire (Opérations) Rechercher un nœud dans un arbre  Insérer un nœud dans un arbre  Supprimer un nœud dans arbre  Parcourir un arbre  Afficher un arbre

Arbre de recherche binaire (Opérations) Rechercher un nœud dans un arbre Un nœud dans un arbre de recherche : objet contenant l'information  Exemple :  Personne numero-Employe (clé) nom prenom   Composant-Voiture num-Composant quantité prix … Processus de recherche Clé recherchée : 57

Arbre de recherche binaire (Opérations) Processus de recherche Clé recherchée : 57

Arbre de recherche binaire (Opérations) Algorithme (programme) de recherche dans un arbre Node find (int key) { Node current =root; while (current.iData != key) if (key < current.iData) current = current.leftChild; else current = current.rightChild; if (current == null) return null; } return current;

Arbre de recherche binaire (Opérations) Algorithme (programme) de recherche dans un arbre Efficacité:  Recherche : à quel niveau se situe le nœud ?  Arbre 5 niveaux => 5 comparaisons au maximum  Recherche: O(log2N)

Arbre de recherche binaire (Opérations) Insertion : recherche du parent du nœud à insérer Exemple: Insérer 45

Arbre de recherche binaire (Opérations) Insertion : Algorithme (programme) void insert (int id, double dd){ Node newNode = new Node(); newNode.iData = id; newNode.fData = dd; if (root == null) root = newNode; else { Node current = root; Node parent; While (true) { parent = current; if( id< current.iData) { current = current.leftChild; if (current == null) { parent.leftChild = newNode; return;} } else { current = current.rightChild; if (current == null) { parent.rightChild = newNode;

Arbre de recherche binaire (Opérations) Parcours d’un arbre: visiter chaque nœud de l'arbre selon un ordre spécifié  Trois parcours utilisés : préordre, symétrique (inorder) et postordre  Parcours symétrique : parcours le plus utilisé pour parcourir un arbre de recherche binaire  Parcours symétrique: le parcours symétrique d'un arbre permet d'obtenir les éléments triés en ordre croissant  Traverser les nœuds du sous arbre gauche avant la racine  Visiter la racine  Traverser les nœuds du sous arbre droit

Arbre de recherche binaire (Opérations)  Parcours symétrique Void inorder (Node localRoot) { if ( localRoot ! = null) { inorder (localRoot.leftChild); system.out.println(localRoot.iData " "); inorder (localRoot.rightChild); }

Arbre de recherche binaire (Opérations)   Parcours en préordre visiter la racine traverser les nœuds du sous arbre gauche traverser les nœuds du sous arbre droit Parcours en postordre  

Arbre de recherche binaire (Opérations)  Recherche du minimum ou du maximum Recherche du minimum : enfant de gauche

Arbre de recherche binaire (Opérations)  Recherche du minimum ou du maximum Recherche du minimum Node minimum() { Node current, last; Current = root; While (current != null) last = current; current = current.leftChild(); } return last;

Arbre de recherche binaire (Opérations)  Suppression d’un nœud Suppression d'un nœud : recherche du nœud Pour la suppression d'un nœud trois cas à considérer : le nœud à supprimer est une feuille le nœud à supprimer à un enfant le nœud à supprimer à deux enfants  cas 1 : Nœud à supprimer est une feuille Supprimer un nœud feuille : mettre à null le champ du parent pointant vers le nœud à supprimer

Arbre de recherche binaire (Opérations: Suppression d’un noeud) Node current = Node parent = root ; Boolean isleftChild = true; while (current.iData != key){ parent = current; if(key < current.iData){ isleftChild =true; current = current.leftChild; } else{ isleftChild =false; current = current.rightChild; if (current == null) return false; }  if (current.leftChild ==null && current.rightChild == null){ if (current == root) root = null else if (isleftChild) parent.leftChild = null else parent rightChild = null

Arbre de recherche binaire (Opérations: Suppression d’un noeud) Cas 2 : Suppression d’un noeud ayant un enfant Le nœud à supprimer possède deux connections : vers le parent et vers l’enfant  Connecter l’enfant du nœud à supprimer avec le parent du nœud à supprimer  Cas possibles : enfant du nœud à supprimer : enfant de gauche ou enfant de droite  nœud à supprimer par rapport au parent : enfant de gauche ou enfant de droite  nœud à supprimer : racine  

Arbre de recherche binaire (Opérations:Suppression d’un noeud) Cas 2 : Suppression d’un noeud ayant un enfant // si pas d’enfant de droite remplacer par le sous arbre de gauche else if (current.rightChild == null) if (current == root) root = current.leftChild; else if (isleftChild) // si le noeud à supprimer est un enfant de gauche parent.leftChild = current.leftChild; else // le noeud à supprimer est un enfant de droite parent.rightChild = current.leftChild;  

Arbre de recherche binaire (Opérations:Suppression d’un noeud) Cas 2 : Suppression d’un noeud ayant un enfant // si pas d’enfants à gauche, remplacer avec le sous arbre de droit else if(current.leftChild==null) if(current == root) root = current.rightChild; else if(isLeftChild) // left child of parent parent.leftChild = current.rightChild; else // right child of parent parent.rightChild = current.rightChild; // ...  

Arbre de recherche binaire (Opérations:Suppression d’un noeud) Cas 3 : suppression d’un nœud ayant deux enfants  Arbre binaire de recherche : nœud – ordre ascendant de clés Pour chaque nœud : le nœud avec la valeur élevée est appelé successeur (inorder successor)  Supprimer un nœud ayant deux enfants consiste à le remplacer par son successeur

Arbre de recherche binaire (Opérations: Suppression d’un noeud) Cas 3 : suppression d’un nœud ayant deux enfants  Node getSuccessor(Node delNode)  { Node successorParent = delNode Node successor = delNode Node current = delNode.rightChild; while( current != null) { successorParent =successeur; successor = current; current = current.leftChild } if (successor != delNode.rightChild) successorParent.leftChild = successor.rightChild; successor. rightChild = delNode.rightChild; return successor;  

Arbre de recherche binaire (Efficacité des opérations) Nombre de noeuds Nombre de niveaux   1 1 3 2 7 3 15 4 31 5 …  Si le nombre de nœuds est : N Nombre de niveaux : L N = 2L – 1 2L = N + 1 L = log2 (N + 1) Opérations courante : O(log2N)  L’arbre : opérations communes plus efficaces que dans le cas des autres structures Traversée : moins rapide