哈希表

把一些元素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)计算出。

posted @ 2018-04-16 20:07  hzhuan  阅读(117)  评论(0编辑  收藏  举报