哈希hash 什么是哈希
哈希表是一种散列表,可支持插入元素和查询元素的操作。
当元素的取值范围特别大时,布尔数组的下标无法支持,这时可以用到哈希表。
操作对于一个哈希表,需要取一个固定的模数 p p p,哈希表的下标可以开到 p p p的 1 − 2 1-2 1−2倍大,
具体怎么用请往下看:
插入元素例如有如下元素 18 , 9 , 13 , 5 , 31 18,9,13,5,31 18,9,13,5,31,要把它们存入一个哈希表中,
当前 p = 13 p=13 p=13
放入 18 18 18,对 p p p取余,得到 5 5 5,那么就在 h a s h [ 5 ] = 18 hash[5]=18 hash[5]=18;
放入 9 9 9,对 p p p取余,得到 9 9 9,那么就在 h a s h [ 9 ] = 9 hash[9]=9 hash[9]=9;
放入 13 13 13,对 p p p取余,得到 0 0 0,那么就在 h a s h [ 0 ] = 13 hash[0]=13 hash[0]=13;
放入 5 5 5,对 p p p取余,得到 5 5 5,但 h a s h [ 5 ] hash[5] hash[5]有值了,那么下标右移,直到有空位为止, h a s h [ 6 ] = 5 hash[6]=5 hash[6]=5;
放入 31 31 31,对 p p p取余,得到 5 5 5,但 h a s h [ 5 ] hash[5] hash[5]有值了,那么下标右移,直到有空位为止( h a s h [ 6 ] hash[6] hash[6]也有值了), h a s h [ 7 ] = 18 hash[7]=18 hash[7]=18。
void insert(int t) { int x=t%p; while(hash[x]) { x++; x%=maxn;//如果到了哈希表末尾那么就移动到开头 } hash[x]=t; } 查询元素若上面的元素插入完后,又有一些元素,我们需要判断它们是否在表中存在,