ARBRES. Arbres binaires Représentation des arbres Fonctions primitives sur les arbres Parcours d arbres Arbres ordonnés

Documents pareils
Les arbres binaires de recherche

Les structures de données. Rajae El Ouazzani

ARBRES BINAIRES DE RECHERCHE

Arbres binaires de recherche

STAGE IREM 0- Premiers pas en Python

Quelques Algorithmes simples

INF601 : Algorithme et Structure de données

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

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

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

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

Licence Sciences et Technologies Examen janvier 2010

Conventions d écriture et outils de mise au point

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

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

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

Recherche dans un tableau

Limites finies en un point

Comparaison de fonctions Développements limités. Chapitre 10

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

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

MIS 102 Initiation à l Informatique

TD3: tableaux avancées, première classe et chaînes

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique, Structures de données et langage C

Le prototype de la fonction main()

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

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

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

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

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

Algorithmique et Programmation

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

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

L exclusion mutuelle distribuée

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Algorithmes récursifs

BAREME sur 40 points. Informatique - session 2 - Master de psychologie 2006/2007

Console IAP Manuel d utilisation

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Chapitre 5 : Flot maximal dans un graphe

Initiation à la Programmation en Logique avec SISCtus Prolog

Organigramme / Algorigramme Dossier élève 1 SI

Compression de Données - Algorithme de Huffman Document de Conception

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Solutions du chapitre 4

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

chapitre 4 Nombres de Catalan

EXCEL TUTORIEL 2012/2013

I. Introduction aux fonctions : les fonctions standards

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Premiers Pas en Programmation Objet : les Classes et les Objets

Algorithmes de recherche

Chapitre 6. Fonction réelle d une variable réelle

Initiation à l algorithmique

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

Chapitre VI- La validation de la composition.

Introduction à MATLAB R

Chapitre 7. Récurrences

Chapitre 1 I:\ Soyez courageux!

Classes et Objets en Ocaml.

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Chp. 4. Minimisation d une fonction d une variable

OCL - Object Constraint Language

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Cours de Systèmes d Exploitation

V- Manipulations de nombres en binaire

Représentation d un entier en base b

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

Cours de Génie Logiciel

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

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

Cours 7 : Utilisation de modules sous python

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

UML et les Bases de Données

Perl Orienté Objet BioPerl There is more than one way to do it

1 Recherche en table par balayage

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Etape 1 : Identification avec un compte personnel sur la plateforme (cf. notice «Création et gestion de votre compte utilisateur»)

Présentation du PL/SQL

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Dossier de suivi de stage d observation en entreprise en classe de 3 ème

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Travaux Dirigés n 1 : chaînes de caractères

Note de cours. Introduction à Excel 2007

Algorithmique et Programmation, IMA

LES TYPES DE DONNÉES DU LANGAGE PASCAL

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

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

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

Cours 1 : Qu est-ce que la programmation?

Intelligence Artificielle Planification

Transcription:

ARBRES Arbres binaires Représentation des arbres Fonctions primitives sur les arbres Parcours d arbres Arbres ordonnés

À QUOI SERVENT LES ARBRES? Les arbres, comme les listes, permettent de représenter un nombre variable de données Le principal avantage des arbres par rapport aux listes est qu ils permettent de ranger les données de telle sorte que les recherches soient plus efficaces 2

DÉFINITION Un arbre est soit un nœud, soit un arbre vide Un nœud a des fils qui sont eux aussi des arbres Si tous les fils d un nœud sont vides, alors le nœud est qualifié de feuille Les nœuds portent des valeurs, ce sont les données que l on veut stocker Si tous les nœuds de l arbre ont n fils, alors l arbre est dit n-aire 3

EXEMPLE D ARBRE Racine 4 9 1 8 Feuilles 4

ARBRES BINAIRES Un arbre binaire est : soit l arbre vide soit un nœud qui a exactement deux fils (éventuellement vides) Pour manipuler les arbres binaires, on a besoin de primitives d accès de test de construction 5

PRIMITIVES SUR LES ARBRES BINAIRES (1) Primitives d accès valeur : retourne la valeur d un arbre non vide fils-g : retourne le fils de gauche d un arbre non vide fils-d : retourne le fils de droite d un arbre non vide Primitives de test arbre? : retourne vrai si un élément donné est un arbre vide? : retourne vrai si un arbre donné est vide feuille? : retourne vrai si un arbre donné est une feuille arbre=? : retourne vrai si deux arbres donnés sont égaux

PRIMITIVES SUR LES ARBRES BINAIRES (2) Primitives de construction vide : crée et retourne un arbre vide cons-binaire : crée et retourne un arbre avec une valeur donnée et deux arbres donnés qui seront ses deux uniques fils 7

EXEMPLES D UTILISATION DES PRIMITIVES Soit l arbre a : 4 9 1 8 (valeur a) (valeur (fils-g a)) 4 (valeur (fils-d (fils-g a))) 8 (arbre? a) #t (vide? a) #f (vide? (fils-d a)) #f (vide? (fils-g (fils-d a))) #t (feuille? (fils-d a)) #t (feuille? (fils-g a)) #f 8

REPRÉSENTATION DES ARBRES BINAIRES Nous choisissons d utiliser les listes pour représenter les arbres Un arbre vide sera représenté par la liste vide () Un nœud sera une liste de 3 éléments le car est sa valeur le cadr son fils gauche le caddr son fils droit 9

EXEMPLE DE REPRÉSENTATION D UN ARBRE BINAIRE (define a '( (4 (1 () ()) (8 () ())) (9 () ()))) valeur fils-g fils-d 4 9 1 8 10

DÉFINITIONS DES PRIMITIVES (1) valeur : retourne la valeur d un arbre non vide (define valeur ; atome (lambda (arbre) ; arbre non vide (car arbre))) fils-g : retourne le fils de gauche d un arbre non vide (define fils-g ; arbre (lambda (arbre) ; arbre non vide (cadr arbre))) 11

DÉFINITIONS DES PRIMITIVES (2) fils-d : retourne le fils de droite d un arbre non vide (define fils-d ; arbre (lambda (arbre) ; arbre non vide (caddr arbre))) vide? : retourne vrai si un arbre donné est vide (define vide? ; booléen (lambda (arbre) ; arbre (null? arbre))) 12

DÉFINITIONS DES PRIMITIVES (3) arbre? : retourne vrai si une liste donnée est un arbre (define arbre? ; booléen (lambda (l) ; liste (or (null? l) ; l'arbre vide (and (= 3 (length l)) (not (list? (car l))) (list? (cadr l)) (arbre? (cadr l)) (list? (caddr l)) (arbre? (caddr l)))))) 13

DÉFINITIONS DES PRIMITIVES (4) feuille? : retourne vrai si l arbre donné est une feuille (define feuille? ; booléen (lambda (arbre) ; arbre (and (not (vide? arbre)) (vide? (fils-g arbre)) (vide? (fils-d arbre))))) arbre=? : retourne vrai si deux arbres donnés sont égaux (define arbre=? ; booléen (lambda (arbre1 arbre2) ; arbres (equal? arbre1 arbre2))) 14

DÉFINITIONS DES PRIMITIVES (5) vide : retourne un arbre vide (define vide ; arbre (lambda () () )) cons-binaire : crée un arbre avec une valeur donnée et deux arbres donnés qui seront ses deux uniques fils (define cons-binaire ; arbre (lambda (val fg fd) ; val atome, fg et fd arbres (list val fg fd))) 15

EXEMPLES a 4 9 (define a '( (4 (1 () ()) (8 () ())) (9 () ()))) 1 8 (define b (fils-g a)) b 4 b (4 (1 () ()) (8 () ())) 1 8 (cons-binaire 2 b (fils-d a)) (2 (4 (1 () ()) (8 () ())) (9 () ())) 2 4 9 1 8 1

POURQUOI UTILISER DES PRIMITIVES? Pourquoi utiliser (vide) au lieu de () et fils-g au lieu de cadr? Si on décide de changer la représentation des arbres : sans primitives, il faut réécrire toutes les fonctions sur les arbres avec primitives, il suffit de modifier les primitives 17

PARCOURS D ARBRES Un arbre contient un ensemble de données Pour utiliser ces données, il faut parcourir l arbre en profondeur ou en largeur 18

PARCOURS EN LARGEUR / PROFONDEUR 4 9 4 9 1 8 Parcours en largeur 1 8 Parcours en profondeur 19

PARCOURS EN PROFONDEUR : PRINCIPE Parcourir un arbre en profondeur consiste à passer ses nœuds en revue, en commençant toujours par le même fils, et en descendant le plus profondément possible dans l arbre Lorsque l on arrive sur un arbre vide, on remonte jusqu au nœud supérieur et on redescend dans le fils encore inexploré 20

3 PARCOURS EN PROFONDEUR 4 9 1 8 Parcours infixe : Fils-g Valeur Fils-d 1 4 8 9 Parcours préfixe : Valeur Fils-g Fils-d 4 1 8 9 Parcours postfixe : Fils-g Fils-d Valeur 1 8 4 9 21

POUR ÉCRIRE UNE FONCTION QUI EFFECTUE UN PARCOURS EN PROFONDEUR Pour écrire une fonction f, sur un arbre A Si A est vide, on retourne une valeur constante, généralement l élément neutre de f Si A n est pas vide : on rappelle f sur les deux fils de A, ce qui retourne deux résultats : Rg et Rd puis on retourne un résultat qui ne dépend que de Rg, Rd et de la valeur de la racine de A 22

EXEMPLE : SOMME DES VALEURS D UN ARBRE (define somme ; nombre (lambda (A) ; A arbre de nombres (if (vide? A) 0 (+ (somme (fils-g A)) (somme (fils-d A)) (valeur A))))) 23

(somme A) (+ (somme (fils-g A) (+ (somme (fils-g A) ) (somme (fils-d A) 4) (somme (fils-d A) (+ (somme (fils-g A) (somme (fils-d A) 9) (+ (somme (fils-g A) (somme (fils-d A) 1) (+ (somme (fils-g A) (somme (fils-d A) 8) 0 0 0 0 0 0 ILLUSTRATION 4 9 1 8 24

FONCTIONNEMENT SUR UN EXEMPLE 28 13 9 4 9 0 0 1 8 1 8 0 0 0 0 25

MODIFICATION DU CAS D ARRÊT (define somme ; nombre (lambda (A) ; A arbre de nombres (if (feuille? A) (valeur A) (+ (somme (fils-g A)) (somme (fils-d A)) (valeur A))))) 2

PREMIER TEST 28 13 9 4 9 1 8 1 8 27

DEUXIÈME TEST 1 4 9 1 Il manque le cas de l arbre vide 28

MORALITÉ Il faut toujours tester les fonctions sur un arbre dont un nœud n a qu un seul fils Il faut toujours prévoir le cas d arrêt correspondant à l arbre vide 29

PARCOURS PARTIELS Il est parfois souhaitable d arrêter le parcours même si tous les nœuds n ont pas été passés en revue Exemple : produit des valeurs d un arbre (define produit ; nombre (lambda (A) ; A arbre de nombres (if (vide? A) 1 (* (produit (fils-g A)) (produit (fils-d A)) (valeur A))))) 30

PREMIER TEST 0 0 9 On fait des calculs inutiles 0 9 1 8 1 1 8 1 1 1 1 1 Il faut s arrêter dès qu on rencontre la valeur 0 31

MODIFICATION DE LA FONCTION (define produit ; nombre (lambda (A) ; A arbre de nombres (cond ((vide? A) 1) ((= 0 (valeur A)) 0) (else (* (produit (fils-g A)) (produit (fils-d A)) (valeur A)))))) 32

DEUXIÈME TEST 0 0 9 0 9 1 1 1 8 33

MODIFICATION ET CRÉATION D ARBRES Exemple : écrire une fonction qui ajoute 1 à tous les nœuds d un arbre qui contient des nombres Il ne s agit pas d une modification (ajouter 1), mais d une création : écrire une fonction qui retourne un arbre identique à celui passé en argument, mais dans lequel on a ajouté 1 à tous les nœuds 34

FONCTION AJOUTE1 (define ajoute1 ; arbre (lambda (A) ; A arbre de nombres (if (vide? A) A (cons-binaire (+ 1 (valeur A)) (ajoute1 (fils-g A)) (ajoute1 (fils-d A)))))) 35

SOMME DES VALEURS DES FILS 28 4 9 13 9 1 8 1 8 3

PREMIÈRE SOLUTION : UTILISER LA FONCTION SOMME (define somme-fils ; arbre (lambda (a) ; a arbre de nombres (if (vide? a) (vide) (cons-binaire (somme a) (somme-fils (fils-g a)) (somme-fils (fils-d a)))))) 37

RÉFLEXION SUR CETTE FONCTION La complexité de cette fonction est beaucoup trop grande Il faut utiliser la valeur de la racine du résultat de l appel récursif sur les fils : ils contiennent déjà la somme des valeurs de tous les nœuds de chacun des fils 38

MODIFICATION DE LA FONCTION (define somme-fils ; arbre (lambda (A) ; A arbre de nombres (if (vide? A) (vide) (let ((g (somme-fils (fils-g A))) (d (somme-fils (fils-d A)))) (cons-binaire (+ (valeur A) (valeur g) (valeur d)) g d))))) 39

TEST DE LA FONCTION 4 9 4 9 1 8 1 40

CORRECTION DE LA FONCTION (define somme-fils ; arbre (lambda (A) ; A arbre (if (vide? A)) (vide) (let ((g (somme-fils (fils-g A))) (d (somme-fils (fils-d A)))) (cons-binaire (+ (valeur A) (if (vide? g) 0 (valeur g)) (if (vide? d) 0 (valeur d))) g d))))) 41

SOMME DES VALEURS DES PÈRES 4 9 10 15 4+ = 9+ = 1 8 11 18 1+10 = 8+10 = 42

CALCUL EN REMONTANT OU EN DESCENDANT Dans toutes les fonctions précédemment écrites, le résultat dépendait des fils calcul en remontant Ici, le résultat dépend du père calcul en descendant paramètre supplémentaire pour passer le résultat du père au fils 43

FONCTION SOMME-PERE (define somme-pere ; arbre (lambda (A) ; A arbre de nombres (somme-pere2 A 0))) (define somme-pere2 ; arbre (lambda (A n) ; A arbre de nb, n nombre (if (vide? A) (vide) (let ((v (+ (valeur A) n))) (cons-binaire v (somme-pere2 (fils-g A) v) (somme-pere2 (fils-d A) v)))))) 44

(Somme-pere2 A 0) v = 0 + ILLUSTRATION (cons-binaire (somme-pere2 (fils-g A) ) v = + 4 = 10 (cons-binaire 10 (somme-pere2 (fils-g A) 10) v = 10 + 1 = 11 (cons-binaire 11 (somme-pere2 (fils-g A) 11) (somme-pere2 (fils-d A) 11) (somme-pere2 (fils-d A) 10) v = 10 + 18 = 28 (cons-binaire 28 (somme-pere2 (fils-g A) 28) (somme-pere2 (fils-d A) 28) (somme-pere2 (fils-d A) ) 1 8 4 9 (vide) (vide) (vide) (vide) 45

ARBRES BINAIRES DE RECHERCHE (OU ORDONNÉS) Les valeurs des nœuds doivent pouvoir être ordonnées En chaque nœud de l arbre, la valeur du nœud est : supérieure à toutes celles de son fils gauche inférieure à toutes celles de son fils droit 7 < 7 > 7 On suppose qu il n y a pas deux fois la même valeur dans un ABR 4

EXEMPLES 4 9 4 9 1 5 Arbre ordonné 1 8 Arbre non ordonné 47

RECHERCHE D UN ÉLÉMENT DANS UN ARBRE BINAIRE QUELCONQUE (1) On souhaite écrire une fonction qui teste l appartenance d une valeur V à un arbre A Principe : tant qu on n a pas trouvé la valeur V, il faut comparer V avec toutes les valeurs de l arbre A 48

RECHERCHE D UN ÉLÉMENT DANS UN ARBRE BINAIRE QUELCONQUE (2) Algorithme : Cas d arrêt : Si A est vide Alors Retourne Faux Si valeur(a)=v Alors Retourne Vrai Appels récursifs : Chercher V dans fils-gauche(a) Puis si on n a toujours pas trouvé V, chercher V dans fils-droit(a) 49

EXEMPLE 4 9 1 8 Recherche fructueuse : Chercher 5 Cas le pire Recherche infructueuse : Chercher 7 3 5 Complexité au pire : nombre de nœuds de l arbre 50

RECHERCHE D UN ÉLÉMENT DANS UN ARBRE BINAIRE ORDONNÉ (1) Principe : utiliser le fait que l arbre est ordonné pour choisir dans quelle branche de l arbre chercher 51

RECHERCHE D UN ÉLÉMENT DANS UN ARBRE BINAIRE ORDONNÉ (2) Algorithme : Cas d arrêt : Si A est vide Alors Retourne Faux Si valeur(a)=v Alors Retourne Vrai Appels récursifs : Si V>valeur(A) Alors chercher V dans fils-droit(a) Si V<valeur(A) Alors chercher V dans fils-gauche(a) 52

EXEMPLE 2 9 1 4 3 5 Recherche fructueuse : Chercher 5 Recherche infructueuse : Chercher 7 Complexité au pire : hauteur de l arbre 53

INSERTION DANS UN ABR Principe : on insère aux feuilles 7 4 9 4 9 1 5 1 5 7 54

SUPPRESSION DANS UN ABR 4 9 4 9 1 5 1 55

SUPPRESSION DANS UN ABR 4 9 3 9 2 5 2 5 1 3 1 5

SUPPRESSION DANS UN ABR 4 9 3 9 2 5 2 5 1 3 2,5 1 2,5 2,2 2,8 2,2 2,8 57

SUPPRESSION DANS UN ABR Pour supprimer la valeur V dans un ABR Si V est une feuille, alors on supprime la feuille Sinon on remplace la valeur V par la valeur V qui lui est immédiatement inférieure (ou immédiatement supérieure), de manière à respecter l ordre, puis on supprime V qui est le plus grand élément du fils gauche de V (resp. le plus petit élément de son fils droit) V est une feuille ou un élément qui n a pas de fils droit (resp. pas de fils gauche), et peut donc être supprimée facilement 58