哈希表
把一些元素node,通过对其特征的分析,设计哈希函数将其转译成数组下标(或地址)。
key=hash1(node) (node较复杂,则先转为key),a[hash2(key)].
在竞赛中最直接的用处便是判重和判等价。
1,对大质数取模(最简单的hash函数)
a[key%1000000009]
2,解决冲突(建议vector)
即hash值一样,再从hash值一样的元素里寻找需要的
3,BKDRhash
对字符串的hash,将字符串看成一个seed进制数(seed取质数好)
通过这个hash,可以O(n)处理两个串的匹配(长串是否含有短串)
首先O(M)得出短串的hash值,再对长串先得到hash[1,,,,m],而hash[2,,,,m+1]=(hash[1,,,,,m]-s[1]*seedm-1)*seed+s[m+1]
只需O(1)的计算便可得出下一待匹配的子串的hash值,hash值都不一样,则两串肯定不一样
还有一个优点,我们再对十进制数进行研究,发现先处理好前缀的hash值,则任意子串的hash值都能O(1)计算出。