Функция хэширования небольших строк

У меня есть строка от 1 до 5, и мне нужно ее хэшировать с хорошей производительностью и минимальными коллизиями. Какие-либо предложения? (Мне не нужна безопасность)

0

Решение

В зависимости от вашего сценария у вас могут быть определенные потребности в том, какой тип хэша вам нужен. Но если все, что вам нужно, это что-то, чтобы отделить их, то std::hash() приходит на ум …

Другой вариант будет что-то вроде:

long long hash(const std::string &val) {
long long hash = 0;
memcpy(reinterpret_cast<char*>(&hash), val.c_str(), std::min(sizeof(hash), val.length());
return hash;
}

Извиняюсь за любые опечатки в вышеупомянутом коде, это не было скомпилировано или проверено. Это имеет минимальные коллизии (нет), я думаю, это довольно хорошая производительность и не очень хорошее качество. Под качеством я подразумеваю разделение близких друг к другу значений и использование всего ключевого пространства.

Конечно, есть также целый ряд обычных криптографических хеш-функций, но я беру из вашего вопроса, что это не то, к чему вы стремитесь.

0

Другие решения

У вас есть linux? Пытаться /bin/gperf он генерирует идеальную хеш-функцию из набора ключей.

0

По вопросам рекламы [email protected]