Los ejemplos concretos del uso de árboles binarios de búsqueda?

votos
14

Entiendo cómo se implementan binaria árboles de búsqueda, pero no estoy seguro de lo que son las ventajas de su uso sobre las tablas hash que la mayoría de los lenguajes de programación han incorporado en sus bibliotecas estándar.

Podría alguien proporcionar ejemplos de problemas del mundo real que tienen solución con árboles binarios de búsqueda?

Publicado el 16/02/2011 a las 00:44
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
1

Un ejemplo de donde se requiere un árbol binario es particiones espaciales binarios en gráficos por ordenador

http://en.wikipedia.org/wiki/Binary_space_partitioning

Se necesita un árbol binario porque el algoritmo requiere la preservación de las relaciones entre los nodos en el árbol binario. Hay muchos otros algoritmos donde la estructura del árbol es importante, y por lo tanto una tabla hash no es una estructura apropiada.

Otra buena razón para utilizar un árbol binario en lugar de una tabla hash es cuando no se puede generar fácilmente un hash eficiente para sus elementos de datos, pero se puede generar una función de comparación.

A menudo, para el almacenamiento y recuperación de datos sencilla una tabla hash es más óptimo, pero más difícil de implementar.

Respondida el 16/02/2011 a las 00:53
fuente por usuario

votos
0

Uno de los más pasado por alto es que muchos sistemas de archivos utilizan árboles binarios para gestionar las listas de directorios. Rara vez utilizan un árbol binario simple, pero alguna variación, como un árbol B. Esto se debe a que la cuestión del almacenamiento en disco del árbol es muy importante para los detalles de la implementación. La razón por la que utilizan este tipo de estructura es la eficiencia y velocidad. Esto les permite hacer cosas como apoyo a miles de archivos en un directorio. Las comparaciones de creación del archivo y tiempos de eliminación de relieve la eficacia de este aspecto del sistema de archivos.

árboles binarios también se utilizan en muchos juegos que hacen que los objetos 3D. Una vez más, la razón es la velocidad. De hecho, la velocidad es tan importante que algunos motores de juego, como el motor de Quake en realidad tienen el árbol binario generado previamente y pre-optimizado como parte del proceso de la hoja de construcción.

Respondida el 16/02/2011 a las 00:56
fuente por usuario

votos
0

Una cosa a tener en cuenta es que la búsqueda binaria árbol son eficiente del espacio. Por ejemplo, usted tiene 10 enteros para almacenar y tiene una función hash que se correlaciona desde 0 - 99, entonces u necesita un conjunto de 100 enteros. Si utilizó árbol de búsqueda binaria, entonces sería asignar sólo la cantidad de memoria como es requerido por 10 elementos

Respondida el 16/02/2011 a las 00:57
fuente por usuario

votos
29

Hay algunas ventajas teóricas de árboles binarios de búsqueda más tablas hash:

  1. Almacenan sus elementos en forma ordenada . Esto significa que si desea almacenar el contenedor de una forma donde se puede llegar fácilmente a los valores en orden clasificado, un BST es probablemente una mejor opción que una tabla hash. Por ejemplo, si desea almacenar una colección de los estudiantes y luego imprimir todos los estudiantes en orden alfabético, una BST es una sustancialmente mejor opción que una tabla hash.

  2. Apoyan eficiente consultas de rango. Debido BSTs se almacenan en forma ordenada, es fácil responder a preguntas del tipo "¿qué valores están en el rango [x, y]?" en un árbol de búsqueda binaria. Para hacer esto, usted hace una búsqueda en el árbol para el elemento más pequeño mayor que x y el mayor elemento de menor que y, a continuación, iterar sobre los elementos del árbol entre ellos. Ambos de estos ejecutar consultas en tiempo O (lg n) en un árbol equilibrado, por lo que el tiempo de ejecución total para esta operación es O (lg n + k), donde k es el número de elementos que coinciden con la consulta.

  3. Ellos apoyan de manera eficiente las consultas del vecino más cercano. Las tablas hash están diseñados específicamente para que aunque sea ligeramente diferente producen muy diferentes códigos hash. Esto le da a los valores hash de la dispersión que necesitan para evitar la agrupación de demasiados elementos en un solo lugar. Sin embargo, esto también significa que usted tiene que hacer una exploración lineal en la tabla hash para encontrar elementos que podrían ser "cerca" de lo que estás buscando. Con un BST, se puede encontrar de manera eficiente el predecesor y sucesor de cualquier valor desea, incluso si no está en el árbol.

  4. Pueden tener mejores garantías peor de los casos. La mayoría de las implementaciones de la tabla de hash tienen algún tipo de caso degenerado en el que una operación puede degradar a O (n) en el peor de los casos. Una tabla hash de sondeo lineal o una tabla hash encadenada pueden, con un mal conjunto de elementos, requieren tiempo O (n) por las operaciones de búsqueda o requerir tiempo O (n) en una repetición. La inserción en algunos tipos de BSTs equilibradas, como árboles rojo / negro, árboles AVL, o árboles de AA, es siempre el peor caso O (lg n).

Si usted está dispuesto a generalizar BSTs a las estructuras de árbol más elaborados, entonces hay muchas aplicaciones en las que un árbol se puede utilizar para resolver problemas mucho más eficiente que en una tabla hash. He aquí algunos ejemplos:

  1. KD-árboles le permiten almacenar datos multidimensionales, mientras que el apoyo a las consultas de rangos rápidos en el espacio multidimensional, así como eficientes las búsquedas de vecino más cercano. Usted las puede utilizar para la clasificación (algoritmos de aprendizaje perezoso) o la geometría computacional.

  2. Árboles enlace / corte se pueden utilizar para resolver problemas de flujo máximo mucho más eficiente que la mayoría de los algoritmos convencionales permitirían. Buen empuje / reetiquetar algoritmos usan esto para acelerar sus implementaciones.

  3. Bosques-disjuntos establecido se pueden utilizar para mantener las particiones de los elementos como asintóticamente eficiente posible (α amortizado (n) por actualización, donde α (n) es la función inversa Ackermann). Se utilizan en muchos algoritmos de árboles de expansión mínima de rápido, así como algunos algoritmos de máxima coincidentes.

  4. Montones binarias se pueden utilizar para implementar colas de prioridad de manera eficiente. Árboles más complejos pueden ser utilizados para construir montones binomiales y montones de Fibonacci , que son de gran importancia en la informática teórica.

  5. Los árboles de decisión pueden ser utilizados en el aprendizaje automático para la clasificación, y como modelo en la ciencia de la computación teórica para probar los límites en los tiempos de ejecución de varios algoritmos.

  6. Ternarios árboles de búsqueda son una alternativa a los intentos que se basa en BST tan ligeramente modificada. Permiten operaciones de búsqueda muy rápido y la inserción de elementos y conjuntos de datos son bastante escasos concisa.

  7. Los árboles B son utilizados por muchos sistemas de bases de datos para buscar de manera eficiente a los elementos, donde el acceso al disco es un factor limitante.

  8. Árboles binarios espacio de partición son una generalización de KD-árboles que puede ser utilizado para hacer rápidamente gráficos por ordenador (que se utilizan para optimizar la prestación en el juego original de Doom) y hacer colisión detección.

  9. BK-árboles le permiten determinar rápidamente todas las palabras que se encuentran dentro de una cierta distancia de edición de alguna otra palabra, y más en general para encontrar todos los puntos en un espacio métrico dentro de una cierta distancia de otro punto.

  10. Árboles de fusión son una alternativa a las tablas de hash de claves enteras que tienen el apoyo extremadamente rápido para las búsquedas, inserciones y supresiones.

  11. van Emde Boas árboles otra alternativa a hash de tablas para las teclas de número entero que apoyan las operaciones de búsqueda, inserción, deleción, sucesor y predecesor en O (lg lg n) tiempo por elemento. Algunos sistemas de bases de datos utilizan árboles VEB para optimizar el rendimiento.

No estoy seguro de cómo en el tema de esta respuesta es, pero hay que darle un sentido de cómo las estructuras maravillosas y BSTS potentes y más generales de los árboles pueden ser.

Respondida el 16/02/2011 a las 01:05
fuente por usuario

votos
0

Esto probablemente debería ser un comentario, pero auto-equilibrio BST (s) (log (n)) se utilizan ampliamente en lugar de BSTs. BSTs Plain tienen peor caso O (N) Tiempo de inserción / extracción.

Respondida el 16/02/2011 a las 03:14
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more