发布时间:2025-01-26 19:54:37 点击量:
HASH GAME - Online Skill Game GET 300
免费在线;在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法;对应关系—函数—哈希函数;哈希查找 基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法 定义 哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系叫~ 哈希函数是一种映射,是从关键字空间到存储地址空间的一种映射 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字;哈希表——应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫~ 哈希查找——又叫散列查找,利用哈希函数进行查找的过程叫~;从例子可见: 哈希函数只是一种映射,所以哈希函数的设定很灵活,只要使任何关键字的哈希函数值都落在表长允许的范围之内即可 冲突:key1?key2,但H(key1)=H(key2)的现象叫~ 同义词:具有相同函数值的两个关键字,叫该哈希函数的~ 哈希函数通常是一种压缩映象,所以冲突不可避免,只能尽量减少;同时,冲突发生后,应该有处理冲突的方法;;例如:有一个解放后出生人口调查表,每个记录包含年份、人数等数据项,其中年分为关键字,则哈希函数可取为: H(key)=key +(-1948) 这样就可以方便地存储和查找1948年后任一年的记录。 ; 构造:对关键字进行分析,取关键字的若干位或其组合作哈希地址 适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况;6.3.2 哈希函数 3. 平方取中法 取关键字平方后的中间几位作为哈希地址,即哈希函数为: H(key)=“key2的中间几位”, 其中,所取的位数由哈希表的大小确定;12;折叠法 构造:将关键字分割成位数相同的几部分,然后取这几部分的叠加和(舍去进位)做哈希地址 种类 移位叠加:将分割后的几部分低位对齐相加 间界叠加:从一端沿分割界来回折送,然后对齐相加 适于关键字位数很多,且每一位上数字分布大致均匀情况;除留余数法 构造:取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key MOD p,p?m 特点 简单、常用,可与上述几种方法结合使用 p的选取很重要;p选的不好,容易产生同义词 随机数法 构造:取关键字的随机函数值作哈希地址,即H(key)=random(key) 适于关键字长度不等的情况 选取哈希函数,考虑以下因素: 计算哈希函数所需时间 关键字长度 哈希表长度(哈希地址范围) 关键字分布情况 记录的查找频率;6.3 哈希表的查找;存在冲突检测与处理的哈希查找流程图;处理冲突的方法 开放定址法 方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MOD m,i=1,2,……k(k?m-1) 其中:H(key)——哈希函数 m——哈希表表长 di——增量序列 分类 线 平方探测再散列:di=12,-12,22,-22,32,……±k2(k?m/2) 伪随机探测再散列:di=伪随机数序列;18;二次探测法;20;21;再哈希法 方法:构造若干个哈希函数,当发生冲突时,计算下一个哈希地址,即:Hi=Rhi(key) i=1,2,……k 其中:Rhi——不同的哈希函数 特点:计算时间增加 链地址法 方法:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针;23;4. 公共溢出区法 假设某哈希函数的值域[0, m-1], 向量HashTable[0, m-1]为基本表,每个分量存放一个记录,另设一个向量OverTable[0, v]为溢出表。将与基本表中的关键字发生冲突的所有记录都填入溢出表中。 如一组关键字序列为{19,14,23,01,68,20,84,27,55,11,10,79},哈希函数为H(key)= key mod 13,采用公共溢出区法得到的结果为: ;例 已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79) 哈希函数为:H(key)=key MOD 13, 哈希表长为m=16, 设每个记录的查找概率相等;26;哈希查找算法实现 用线性探测再散列法处理冲突 实现 查找过程:同前 删除:只能作标记,不能真正删除 插入:遇到空位置或有删除标记的位置就可以插入 算法描述: 用外链表处理冲突算法;哈希查找分析 哈希查找过程仍是一个给定值与关键字进行比较的过程 评价哈希查找效率仍要用ASL 哈希查找过程与给定值进行比较的关键字的个数取决于: 哈希函数 处理冲突的方法 哈希表的填满因子?=表中填入的记录数/哈希表长度;3. 查找性能分析 ;6.3.4 哈希表查找与性能分析 查找性能分析 ;31;32;33;34;练习