web-dev-qa-db-fra.com

Différence entre arbre de recherche binaire et arbre de recherche binaire?

Quelle est la différence entre la recherche binaire et l'arbre de recherche binaire?

Sont-ils les mêmes? Lire Internet Il semble que la seconde est uniquement pour les arbres (jusqu'à 2 nœuds pour enfants) et la recherche binaire ne suit pas cette règle. Je n'ai pas vraiment compris.

26
RollRoll

Arbres de recherche binaire

Un nœud d'un arbre binaire est une structure de données qui présente un élément et une référence à deux autres arbres binaires, typiquement appelé les sous-arbres gauche et droit. I.E., un nœud présente une interface comme celle-ci:

Node:
  element  (an element of some type)
  left     (a binary tree, or NULL)
  right    (a binary tree, or NULL)

Un arbre binaire recherche est un arbre binaire (c'est-à-dire un nœud, typiquement appelé la racine) avec la propriété que les sous-arbres gauche et droit sont également des arbres de recherche binaires et que tous les éléments de tous les nœuds Dans le sous-arbre à gauche, sont inférieurs à l'élément de la racine, et tous les éléments de tous les nœuds du sous-arbre droit sont supérieurs à l'élément de la racine. Par exemple.,

     5
    / \
   /   \
  2     8
 / \   / \
1   3 6   9

Recherche binaire

La recherche binaire est un algorithme de recherche d'un élément dans l'arbre de recherche binaire. (Il est souvent exprimé comme un moyen de rechercher une collection ordonnée, et c'est une description équivalente. Je vais décrire l'équivalence après.) C'est ceci:

search( element, tree ) {
  if ( tree == NULL ) {
    return NOT_FOUND
  }
  else if ( element == tree.element ) {
    return FOUND_IT
  }
  else if ( element < tree.element ) {
    return search( element, tree.left )
  }
  else {
    return search( element, tree.right )
  }
}

Ceci est typiquement une méthode de recherche efficace car à chaque étape, vous pouvez supprimer la moitié de l'espace de recherche. Bien sûr, si vous avez un arbre de recherche binaire mal équilibré, il peut être inefficace (il peut se dégrader à la recherche linéaire). Par exemple, il a une mauvaise performance dans un arbre comme:

3
 \
  4
   \
    5
     \
      6

Recherche binaire sur les tableaux

La recherche binaire est souvent présentée sous forme de méthode de recherche pour les tableaux de tri. Cela ne contredit pas la description ci-dessus. En fait, il met en évidence le fait que nous ne nous soucions pas de la mise en œuvre d'un arbre de recherche binaire; Nous vetions juste que nous pouvons faire un objet et faire trois choses avec elle: obtenez un élément, obtenez un sous-objet gauche et obtenez un sous-objet droit (sujet, bien sûr, aux contraintes sur les éléments de gauche étant moins que l'élément, et les éléments du droit étant plus grand, etc.).

Nous pouvons faire les trois choses avec une matrice triée. Avec une matrice triée, l'élément "ELEMENT" est l'élément central de la matrice, le sous-objet gauche est le sous-carré à gauche de celui-ci et le sous-objet droit est la banquille à droite de celui-ci. E.G., le tableau

[1 3 4 5 7 8 11]

correspond à l'arbre:

     5
    / \
   /   \
  3     8
 / \   / \
1  4  7   11

Ainsi, nous pouvons écrire une méthode de recherche binaire pour les tableaux comme celui-ci:

search( element, array, begin, end ) {
  if ( end <= begin ) {
    return NOT_FOUND
  }
  else { 
    midpoint = begin+(end-begin)/2
    a_element = array[midpoint]
    if ( element == midpoint ) {
      return FOUND_IT
    }
    else if ( element < midpoint ) {
      return search( element, array, begin, midpoint )
    }
    else {
      return search( element, array, midpoint, end )
    }
  }
}

Conclusion

Comme souvent présenté, la recherche binaire fait référence à l'algorithme de tableau présenté ici et l'arborescence de recherche binaire fait référence à une structure de données à base d'arbres avec certaines propriétés. Cependant, les propriétés que la recherche binaire nécessite et les propriétés que les arbres de recherche binaires ont des deux côtés de la même pièce de monnaie. Être un arbre de recherche binaire implique souvent une mise en œuvre particulière, mais il s'agit vraiment de fournir certaines opérations et de satisfaire certaines contraintes. La recherche binaire est un algorithme qui fonctionne sur les structures de données ayant ces opérations et répondant à ces contraintes.

34
Joshua Taylor

Non, ils ne sont pas les mêmes.

Arbre de recherche binaire :

  • Structure de données d'arbre
  • Chaque nœud a jusqu'à 2 enfants
  • Le sous-arbre gauche d'un nœud ne contient que des nœuds avec des touches inférieures à la clé du nœud
  • Le bon sous-arbre d'un nœud ne contient que des nœuds avec des clés supérieures à la clé du nœud

Recherche binaire :

  • Un algorithme qui fonctionne sur une structure de données triée (généralement, mais pas nécessairement, un tableau) et, à chaque étape, en regardant la valeur au milieu et recouvre la gauche ou la droite, selon que la valeur cible soit plus petite ou supérieure à la valeur au milieu (ou s'arrête si elle est égale).

Et, bien sûr, une structure de données est:

Une manière particulière de stocker et d'organiser des données sur un ordinateur afin qu'il puisse être utilisé efficacement.

Tandis qu'un algorithme est:

Une procédure étape par étape pour les calculs.

The recherche Processus dans une arborescence de recherche binaire (où nous recherchons une valeur spécifique dans l'arborescence) peut être considérée comme similaire à (ou une instance de, en fonction de vos définitions et de la question de savoir si En utilisant une recherche bST équilibrée) BST), car cela examine également l'élément "moyen" et recouvre à gauche ou à droite, en fonction du résultat de la comparaison entre cette valeur et la valeur cible.

11
Dukeling

Pour ceux qui sont venus ici pour vérifier rapidement lequel à utiliser. En plus des réponses, postées ci-dessus, j'aimerais ajouter des complexités par rapport aux opérations de ces deux techniques.

Arbre de recherche binaire :

recherche: θ (journal (n)), pire des cas (O (n)) pour BST,

Insérer du nœud: θ (journal (n)), le pire des cas (O (n)) pour déséquilibré BST

Suppression du nœud: θ (journal (n)), le pire des cas (O (n)) pour BST déséquilibré

Arbre de recherche binaire équilibré :

recherche: journal (n),

Insérer du nœud: O (journal (n))

Suppression du nœud: O (journal (n))

Recherche binaire sur la matrice triée :

recherche: O (log (n)) mais,

Insertion du nœud: non possible si la matrice est allouée statiquement et déjà pleine. Sinon O (n) (O (n) pour déplacer des éléments de matrice plus importants à leur droit adjacent)

Suppression du nœud: O (log (n)) + O (n). (Donc, ce serait O(log(n)) Pour trouver la position de la suppression + O (N) pour déplacer des éléments de matrice plus importants à leur gauche adjacente)

Ainsi, en fonction de vos besoins, vous pouvez choisir si vous avez besoin d'inserts rapides et de suppression. Si vous n'en avez pas besoin, les choses dans la matrice de tri fonctionneront pour vous, car une matrice prendra moins de mémoire par rapport à l'arborescence.

3
Alok Nayak