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.
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
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
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 )
}
}
}
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.
Non, ils ne sont pas les mêmes.
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.
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.