冷滟泽的个人博客冷滟泽的个人博客

Hash 的一种优秀方法

有时候用哈希总会感觉心里不稳,怕脸黑撞生日悖论 FST 或者被别人 Hack 之类的,而多模哈希有太慢。今天逛 CF 评论区 看见了一种比较优秀的做法,再此 mark 一下。

ull mix(ull o)
{
    o+=0x9e3779b97f4a7c15;
    o=(o^(o>>30))*0xbf58476d1ce4e5b9;
    o=(o^(o>>27))*0x94d049bb133111eb;
    return o^(o>>31);
}

元组 Hash 同样可以:

ull hash(int a) { return mix(a.first^mix(a.second)); }

顺便 mark 一下科学的随机数生成方法(c++11)

#include <algorithm>
#include <chrono>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
未经允许不得转载:冷滟泽的个人博客 » Hash 的一种优秀方法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址