标签:
散列表的基本思想通过键来直接计算出数据的存放地址,而避免了数组或者其他数据结构的逐个比较查找。
可以在常数时间内实现查找、插入和删除操作,代价是不支持任何有关排序的操作。
键到地址的映射,称作散列函数。散列函数需要满足两个要求:计算简单;冲突少。
不同的情况,可以有不同的散列函数,在此不对散列函数做过多介绍。
冲突:相同的键,通过散列函数,被映射到了相同的地址。下面主要介绍下解决冲突的一些简单方法。
分离链表法:把散列到同一个地址的数据保存在一个链表中。在查询数据时,先通过散列函数求出链表地址,
再遍历链表查询。
探测散列表:首先根据散列函数计算地址:H0=hash(key)
如果发生冲突,再根据探测函数查找下一个空闲地址:Hi = (Hi-1+f(i))%m.
其中 i 表示第 i 次发生冲突,H0是根据散列函数求得的基地址,m是散列表大小。
当f(i)是一个一次函数时,这种方法称为线性探测;当f(i)是一个二次函数时,这种方法称为二次探测法。
双散列法:Hi = (Hi-1+hash2(key))%m.
标签:
原文地址:http://www.cnblogs.com/jc-nogame/p/5940449.html