Arbre de recherche - Search tree

En informatique , un arbre de recherche est une structure de données arborescente utilisée pour localiser des clés spécifiques à partir d'un ensemble. Pour qu'un arbre fonctionne comme un arbre de recherche, la clé de chaque nœud doit être supérieure à toutes les clés des sous-arbres à gauche et inférieure à toutes les clés des sous-arbres à droite.

L'avantage des arbres de recherche est leur temps de recherche efficace étant donné que l'arbre est raisonnablement équilibré, c'est-à-dire que les feuilles à chaque extrémité sont de profondeurs comparables. Diverses structures de données d'arbre de recherche existent, dont plusieurs permettent également une insertion et une suppression efficaces d'éléments, dont les opérations doivent alors maintenir l'équilibre de l'arbre.

Les arbres de recherche sont souvent utilisés pour implémenter un tableau associatif . L'algorithme de l'arborescence de recherche utilise la clé de la paire clé-valeur pour trouver un emplacement, puis l'application stocke l'intégralité de la paire clé-valeur à cet emplacement particulier.

Types d'arbres

Arbre de recherche binaire
Arbre de recherche binaire

Arbre de recherche binaire

Un arbre de recherche binaire est une structure de données basée sur des nœuds où chaque nœud contient une clé et deux sous-arbres, le gauche et le droit. Pour tous les nœuds, la clé du sous-arbre gauche doit être inférieure à la clé du nœud et la clé du sous-arbre droit doit être supérieure à la clé du nœud. Ces sous-arbres doivent tous être qualifiés d'arbres de recherche binaires.

La complexité temporelle dans le pire des cas pour rechercher un arbre de recherche binaire est la hauteur de l'arbre , qui peut être aussi petite que O(log n) pour un arbre avec n éléments.

B-arbre

Les arbres B sont des généralisations des arbres de recherche binaires en ce sens qu'ils peuvent avoir un nombre variable de sous-arbres à chaque nœud. Bien que les nœuds enfants aient une plage prédéfinie, ils ne seront pas nécessairement remplis de données, ce qui signifie que les arbres B peuvent potentiellement perdre de l'espace. L'avantage est que les arbres B n'ont pas besoin d'être rééquilibrés aussi fréquemment que les autres arbres auto-équilibrés .

En raison de la plage variable de leur longueur de nœud, les arbres B sont optimisés pour les systèmes qui lisent de gros blocs de données, ils sont également couramment utilisés dans les bases de données.

La complexité temporelle pour rechercher un B-tree est O(log n).

(a,b)-arbre

Un arbre (a,b) est un arbre de recherche où toutes ses feuilles ont la même profondeur. Chaque nœud a au moins un enfant et au plus b enfants, tandis que la racine a au moins 2 enfants et au plus b enfants.

a et b peuvent être décidés avec la formule suivante :

La complexité temporelle pour rechercher un arbre (a,b) est de O(log n).

Arbre de recherche ternaire

Un arbre de recherche ternaire est un type d' arbre qui peut avoir 3 nœuds : un enfant bas, un enfant égal et un enfant haut. Chaque nœud stocke un seul caractère et l'arbre lui-même est ordonné de la même manière qu'un arbre de recherche binaire, à l'exception d'un éventuel troisième nœud.

La recherche d'un arbre de recherche ternaire implique la transmission d'une chaîne pour tester si un chemin le contient.

La complexité temporelle pour rechercher un arbre de recherche ternaire équilibré est de O(log n).

Algorithmes de recherche

Recherche d'une clé spécifique

En supposant que l'arbre soit ordonné, nous pouvons prendre une clé et tenter de la localiser dans l'arbre. Les algorithmes suivants sont généralisés pour les arbres de recherche binaires, mais la même idée peut être appliquée aux arbres d'autres formats.

Récursif

search-recursive(key, node)
    if node is NULL
        return EMPTY_TREE
    if key < node.key
        return search-recursive(key, node.left)
    else if key > node.key
        return search-recursive(key, node.right)
    else
        return node

Itératif

searchIterative(key, node)
    currentNode := node
    while currentNode is not NULL
        if currentNode.key = key
            return currentNode
        else if currentNode.key > key
            currentNode := currentNode.left
        else
            currentNode := currentNode.right

Recherche de min et max

Dans un arbre trié, le minimum est situé au nœud le plus à gauche, tandis que le maximum est situé au nœud le plus à droite.

Le minimum

findMinimum(node)
    if node is NULL
        return EMPTY_TREE
    min := node
    while min.left is not NULL
        min := min.left
    return min.key

Maximum

findMaximum(node)
    if node is NULL
        return EMPTY_TREE
    max := node
    while max.right is not NULL
        max := max.right
    return max.key

Voir également

Les références