
SERVICE PHONE
363050.com发布时间:2025-07-18 18:28:59 点击量:
哈希游戏,哈希博彩平台,比特币哈希游戏,区块链博彩,去中心化博彩平台,可验证公平平台,首存送88U,虚拟币哈希娱乐目录1.哈希映射1.1哈希的概念1.2哈希冲突1.3哈希函数2.解决哈希冲突2.1闭散列法3代码实现3.1状态3.2创建哈希节点类3.3数据插入3.4查找与删除3.5仿函数4.开散列哈希桶4.1概念4...
在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),搜索的效率决于搜索过程中元素的比较次数。
理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。
该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表)。
对于两个数据元素的关键字Kphpi和Kj(i != j),有Ki!=Kj,但有:Hash(Ki) == Hash(Kj),即:不同关键字通过相同哈希函数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞。把具有不同关键码而具有相同哈希地址的数据元素称为“同义词”
例如计数排序,统计字符串中出现的用26个英文字符统计,给数组分配26个空间,遍历到的字符是谁,就把相应的元素值++
把数据映射到有限的空间里面。设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数:Hash(key) = key% p(p=m),将key转换成哈希地址。
哈希函数设计的越精妙,产生哈希冲突的可能性就越低,但是无法避免哈希冲突。
闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到冲突位置中的“下一个” 空位置中去。
线性探测:从发生冲突的位置开始,依次向后探测,直到寻找到下一个空位置为止。
插入:通过哈希函数获取待插入元素在哈希表中的位置。如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到下一个空位置,插入新元素。
删除:采用闭散列处理哈希冲突时,不能随便物理删除哈希表中已有的元素,否则会影响其他元素的搜索。比如删除元素1,如果直接删除掉,11查找起来可能会受影响。因此线性探测采用标记的伪删除法来删除一个元素。
所谓的二次探测我们可以理解为飞跃式,线性是一个一个找空位置,二次就是跳着找。
查找:当数据是1时,直接映射到下标1处,此时该位置的状态是EXIST,数据是11时,映射到下标1处,但是已经有1了所以++往后找空位置找到后状态更新为EXIST。
删除:删除1,找11,当删除1后,状态更新为DELETE,查找11时下标发现状态是DELETE时会继续往后移动,然后找到11.
当插入的数据较多,而哈希表较短时,就要考虑到扩容,但是哈希的扩容不简单,因为一扩容,下标就变了,那很多数据的映射后的位置就变了。
由于散列表的长度一定,所以负载因子和表中的元素个数成正比。元素个数越多,哈希冲突越大,所以我们一般将负载因子定在0.7~0.8,在代码中我们就定在0.7。
比如我们开了20个空间,下标16以后都存满了但是前面还有位置,但是我们存一个37,那他就一直找位置,直到找到19,然后就出这个哈希表了,所以要让他返回到表上再到下标靠前的位置去找。
当插入的数据较多,而哈希表较短时,就要考虑到扩容,但是哈希的扩容不简单,因为一扩容,下标就变了,那很多数据的映射后的位置就变了。
由于散列表的长度一定,所以负载因子和表中的元素个数成正比。元素个数越多,哈希冲突越大,所以我们一般将负载因子定在0.7~0.8,在代码中我们就定在0.7。