二次探测是避免哈希冲突的一种常见手段,思想是:插入:找到哈希位置(serch)->如果不冲突就插入,冲突就进行第一次探测第1次探测:哈希位置变为原有哈希位置加上1*1的偏移->进行插入........第i次探测:哈希位置变为原有哈希位置加上i*i的偏移->进行插入知道插入完..
分类:
其他好文 时间:
2016-05-11 20:13:47
阅读次数:
127
哈希桶:哈希桶就是盛放不同key链表的容器(即是哈希表),我们可以把每个key的位置看作是一个指针,该指针所指向的位置里放了一个链表,可以认为是指针数组,故该方法也叫开链式。相比闭散列,哈希桶提高了空间利用率:在实现哈希表时,常见的方法是线性探测、二次探测,这两..
分类:
其他好文 时间:
2016-05-11 11:30:42
阅读次数:
413
1.直接定址法、数字分析法、平方取中法 、折叠法、随机数法、除留余数法;
2.冲突解决:开放定址法(线性探测、二次探测和随机探测)、链地址发、再哈希发、建立溢出区...
分类:
其他好文 时间:
2016-05-10 18:50:48
阅读次数:
122
实现哈希表时,我们常见的方法是线性探测、二次探测,这两个算法也很简单。若有兴趣,可以查看我的博客。但是,这两个算法有一个共同点就是:空间利用率低。为什么这么说呢?线性探测、二次探测的高效性很大程度上要取决于它的载荷因子,载荷因子即:存放关键字个数/空间大校通..
分类:
编程语言 时间:
2016-05-08 20:09:10
阅读次数:
532
散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数Hash(key),对任意给定的关键字值..
分类:
其他好文 时间:
2016-05-08 01:25:06
阅读次数:
530
首先需要知道两个定理: 1: 费马小定理: 假如p是素数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p)。 2:二次探测定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x=p-1。 证明:这是显然的,因为相当于p能整除,也即p能整除(x+1)(x-1)。 由于p是素数, ...
分类:
编程语言 时间:
2016-05-07 12:59:24
阅读次数:
2927
散列(hash)表/哈希表 1.关键字和和存储的地址建立一个对应的关系:Add = Hash(key); 2. 解决冲突方法: (1)开放定址法 – 探测方式:线性探测、二次探测。 (2)再哈希法 (3)分离链接法 – 利用链表的方式。 (4)公共溢出区法 3.存储结构:用顺序存储来构建哈希表。构建 ...
分类:
其他好文 时间:
2016-05-07 06:37:03
阅读次数:
290
头文件://1.用《负载因子》来减少哈希冲突**//2.用开辟《素数》个空间来减少哈希冲突**//3.用《线性探测》·《二次探测》·《string的特殊算法》来减少哈希冲突**//4.防止《数据冗余》//5.用头插法插入节点》》》》》》为什么?//6.用《伪函数》实现功能模块的复用还有《模板..
分类:
其他好文 时间:
2016-04-10 19:35:01
阅读次数:
325
#pragmaonce
#include<iostream>//含一次探测二次探测
#include<vector>
#include<math.h>
usingnamespacestd;
enumStatus
{
EXIST,
EMPTY,
DELET,
};
template<classK,classV>//key/value形式结构体
structKV
{
K_key;
V_value;
KV(constK&..
分类:
编程语言 时间:
2016-03-23 11:26:40
阅读次数:
339
故数据存储下标为伪代码:1.//index=_HashFunc(key);//++i;//index+=(2*i-1);size_t_HashFunc(constK&key){returnkey%_capacity;}2.//index=_HashFunc(key,++i);size_t_HashFunc(constK&key,size_ti){return(key+i*i)%_capacity;}#pragmaonce
#include<iostream>..
分类:
其他好文 时间:
2016-03-21 02:04:50
阅读次数:
283