第八章走查找3.pptVIP

  • 3
  • 0
  • 约4.85千字
  • 约 27页
  • 2019-01-08 发布于福建
  • 举报
第八章走查找3

8.3 哈希表 查找操作要完成什么任务? 我们学过哪些查找技术?这些查找技术的共性? 顺序查找、折半查找、二叉排序树查找等。 以上讨论的查找方法,由于记录的存储位置与关键字之间不存在确定的关系,因此查找时需要进行一系列对关键字的查找比较,即“查找算法”是建立在比较的基础上的,查找效率由比较一次缩小的查找范围决定。 * * 湖南理工学院信息与通信工程学院 数据结构 * * 第八章 查找 线性表上的查找 二叉排序树 哈希表 待查值k 确定k在存储结构中的位置 能否不用比较,通过关键码直接确定存储位置? 依据关键字直接得到其对应的记录位置,即要求关键字与记录位置间存在一一对应关系,通过这个关系,能很快地由关键字得到对应的记录位置。 哈希函数(散列函数):在记录的关键字与记录的存储地址之间建立的一种对应关系。 哈希函数是从关键字空间到存储地址空间的一种映象。 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字 关键字 集合 存储地址 集合 hash 例 30个地区的各民族人口统计表 编号 地区别 总人口 汉族 回族…... 1 北京 2 上海 …... …... 以编号作关键字, 构造哈希函数:H(key)=key H(1)=1 H(2)=2 以地区别作关键字,取地区 名称第一个拼音字母的序号 作哈希函数:H(Beijing)=2 H(Shanghai)=19 H(Shenyang)=19 散列技术仅仅是一种查找技术吗? 散列既是一种查找技术,也是一种存储技术。 散列是一种完整的存储结构吗? 散列只是通过记录的关键码定位该记录,没有完整地表达记录之间的逻辑关系,所以,散列主要是面向查找的存储结构。 散列技术适合于哪种类型的查找? 散列技术一般不适用于允许多个记录有同样关键码的情况。散列方法也不适用于范围查找,换言之,在散列表中,我们不可能找到最大或最小关键码的记录,也不可能找到在某一范围内的记录。 ⑴ 散列函数的设计。如何设计一个简单、均匀、存储利用率 高的散列函数。 ① 所选函数尽可能简单,以便提高转换速度。 ② 所选函数对关键字计算出的地址,应在Hash地址集中大致均 匀分布,以尽量减少冲突。 ⑵ 冲突的处理。如何采取合适的处理冲突方法来解决冲 突。 ① Hash函数。若Hash函数选择得当,就可使Hash地址尽可能均 匀地分布在Hash地址空间上,从而减少冲突的发生;否则,若Hash 函数选择不当,就可能使Hash地址集中于某些区域,从而加大冲突 的发生。 ② 处理冲突的方法。选择适当的Hash函数可以减少冲突,但不能 避免冲突,因此当冲突发生时,必须有较好的处理冲突的方法。 ③ Hash表的装填因子。 散列技术的关键问题 哈希函数的构造 直接定址法 数据分析法 平方取中法 折叠法 除留取余法 1. 直接定址法 散列函数是关键码的线性函数,即: H(key) = a ? key + b (a,b为常数) 例如:有一个解放后出生人口调查表,每个记录包含年份、人数等 数据项,其中年分为关键字,则哈希函数可取为: H(key)=key +(-1948) 这样就可以方便地存储和查找1948年后任意一年的记录。 …… 人数 …… 1970 …… 1949 年份 …… 22 …… 01 地址 练习:关键码集合为{10, 30, 50, 70, 80, 90},选取的散列函数为H(key)=key/10,则散列表为: 0 1 2 3 4 5 6 7 8 9 10 30 50 70 80 90 特点: 直接定址法所得地址集合与关键字集合大小相等,不 会发生冲突。 实际中能用这种哈希函数的情况很少。 2. 数据分析法 根据关键码在各个位上的分布情况,选取分布比较均匀的若干位组成散列地址。 例 有80个记录,关键字为8位十进制数,哈希地址为2位十进制数。 8 1 3 4 6 5 3 2 8 1 3 7 2 2 4 2 8 1 3 8 7 4 2 2 8 1 3 0 1 3 6 7 8 1 3 2 2 8 1 7 8 1 3 3 8 9 6 7 8 1 3

文档评论(0)

1亿VIP精品文档

相关文档