哈希hash 各种用法最全详解

哈希hash 什么是哈希

哈希表是一种散列表,可支持插入元素和查询元素的操作。

当元素的取值范围特别大时,布尔数组的下标无法支持,这时可以用到哈希表。

操作

对于一个哈希表,需要取一个固定的模数 p p p,哈希表的下标可以开到 p p p 1 − 2 1-2 12倍大,

具体怎么用请往下看:

插入元素

例如有如下元素 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; } 查询元素

若上面的元素插入完后,又有一些元素,我们需要判断它们是否在表中存在,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgypzj.html