Komihash is pretty amazing and simple hashing algorithm
I need a simple way to hash strings into 64bit integers so I started some research. Initially I was focusing on xxHash but it's slightly harder to implement than other newer hashes. I ended up landing on the amazing Komihash which bills itself as: "a very fast 64-bit hash function, mainly designed for hash-table, hash-map, and bloom-filter uses".
Komihash is available as a single Komihash.h
file and is extremely easy to implement into existing code.
#include <stdio.h>
#include <stdlib.h>
#include "komihash.h"
int main(int argc, char *argv[]) {
int seed = 0;
const char *buf = "Hello world";
uint64_t hash_num = komihash(buf, strlen(buf), seed);
printf("Komihash: %s = %llu\n", buf, hash_num); // 3745467240760726046
}
As a bonus it also comes with a PRNG which is equally simple to implement:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "komihash.h"
int main(int argc, char *argv[]) {
uint64_t seed1 = time(NULL);
uint64_t seed2 = (seed1 << 32);
for (int i = 0; i < 5; i++) {
uint64_t rand64 = komirand(&seed1, &seed2);
printf("Komirand: %llu\n", rand64);
}
}
In fact, I liked it so much I ported it to Perl in Crypt::Komihash.