Pregunta: Escriba código en C# para aplicar hash a una serie de claves y muéstrelas con su código hash.
Respuesta: Hashtable es una estructura de datos ampliamente utilizada para almacenar valores (es decir, claves) indexados con su código hash. El código hash es el resultado de la función hash y se utiliza como valor del índice para almacenar una clave. Si dos claves distintas tienen el mismo valor, la situación se denomina colisión y una buena función hash minimiza las colisiones.
Pregunta: ¿Cómo elegir una función hash apropiada para los datos?
Respuesta: Si sus datos consisten en números enteros, la función hash más fácil es devolver el resto de la división de la clave y el tamaño de la tabla. Es importante mantener el tamaño de la tabla como un número primo. Pero se pueden escribir funciones más complejas para evitar la colisión. Si sus datos consisten en strings, puede agregar todos los valores ASCII de los alfabetos y modular la suma con el tamaño de la tabla (el código a continuación muestra lo mismo).
Ejemplo 1:
// C# Program to create a Hash // Function for String data using System; class Geeks { // Main Method public static void Main(String []args) { // Declaring the an string array string[] values = new string[50]; string str; // Values of the keys stored string[] keys = new string[] {"Alphabets", "Roman", "Numbers", "Alphanumeric", "Tallypoints"}; int hashCode; for (int k = 0; k < 5; k++) { str = keys[k]; // calling HashFunction hashCode = HashFunction(str, values); // Storing keys at their hashcode's index values[hashCode] = str; } // Displaying Hashcodes along with key values for (int k = 0; k < (values.GetUpperBound(0)); k++) { if (values[k] != null) Console.WriteLine(k + " " + values[k]); } } // Defining the hash function static int HashFunction(string s, string[] array) { int total = 0; char[] c; c = s.ToCharArray(); // Summing up all the ASCII values // of each alphabet in the string for (int k = 0; k <= c.GetUpperBound(0); k++) total += (int)c[k]; return total % array.GetUpperBound(0); } }
11 Tallypoints 16 Alphanumeric 19 Roman 34 Alphabets 46 Numbers
Ejemplo 2:
// C# Program to create a Hash // Function for String data using System; class Geeks { // Main Method public static void Main(String []args) { // Declaring the an string array string[] values = new string[50]; string str; // Values of the keys stored string[] keys = new string[] {"C", "C++", "Java", "Python", "C#", "HTML"}; int hashCode; for (int k = 0; k < 5; k++) { str = keys[k]; hashCode = HashFunction2(str, values); // Storing keys at their hashcode's index values[hashCode] = str; } // Displaying Hashcodes along with key values for (int k = 0; k < (values.GetUpperBound(0)); k++) { if (values[k] != null) Console.WriteLine(k + " " + values[k]); } } // Defining the hash function static int HashFunction2(string s, string[] array) { long total = 0; char[] c; c = s.ToCharArray(); // Horner's rule for generating a polynomial // of 11 using ASCII values of the characters for (int k = 0; k <= c.GetUpperBound(0); k++) total += 11 * total + (int)c[k]; total = total % array.GetUpperBound(0); if (total < 0) total += array.GetUpperBound(0); return (int)total; } }
6 C# 15 C++ 18 C 19 Python 28 Java
Explicación: en HashFunction , pasamos los argumentos como una string para que se convierta en hash y los datos de la string ‘ valores ‘. El método ToCharArray convierte la string en la array de caracteres y luego comenzamos un ciclo for desde el principio hasta el final de la array de caracteres. Dentro del ciclo for calculamos la suma total de los valores ASCII de cada carácter en la array. El método GetUpperBound devuelve el valor del índice más alto de la array. Luego, la función hash devuelve el módulo de la suma total por el límite superior de la array (en este caso, 49 desde la string [] valores = nueva string [50] ). Mientras que en HashFunction2, estamos pasando los mismos argumentos pero es menos probable que esta función tenga colisiones. Todo es básicamente lo mismo, excepto que aquí usamos la regla de Horner para calcular la función polinomial de 11.
Publicación traducida automáticamente
Artículo escrito por ManasiKirloskar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA