Saltar al contenido

Búsqueda rápida en una lista ordenada de cadenas en C ++

Mantén la atención porque en este post vas a hallar la solución que buscas.

Solución:

Si su lista de cadenas está fijada en tiempo de compilación, use gperf http://www.gnu.org/software/gperf/ QUOTE: gperf es un generador de funciones hash perfecto. Para una lista dada de cadenas, produce una función hash y una tabla hash, en forma de código C o C ++, para buscar un valor dependiendo de la entrada. string. La función hash es perfecta, lo que significa que la tabla hash no tiene colisiones, y la búsqueda de la tabla hash necesita un solo string solo comparación.

La salida de gperf no se rige por gpl o lgpl, afaik.

Puede probar PATRICIA Trie si ninguno de los contenedores estándar satisface sus necesidades.

La búsqueda en el peor de los casos está limitada por la longitud del string estás mirando hacia arriba. Además, las cadenas comparten prefijos comunes, por lo que es muy fácil para la memoria, por lo que si tiene muchas cadenas relativamente cortas, esto podría ser beneficioso.

Compruébalo aquí.

Nota: PATRICIA = Algoritmo práctico para recuperar información codificada en alfanumérico

¿Qué pasa con std :: vector? Cárguelo, ordene (v.begin (), v.end ()) una vez y luego use lower_bound () para ver si el string está en el vector. Se garantiza que lower_bound sea O (log2 N) en un iterador de acceso aleatorio ordenado. No puedo entender la necesidad de un hash si los valores son fijos. Un vector ocupa menos espacio en la memoria que un hash y hace menos asignaciones.

valoraciones y reseñas

Si aceptas, eres capaz de dejar un ensayo acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *