前置知识:何为哈希?
假设现在要存一个数组a[1,7,20000000,3289,10]
很简单,你可将他们存在a数组里。
但这样查找就会很不方便,尤其是当数很多的时候,你要开着循环一遍遍找(当然也可以采用二分)
或者你又说为了能O(1)找到这个数是否存在,你可用打勾数组。即读进来5,在a[5]=1;
但如果读进来一个很大的数,假设是1000000,你就要开一个很大的数组在a[1000000]=1;但其实最后只有三个数,你却开了这么大一个数组,岂不是浪费?
这就要用到hash了
hash[mod]=a[i]
mod就是n%一个贴近他的素数(数学家写了很长的证明,来证明%素数,冲突的几率会小一些)
那你可能就要问了:余数万一一样,不就冲突了吗?
没错,我们可以使用链表,或者是向量来处理这些冲突。
以%13为例
言归正传
集合元素,也不用多说了吧,标准hash
细节在代码中: