数据结构——线性结构(哈希表)

数据结构——线性结构(哈希表)

一、直接寻址表

  如果某应用要用到一个动态集合,其中每个元素都是全域U={0,1….,m}中的一个关键字 为表示动态集合,使用数组。称为直接寻址表,记为T[m],其中每个位置称为一个槽slot,对应于全域中的一个关键字。槽k指向集合中一个关键字为k的元素。如果该集合中没有关键字为k的元素,则T[k]=NIL; 

  

1、直接寻址技术优点

  当关键字的全域U比较小时,直接寻址是一种简单而有效的方法。

2、直接寻址技术缺点

  当域U很大时,需要消耗大量内存,很不实际;

  如果域U很大而实际出现的key很少,则大量空间被浪费;

  无法处理关键字不是数字的情况。

3、将直接寻址表改进为哈希表

  直接寻址表:key为k的元素放到k的位置上。

  改进方法:

  (1)构建大小为m的寻址表T;

  (2)key为k的元素放到h(k)位置上;

  (3)h(k)是一个函数,其将域U映射到表T[0,1,...,m-1]。

二、哈希表

  在直接寻址表上加了一个哈希函数就成了哈希表。

  哈希表(Hash Table,又称为散列表),是一种线性表的存储结构。哈希表由一个直接寻址表和一个哈希函数组成。哈希函数h(k)将k作为自变量,返回元素的存储下标。

  假设有一个长度为7的哈希表,哈希函数h(k)=k%7。元素集合{14,22,3,5}的存储方式如下图:

  

  14%7=0,因此14存在index=0的位置;22%7=1,因此22存在index=1的位置;3%7=3,因此3存在index=3的位置;5%7=5,因此5存在index=5的位置。

1、常见哈希函数

  • 除法哈希法:h(k) = k mod m      # mod就是%      # 除留余数法
  • 乘法哈希法:h(k) = floor(m*(A*key%1))   0<A<1    # 对1取模也就是取它的小数部分,   floo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值