1、直接映射表
创新互联公司为您提适合企业的网站设计 让您的网站在搜索引擎具有高度排名,让您的网站具备超强的网络竞争力!结合企业自身,进行网站设计及把握,最后结合企业文化和具体宗旨等,才能创作出一份性化解决方案。从网站策划到成都网站建设、网站设计, 我们的网页设计师为您提供的解决方案。
查找数据时,直接定位,时间复杂度为:O(1);
局限性:浪费大量的内存空间;
2、哈希表
(1)、用一个哈希函数Hash()来随机映射那些键;
抽象模型
(2)、哈希冲突时:
i、链地址法,时间复杂度最坏:O(n);
简单均匀哈希的时间复杂度:O(1+a);a:装载因子
哈希函数的选取:除留余数法;
ii、开放寻址法,没有链表;
利用多次哈希函数,探测空的位置,直到找到一个可以存放元素的位置即可;探查序列很重要!!!
插入、查询就根据探查序列比较简单,删除比较难做;
探测序列:a、线性探测:一个挨一个位置的探测,往下扫描;
探测序列:b、二次哈希:2个哈希函数的和扫描;
哈希表越满,其探查效率越低;
3、哈希表溢出,动态哈希怎么实现?
i、首先申请一个原哈希表2倍大的空间;
ii、在将旧有元素移到新的哈希表空间中;
iii、在释放原有空间;
平摊分析的思想:
一个插入的平均代价时间复杂度:O(1);
n个元素的插入时间复杂度是:O(n);
4、哈希函数的所有键映射同一个槽,此时查询效率极为低下。
(1)、问题关键:选择哈希函数,要随机选择,与输入的哈希运算的键保存独立,程序员本身也不能确定在实际运行时会用到哪一个哈希函数,无法预测随机数的输出;----->全域哈希
(2)、全域哈希解决的问题:所有键都相同,此时随机选择哈希函数将会使其映射到不同的槽中;
哈希函数集H中随机地选择函数h,均匀的分布在哈希表中;
(3)、全域哈希的构造:
i、槽的总数为m = 质数时成立,k =
ii、构造一个a =
哈希函数集:k x a,k中的每一项和a中的每一项相乘,再把乘积全部加起来,在对m取余,就得到分配的槽数;哈希函数集的大小:m^(r+1);
(4)、全域哈希是用随机函数的思想,但是有很小很小的概率还是会冲突的,解决方案:完全哈希;
5、完全哈希
使用二级结构,在每一级都会用全域哈希,第一级可能会有冲突,但是第二级就没有了;
(1)、算法模型
(2)、算法分析:
时间复杂度:O(1);
所需的存储空间为:O(n);
网站栏目:全域哈希和完全哈希
本文来源:http://lswzjz.com/article/pojdcc.html