今天是周镇东讲的哈希专场,虽然先讲了一些 poly 的东西。
其实 poly 就是要大胆去拆式子手推就好了。
哈希的部分 hehezhou 讲了一车,记录一下常见的哈希技巧。
字符串哈希:直接按位多项式哈希就可以了。
树哈希:其实就是乱搞,你用什么质数哈希掉什么都可以,我写的是对每个子树内的哈希值 xor shift 后再加到父亲上,可以随机一个数进行异或防止被卡。
ull shift(ull x) {x ^= mask;x ^= x << 13;x ^= x >> 7;x ^= x << 17;x ^= mask;return x;
}
一般是 unsigned 类型。
图哈希:也是乱搞,你随便令所有点的哈希值变为所有邻居的哈希值加和乘上一个数取模或者 xor shift 之和都行,或者改成哈希值最短路之和也行,总之就是随便乱搞,只要不和点的编号有关就行,必须要做多轮(比如 n 轮)才有正确性。
集合哈希:因为是无序的,所以一般是将集合里的值随机赋值加和。
其实哈希的难点都不在哈希,在于你咋想到用哈希。