哈希表

来源:互联网 发布:java 图片合成 锯齿 编辑:程序博客网 时间:2024/06/07 18:42

 哈希表是中数据结构,提供快速插入和查找操作。

优点:
- 不论数据有多少,插入和删除接近常量时间o(1),树通常需要O(n)时间级。
缺点:
- 哈希表是基于数组的,创建后难于扩展,某些哈希表被基本填满时候,性能下降严重。(要清楚存储的数据量)
- 没有一个简单方法可以任何一种顺序遍历表中数据项。

哈希表算法-概念及作用

 一般线性表,树中,记录在结构中位置是随机的,记录和关键字之间不存在确定的关系。因此在结构中查找记录时候需要进行一系列和关键字的比较,查找效率依赖于查找过程中进行比较的次数。

 理想情况下,直接找到需要的记录,因此必须在记录的存储位置和他们的***关键字***之间建立好一个确定的关系f,使得每个关键字和结构中一个唯一的存储位置相应,这就是哈希表。但是如果一个***关键字***对应多条记录,就是哈希表出现了***冲突现象***。

哈希表中常用算法

直接定址法

数学分析法

平方取中法

折叠法

除留余数法

取关键字被某个不大于哈希表长m的数p除后所得余数为哈希地址。
H(key)=key Mod p(p

随机数法

选择一个随机函数,取关键字的随机函数值为它的哈希地址,即
H(key)=random(key),其中random为随机函数。关键字长度不等采用这种方法。

处理冲突的方法

开放地址法

Hi=(H(key)+di) Mod m i=1,2….,k(k<=m-1)其中m表长,di为增量序列。
di取值情况:
- 线性探测再散列 1,2,3…m
- 再散列 1,-1,2,-2,4,-4……-k*k
- 伪随机探测再散列

再哈希法

当再次冲时候,使用第二个,第三个,哈希函数计算地址,直到无冲突时。缺点:计算时间增加。

链地址法

将多有关键字为同义词的记录存储在同一线性链表中。

建立一个溢出分区

假设哈希函数的值域为[0,m-1],则设向量HashTable[0,1….m–1]为基本表,另外设立储存间向量OverTable[0,1,….v]用以存储发生冲突的记录。

原创粉丝点击