Por lo general, pienso en esto de la siguiente manera: un árbol de búsqueda binario es para almacenar una colección ordenada , mientras que una tabla hash es para almacenar una colección no ordenada .
Una colección desordenada no mantiene información sobre el orden relativo de sus elementos (de hecho, sus elementos no están obligados a definir una noción de orden) y solo admite la búsqueda de elementos (por coincidencia exacta), inserción y eliminación. Si esto es todo lo que necesita, generalmente debe ir con una tabla hash.
Una colección ordenada mantiene información sobre el orden relativo de los elementos que contiene. Esto requiere más contabilidad, pero permite, además de todas las operaciones de conjuntos no ordenados, operaciones como “encontrar el valor más cercano a X” y “enumerar los elementos de esta colección en orden ordenado” (sin tener que ordenar desde cero, ya que el conjunto ordenado ya está ordenado). Use un árbol si necesita estas operaciones.
- Cómo ordenar datos multivariados
- ¿Cómo definirías la ordenación rápida en pocas palabras?
- ¿Hay un problema DP estándar similar a SPOJ Farida?
- ¿Cuál es la complejidad temporal de la solución del problema del vendedor ambulante mediante la optimización de colonias de hormigas?
- Cómo agregar un elemento a una matriz en Java
Los árboles suelen ser algo más eficientes en cuanto al espacio, por lo que si la falta de memoria es una preocupación, también puede usar árboles para conjuntos desordenados. Sin embargo, este uso es algo raro. La mayoría de las veces, si no puede permitirse tener la tabla hash en la memoria, tampoco puede permitirse el árbol.
Otra razón por la que podría usar un árbol equilibrado para un conjunto desordenado es si está trabajando en algún tipo de aplicación en tiempo real. Una tabla hash utilizará el tiempo O (n) para una sola operación cuando se debe realizar un cambio de tamaño de la tabla. Aunque esto sucede con poca frecuencia, este tipo de operación lenta podría ser un problema para una aplicación en tiempo real que necesita tener una capacidad de respuesta inferior a milisegundos.
Las tablas hash no encajan muy bien en el marco de los lenguajes funcionales sin estado mutable, por lo que esos idiomas a menudo también usan árboles equilibrados para conjuntos no ordenados.