Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 64

Arbres Binaires de Recherche : Principes et Recherche Efficace

Recommended resources

Bonjour !

Dans notre dernière leçon, nous avons analysé le compromis fondamental entre les tableaux et les listes chaînées. Vous avez appris que le choix de la structure de données idéale dépend entièrement des opérations que l'on doit effectuer le plus souvent :

  • Tableau : excellent pour un accès rapide aux éléments par leur indice, mais lent pour les insertions et suppressions.
  • Liste Chaînée : très flexible pour les insertions et suppressions, mais lente pour accéder à un élément par sa position.

Cette situation soulève une question naturelle : n'existe-t-il pas une structure qui offrirait un bon compromis, c'est-à-dire à la fois des recherches rapides et des modifications (ajouts/suppressions) efficaces ?

La réponse est oui, et c'est l'objet de notre leçon aujourd'hui. Nous allons découvrir une nouvelle structure de données non-linéaire, l'arbre binaire de recherche (ABR). À la fin de cette leçon, vous serez capable de définir ce qu'est un ABR et, surtout, d'expliquer pourquoi il permet de retrouver des informations de manière extrêmement efficace.

1. Qu'est-ce qu'un Arbre Binaire de Recherche ?

Pour bien comprendre cette structure, le plus simple est de décomposer son nom : "Arbre", "Binaire", et "de Recherche". Nous allons nous appuyer sur une ressource très complète pour en explorer la définition.

Les arbres binaires de recherche

Pour commencer, nous allons lire une introduction détaillée qui décompose le concept d'Arbre Binaire de Recherche. Cet article de Zeste de Savoir est très clair et pose toutes les bases nécessaires.

Lisez la section intitulée 'Définitions'. Elle est divisée en trois parties : 'Arbre', 'Binaire', et 'De recherche'. Concentrez-vous sur le vocabulaire (nœud, racine, feuille) et surtout sur la règle fondamentale qui définit un ABR.

Synthèse des concepts clés

Comme vous l'avez lu, un ABR est un ensemble de nœuds reliés entre eux, mais pas n'importe comment. Il obéit à une règle très stricte qui est la clé de toute sa puissance.

La Règle d'Or de l'ABR :
Pour n'importe quel nœud de l'arbre :

  1. Toutes les valeurs contenues dans son sous-arbre gauche doivent être inférieures à la valeur du nœud lui-même.
  2. Toutes les valeurs contenues dans son sous-arbre droit doivent être supérieures à la valeur du nœud lui-même.

Cette règle s'applique à chaque nœud de l'arbre, sans exception.

Exemple d'Arbre Binaire de Recherche
Cet arbre illustre parfaitement la règle de l'ABR. Prenez le nœud racine '8' : tous les éléments à gauche (3, 1, 6, 4, 7) sont plus petits que 8, et tous les éléments à droite (10, 14, 13) sont plus grands. Cette propriété est vraie pour chaque nœud, par exemple le nœud '3' ou le nœud '10'.

Mise en pratique : Construire un ABR

La meilleure façon de s'approprier cette règle est de construire soi-même un arbre. L'article que nous étudions propose un excellent exercice pratique.

Les arbres binaires de recherche

Maintenant, mettons les mains à l'œuvre. Suivre la construction d'un arbre pas à pas vous aidera à visualiser et à mémoriser le processus.

Lisez la section 'Exemple'. Suivez attentivement la construction de l'arbre du vétérinaire. Ensuite, prenez une feuille de papier et essayez de faire vous-même l'exercice proposé (insérer 'Flipper', 'Bubulle' et 'Augustin' dans cet ordre) avant de regarder la solution. Cet exercice est très important pour valider votre compréhension.

En faisant cet exercice, vous avez dû remarquer un point essentiel : la structure finale de l'arbre dépend totalement de l'ordre d'insertion des éléments. Nous verrons un peu plus tard pourquoi c'est si important.


2. Comment un ABR permet-il une recherche efficace ?

La structure ordonnée de l'ABR n'est pas juste une curiosité intellectuelle ; elle est conçue pour une chose : la recherche rapide. L'algorithme de recherche est remarquablement simple et intuitif. Il ressemble beaucoup à la recherche dichotomique que vous avez déjà étudiée.

Imaginons que nous cherchons une valeur V dans l'arbre :

  1. On commence à la racine.
  2. On compare V à la valeur du nœud actuel :
    • Si V est égale à la valeur du nœud, on a trouvé !
    • Si V est inférieure à la valeur du nœud, on sait qu'elle ne peut se trouver que dans le sous-arbre gauche. On ignore complètement la partie droite et on continue la recherche à partir du fils gauche.
    • Si V est supérieure à la valeur du nœud, on sait qu'elle ne peut se trouver que dans le sous-arbre droit. On ignore la partie gauche et on continue la recherche à partir du fils droit.
  3. On répète l'étape 2 jusqu'à ce qu'on trouve la valeur ou qu'on arrive à un "cul-de-sac" (un emplacement où il devrait y avoir un fils, mais il n'y en a pas). Si on arrive à un cul-de-sac, cela signifie que la valeur n'est pas dans l'arbre.
Recherche de la valeur 27 dans un arbre binaire de recherche
Cette image montre le chemin pour trouver la valeur 27. On part de la racine (34). 27 < 34 -> on va à gauche. 27 > 22 -> on va à droite. 27 < 29 -> on va à gauche. 27 > 25 -> on va à droite. 27 < 28 -> on va à gauche. Bingo ! On a trouvé 27. Remarquez à quel point le chemin est direct. À chaque étape, on élimine une grande partie de l'arbre.

L'efficacité en action

Pourquoi est-ce si rapide ? Parce qu'à chaque comparaison, on élimine potentiellement la moitié des nœuds restants. Si l'arbre est bien "touffu", on ne parcourt qu'un seul chemin de la racine à la feuille. Le nombre d'étapes est donc lié à la hauteur de l'arbre, pas au nombre total de nœuds.

Pour un arbre équilibré de n nœuds, la hauteur est d'environ . La recherche a donc une complexité temporelle de . C'est beaucoup plus rapide que la recherche dans une liste chaînée () et aussi efficace que la recherche dichotomique dans un tableau trié !

Pour voir une formalisation de cet algorithme, vous pouvez consulter le pseudo-code dans la ressource que nous avons utilisée.

Les arbres binaires de recherche

L'article que nous étudions formalise l'algorithme de recherche sous forme de pseudo-code. C'est une bonne façon de relier notre compréhension intuitive à une description plus rigoureuse.

Examinez le pseudo-code de la Fonction bst_search. Ignorez le code en langage C qui suit. Concentrez-vous sur la logique du pseudo-code et vérifiez qu'elle correspond bien aux étapes que nous venons de décrire : si plus petit, aller à gauche ; si plus grand, aller à droite ; sinon, on a trouvé.


3. Le talon d'Achille de l'ABR : le déséquilibre

Les ABR semblent presque magiques, mais ils ont une faiblesse majeure. Leur efficacité en repose sur l'hypothèse que l'arbre est relativement équilibré (c'est-à-dire qu'il s'étend de manière à peu près égale à gauche et à droite).

Que se passe-t-il si on insère des éléments qui sont déjà triés (par exemple, 1, puis 2, puis 3, puis 4, ...) ? L'arbre ne grandira que d'un seul côté, se transformant en une longue chaîne.

Les arbres binaires de recherche

Cette efficacité a un coût. L'article explique très bien le principal inconvénient des ABR de base.

Lisez la sous-section 'Déséquilibre et dégénérescence en liste'. Observez bien l'image qui montre ce qui se passe quand on insère des données déjà triées. Comprenez pourquoi, dans ce cas de figure, l'arbre perd tout son avantage.

Comme vous l'avez vu, un ABR qui dégénère en liste est le pire des scénarios. La recherche revient à parcourir une liste chaînée, et la complexité redevient . Tout le bénéfice de la structure arborescente est perdu. C'est une contrainte très importante à garder en tête : la performance d'un ABR dépend fortement de l'ordre dans lequel les données y sont insérées.


Conclusion

Aujourd'hui, nous avons ajouté une structure de données très puissante à votre boîte à outils intellectuelle. Vous êtes maintenant capable d'expliquer ce qu'est un arbre binaire de recherche et le mécanisme qui le rend si performant.

Points clés à retenir :

  • Un Arbre Binaire de Recherche (ABR) est une structure de données en arbre où, pour chaque nœud, toutes les valeurs du sous-arbre gauche sont plus petites et toutes celles du sous-arbre droit sont plus grandes.
  • Cette propriété permet un algorithme de recherche très efficace (), car il élimine une grande partie des données à chaque étape, à la manière d'une recherche dichotomique.
  • L'efficacité de l'ABR dépend de son équilibre. Dans le pire des cas (un arbre dégénéré qui ressemble à une liste), la performance de la recherche chute à .

Et après ?

Nous venons d'étudier notre dernière grande structure de données dans ce module. Nous avons vu les tableaux, les listes chaînées et maintenant les arbres binaires de recherche. Dans la prochaine leçon, nous allons changer de perspective. Plutôt que d'étudier de nouvelles structures, nous allons nous concentrer sur une stratégie algorithmique fondamentale et extrêmement puissante : le principe de "Diviser pour Régner". C'est cette stratégie qui est à la base de certains des algorithmes de tri et de recherche les plus rapides qui existent.