Literally, I want to hash 10 integers
I don't know because I still lack the concept of hashing
I was going to use Jenkins' hash function to do a hash.
// Robert Jenkins' 32bit hash function
unsigned __int32 hash(unsigned __int32 key)
{
key += (key<<12);
key ^= (key>>22);
key += (key<<4);
key ^= (key>>9);
key += (key<<10);
key ^= (key>>2);
key += (key<<7);
key ^= (key>>12);
return key;
}
But when I put the value of 3 into the hash function and printed it out, it came out as 948077404.
Then, I want to make the hash table into an array, so should I make it with the array size of 948077404?
I only need to hash about 10 pieces of data. What should I do?
c hash
Let's talk a little bit about the hash.
The hash function converts the variable size original data into a fixed size hash value.
The hash value resulting from this transformation contains the characteristics of the original data.
The advantage of converting this variable size data into fixed size data is that you can speed up comparison operations. The hash value is typically smaller than the original data, allowing you to quickly compare whether the original data is the same or different.
Use to quickly compare the original data. Being able to compare quickly means that the source can quickly find the same data. With these characteristics, you can quickly create maps, dictionaries, hash tables, sets, and more, which are data structures that allow you to find values (specific data that matches the key) using the key.
Of course, the original data and hash values cannot be matched 1:1 because the amount of information is reduced. Other source data can also have the same hash value, which is called a hash conflict.
Moving on, it's almost impossible to create an array that can hold all the hash values, and it's not good because it's freeing up memory for data that you don't want to use.
Once you've used 10 pieces of data, you can create an array of 10 elements.
If you do it in more detail, the code will be longer, so if you express it conceptually and concisely, it is as follows.
struct Node {
unsigned __int32 key;
void* value;
} } table[10];
memset(table, 0, sizeof(table));
// Add hash and value to table
table[0].key = hash(1); // 1 is an arbitrary key
table[0].value = malloc(sizeof(int); // any value
// ...
You can create a hash table in this way to put the key and the value. Of course, we don't actually make it as simple as above. It also increases the speed of searches by aligning the key .
You can then quickly find the original data you want to find by comparing the key as shown below.
int i, key;
void* value;
key = hash(1); // hash of the original data to be found
value = NULL;
for (i = 0; i < (sizeof(table) / sizeof(*table)); ++i) {
if (table[i].key == key) {
value = table[i].value;
break;
}
}
if (value != NULL) {
// Found a value corresponding to the key
}
In addition, a hash table that simply uses 10 integers is not faster than an array made with 10 integers.
572 Understanding How to Configure Google API Key
567 Who developed the "avformat-59.dll" that comes with FFmpeg?
577 PHP ssh2_scp_send fails to send files as intended
606 Uncaught (inpromise) Error on Electron: An object could not be cloned
567 rails db:create error: Could not find mysql2-0.5.4 in any of the sources
© 2024 OneMinuteCode. All rights reserved.