一类树哈希方法
记 \(s(x)\) 表示子树 \(x\) 的哈希值(对 \(2^{64}\) 取模),则:
\[s(x)=1+\sum _{v\in son_x} f(s(v))
\]
其中 \(f\) 是整数到整数的映射,可以使用 Xor Shift,可以在 Xor Shift 异或一个固定的随机值,64 位下安全的 Xor Shift 如下:
ull mix=mt19937_64(chrono::steady_clock::now().time_since_epoch().count())();
struct xor_shift {ull operator()(ull x) const {x^=mix;x^=(x<<13);x^=(x>>7);return x^(x<<17);}
};