Título: Ayuda con teoría de Funciones Hash Publicado por: Gauss en 29 Noviembre 2018, 20:21 pm Hola buenas tardes, estaba leyendo sobre Tablas Hash y quería implementar una desde 0, lo primero que quise hacer son unas funciones hash, la que es para strings(si le ingresan como clave "ab" devuelve la suma de los códigos ASCII, "ab" = 97+98 = 195) y la de plegamiento(si le ingresan una clave entera devuelve la suma de unas partes, para la clave 42531 -> 42 + 53 + 1 = 96). El (suma%tamanioTabla) es para que el índice que devuelva esté en el rango de la tabla.
Mi duda es más teórica creo, porque según tengo entendido las funciones Hash son de orden O(1), osea que son rápidas al no iterar y obtener el resultado/ingreso/borrado directamente. Pero en las funciones Hash que hice hay bucles, por ejemplo en el de los strings hay tantos bucles como longitud de la palabra clave y si las claves son largas el programa va perdiendo eficiencia. Entonces son válidas esas funciones Hash? o debería ingeniármelas de alguna forma para hacer las funciones Hash sin bucles para que no dependan de la clave? Gracias. Código: #include <iostream> Título: Re: Ayuda con teoría de Funciones Hash Publicado por: CalgaryCorpus en 29 Noviembre 2018, 20:32 pm Que dependa de la clave esta bien, y aun esta bien recorrer el string 1 vez para calcular el valor del hash.
La preocupacion de que no sea O(1) viene relacionada con el tamano de los datos que tienes, vale decir, si tienes n claves+datos, cuanto tomas en insertarlas en tu contenedor? y cuando te demoras en encontrarlas si estan, o en descubrir que no estan cuando asi es? Si esto es dependiente de n la tabla de hash no se esta comportando tan bien como quisieras. Tu quieres que ese tiempo sea constante tambien. Título: Re: Ayuda con teoría de Funciones Hash Publicado por: Gauss en 1 Diciembre 2018, 21:07 pm Muchas gracias!
|