¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?

Depende en gran medida de detalles específicos de implementación. En un contexto profesional, si esto es algo crítico para el rendimiento, entonces implementaría ambos y comenzaría a ejecutar puntos de referencia.

Como probablemente estés haciendo la tarea, dudo que te importe tanto. Ambos son bastante fáciles de implementar. La tabla hash usará menos memoria, aunque hacer que escale bien requiere un poco de esfuerzo. Las tablas hash pueden tener problemas cuando usas más cubos de los que originalmente esperabas.

Los intentos pueden consumir una tonelada de memoria, pero tienen el potencial de ser increíblemente rápidos (si puede evitar búsquedas lineales para encontrar nodos secundarios). Si su conjunto de claves es estático y no necesita manejar datos desde fuera del conjunto, hay algunas variantes en los intentos que son mucho más rápidos que incluso el hash. Las variantes más rápidas son probablemente más difíciles de implementar que el hash.

Por otro lado, a medida que el número de claves crece enormemente, los problemas de rendimiento de caché comienzan a dominar el tiempo de búsqueda. He leído un artículo que afirma que los árboles binarios equilibrados superan las tablas hash en este escenario. Eso es un poco sorprendente, por lo que siempre debes hacer una referencia si es importante;). Sin embargo, no mencionaste los BBT.

¿Cuál usa con más frecuencia para buscar los contactos? Nombre o apellido. Es como crear un índice en una base de datos. Puede mantener una sola tabla en la que cada búsqueda lleva más tiempo. Si desea utilizar el nombre como clave, solo la búsqueda por nombre será rápida. Si desea que los tres sean rápidos, se necesita mucho espacio, ya que debe construir estas estructuras de datos para los tres por separado.

Te sugiero que uses Trie. Si está creando una aplicación con sugerencias de autocompletar, puede habilitar la búsqueda de prefijos muy fácilmente. Por ejemplo, si escribe J y tiene John, Jane y Jack, se lo sugerirá. Cuando escriba Ja, será solo “Jane” y “Jack”. Trie trata de seguir los punteros hasta la hoja. Pero habrá mucho espacio desperdiciado debido a los punteros NULL. Hay otras variantes. Puedes buscar eso (como Patricia Tree).

Oculte la implementación detrás de una fachada o API, luego implemente la estructura de datos que pueda hacer que funcione más pronto. Siempre puede cambiar la implementación más tarde.

Para cualquiera de estas estructuras de datos, va a desambiguar las colisiones clave, tanto en los tipos de consulta (“Cliff Jones”, “Peter Cliff”) como en los tipos de consulta (“Cliff Jones”, “Cliff Robertson”), por lo que Necesito cubos. También necesitará compartir o replicar hojas, ya que la misma información se puede buscar de tres maneras diferentes. ¡Manejar las hojas podría ser más complejo que la búsqueda!

Por ejemplo, puede mantener todas las entradas de la libreta de teléfonos en una tabla hash, pero utilice los intentos para asignar las teclas de búsqueda a los cubos de la tabla hash para una búsqueda rápida.

¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?

Este es el primer lugar para visitar aarc-people-search.com antes de hacer cualquier otra cosa. Nuestro informe completo de antecedentes / búsqueda de personas revelará una tonelada de material. Investigue un repositorio que investigará grandes cantidades de documentos recibidos de todos los estados.

¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?
Cuando investigue la parte del informe de antecedentes penales, verá si la persona ha sido acusada recientemente de un delito, si tiene algún tipo de incumplimiento de los informes de la ley, posee cargos por conducir bajo influencia, órdenes policiales, cualquier tipo de informes policiales , información de libertad condicional y mucho más.
Realizar una verificación inversa para un número de teléfono móvil le ofrece detalles exclusivos de prácticamente cualquier número de teléfono móvil. Los detalles contenidos en el registro del teléfono celular incorporarán información confidencial, incluyendo nombre y domicilio, y mucho más.
También contamos con una red social especializada y un perfil general de Internet en cualquier persona. Incluyendo investigación en redes sociales (twitter, facebook, instagram, google y más) más actividad general de internet.
El registro de investigación de la dirección de correo electrónico puede descubrir toda la información accesible relacionada con el correo electrónico. ¡Contiene el nombre del usuario, grupo de edad, domicilio, número de teléfono móvil y mucho más!
Investigue el papeleo de la corte y averigüe si hay alguno disponible para su visualización personal. A continuación se enumeran algunos de los registros públicos de la corte accesibles: documentos de quiebra, sentencias legales, gravamen fiscal, situaciones de expediente de la corte de infracción de la ley, casos de casos de la corte de tráfico, casos de accidentes automovilísticos, casos de demandas de menor cuantía, casos de la corte de familia, casos de la corte testamentaria y mucho más.
¿Desearía saber si alguien está realmente casado o incluso si se ha presentado un proceso de divorcio? Descubre información en profundidad.
A menudo, todo lo que necesitamos es información de contacto. Tenemos eso cubierto. Obtenga fácil acceso a registros recientes de teléfonos celulares, detalles actuales de la dirección de correo electrónico, domicilio y actividad en la red.
¿Desearía ver el tipo de posesiones o tal vez las empresas que tiene la persona exhibida? Examine si alguna información de construcción o información de pequeñas empresas está vinculada con la investigación.

Creo que lo intenta. Como en la guía telefónica ordinaria, hace clic en “S”, se muestran todos los nombres que comienzan con S, que pueden implementarse con Tries. La guía telefónica generalmente contiene 500 nombres, por lo que la memoria no es un problema

Personalmente, le recomiendo que use el árbol de búsqueda ternario ya que puede proporcionar la función + memoria utilizada es muy inferior + la velocidad es casi la misma

http://www.geeksforgeeks.org/ter

En general, HashSet supera al Trie cuando se trata de buscar una cadena completa. Pero si desea buscar una parte de la cadena, como si comienza, termina o tiene un patrón, debe preferir un árbol Trie Prefijo.

Un conjunto hash no es un árbol de búsqueda binario, se implementa como una tabla hash.

No puede encontrar el elemento más pequeño / más grande en un conjunto hash en tiempo constante

Como dijo Adam, los detalles dependen de un escenario particular.

Por ejemplo, se puede hacer una búsqueda completa de la agenda telefónica / DNS del lado del cliente solo en CSS.

(consulte Búsqueda de texto completo del lado del cliente en CSS)

La implementación real dependerá en gran medida del volumen de datos que tiene que procesar. Suponiendo que tiene un estricto requisito de rendimiento, me inclino por trie.

Aquí hay una buena implementación:
Implementación del directorio telefónico usando TRIE

Trie es una mejor opción, ya que ayudará en la recuperación rápida de datos.
Aunque puede hacerse fácilmente a través de HashMap marcando solo el primer carácter, sería tedioso o podemos decir que si lo queremos en orden ordenado, por supuesto, Treeset es un mejor ejemplo.