哈希
哈希的思想是构造一个映射,将定义域内的不好刻画的元素
(字符串等)映射成较易刻画的整数。
判断两个在$ 2^{64}$以内的数是否相同是容易的,那么我们的问题就是将数组到树构造这个映射。
考虑哈希冲突的概率,由于base是我们任取的,而P又是一个素数。所以若发生
取模,那么我们可以将其看做一个在 [0,P) 均匀独立随机的数。
对于两个不同的,未取模的状态,他们的哈希值显然不会相
等。对于两个取模过后的状态,由于他们都是独立生成的,所以
冲突的概率为 \(1/p\),这是很小的。
字典树(Trie)
字典树,英文名 trie。顾名思义,就是一个像字典一样的树。
这棵字典树用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。
字典树最基础的应用——查找一个字符串是否在「字典」中出现过。
01字典树
他的核心思想是将一个数看作一个二进制下的01字符串,串长不超过\(log2\)V。除此之外,他和普通的字典树没有什么本质区别。
kmp
数组的前缀和后缀的最大公共部分,由数组\(next[i]\)记录长度为\(i\)时的长度
而\(kmp\)正是通过\(next\)数组来求的,我们求到两个数组不同时,第一个数组就跳到下一次出现前缀的地方,正是这,优化了时间复杂度