哈希游戏第23讲 哈希表ppt
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
§9.3 哈希表 什么是哈希表 哈希函数的构造方法 处理冲突的方法 哈希表的查找及分析 哈希函数示例:建立30个地区的人口统计表,用一维数组C(1:30)存放此表,每条记录以地区名作为关键字。哈希函数可以按如下方法设置 取关键字第一个字母在字母表中的序号作为关键字; 首字母和最后一个字母的序号之和,若大于表长则减去30; 每个汉字首字母的ASCII码之和的八进制形式,看作十进制数除以30取余数,若余数为零则加上30。 作业: 选取哈希函数H(k)=(3k)mod11。用开放定址法处理冲突,di=i ( (7k)mod10 + 1) (i=1,2,3,…)。试在0~10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功时的ASL。 注意:1. 发生冲突时,如何确定新的地址; 2. ASL的计算。 * * * 9.3.1 什么是哈希表 前面我们学习了各种数据结构上的查找方法,查找过程需要进行一系列的关键字比较,查找效率依赖于比较的次数; 最理想的查找:不经过任何比较,给定一个关键字,直接就找到对应数据元素的存储位置。 要实现这一点,就必须建立数据元素的存储位置和它的关键字之间的对应关系f,使每个关键字k和结构中一个惟一的存储位置f(k)对应。这个对应关系 f 称为哈希(Hash)函数,按这个思想建立的表为哈希表。 f3(key) f2(key) f1(key) SICHUAN HENAN SHANDONG SHANGHAI SHANXI HEBEI TIANJIN BEIJING key 2 20 8 19 19 19 8 19 9 4 17 28 28 26 22 3 4 26 2 13 23 17 16 16 从这个例子可见: 哈希(Hash)函数是一个映象,即将关键字的集合映射到某个地址集合上, 只要哈希函数值不超出表长允许范围即可; 由于哈希函数是一个压缩映象,对不同关键字可能得到同一哈希地址,即key1?key2,而f(key1)=f(key2) ,这种现象称冲突。具有相同函数值的关键字对该哈希函数来说称做同义词。 冲突只能尽可能减少,而不能完全避免。因此,在建造哈希表时不仅要设定一个好的哈希函数,还要设定一种处理冲突的方法。 综上所述,可如下描述哈希表: 根据设定的哈希函数 H(key) 和处理冲突的方法,将一组关键字映像到一个有限的连续的地址集 (区间) 上,并以关键字在地址集中的“像”作为相应记录在表中的存储位置,这种表便称为哈希表。 这一映像过程称为哈希造表或散列,所得存储位置称哈希地址或散列地址。 常用的构造哈希函数的方法: 若是非数字关键字,则需先对其进行数字化处理。 1. 直接定址法 3. 平方取中法 5. 除留余数法 4. 折叠法 6. 随机数法 2. 数字分析法 9.3.2 哈希函数的构造方法 哈希函数为关键字的线性函数 H(key) = key 或者 H(key) = a ? key + b 1. 直接定址法 例:统计解放后出生的人口数量,以年份作为关键字,选取哈希函数为Hash(key)=key-1948,则存储结构(哈希表)如下: 0 1 2 3 … 40 … … 1998 … 1951 1950 1949 优点:以关键字的线性函数值为哈希地址,不会产生冲突. 缺点:实际中能使用这种哈希函数的情况很少。 此方法仅适合于: 预先知道关键字每一位的数字分布状况。 2. 数字分析法 3 4 7 0 5 2 4 3 4 9 1 4 8 7 3 4 8 2 6 9 6 3 4 8 5 2 7 0 3 4 8 6 3 0 5 3 4 9 8 0 5 8 3 4 7 9 6 7 1 3 4 7 3 9 1 9 例:有一组(例如80个)关键字,其样式如下: 位号:① ② ③ ④ ⑤ ⑥ ⑦ 假设关键字集合中的每个关键字都是由 s 位数字组成 (u1, u2, …, us),分析关键字集中的全体, 从中提取分布均匀的若干位并利用它们的组合作为地址。 取关键字平方后的中间若干位作为哈希地址。 理由:因为一个数平方后的中间几位数与数的每一位都相关。 3. 平方取中法 例:某记录关键字为2589,其平方值为6702921,可以取中间的029为地址。 4. 折叠法 将关键字分割成位数相同的几部分(最后一部分位数可以短些),然后取这几部分的叠加和(舍去最高进位)作为哈希地址,这种方法称为折叠法。 移位叠加:将分割后每一部分的最低位对齐相加。 间界叠加:从一端向另一端沿分割界来回折叠,然后对齐相加。 例:图书编号ISBN是一个十位的十进制数,以它作为关键字构造哈希表,馆藏种类不到10000时,计算图书0-442-20586-4的哈希地址。 特点:使用于关键字位数很多,且每一位上数字分布大致均匀的情况。 5. 除留余数法 取关键字被某个不大于表长m的数p除后所得余数为哈希地址,即 H(key) = key MOD p 其中, p≤m (表长) 并且 p 应为素数或是含20 以下的质因子 特点: 最简单、最常用的构造哈希函数的方法。不仅可以直接对关键字取模,也可以在折叠、平方取中运算后取模; 对p的选择很重要,否则容易产生同义词。 给定一组关键字为: 12, 39, 18, 24, 33, 21,若取 p=9, 则他们对应的哈希函数值将为: 3, 3, 0, 6, 6, 3 例如: 为什么要对 p 加限制? 可见,若 p 中含质因子 3, 则所有含质因子 3 的关键字均映射到“3 的倍数”的地址上,从而增加了“冲突”的可能。 6. 随机数法 取关键字的随机函数值为哈希地址,即 H(key) = random(key) 其中,random 为随机函数 特点:当关键字长度不等时用此法构造哈希函数较恰当。 实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性尽可能地小。 “处理冲突” 的实际含义是: 为产生冲突的地址寻找另一个“空”的哈希地址。处理冲突的过程中可能得到一个地址序列Hi,i=1,2,…,k。通常用的处理冲突的方法有下列几种: 1.开放定址法 2.再哈希法 3.链地址法 4.建立一个公共溢出区 9.3.3 处理冲突的方法 Hi = (H(key)+ di) MOD m i=1, 2, …, m-1 其中,H(key)为哈希函数; m为哈希表表长; di为增量序列,有下列3种取法: 1. 开放定址法 1) 线性探测再散列 di = 1, 2, 3, …, m-1 2) 二次探测再散列 di = 12, -12, 22, -22 ,32,…, ±k2(k≤m/2) 3) 伪随机探测再散列 di =伪随机数序列 例如: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 } 设定哈希函数 H(key) = key MOD 11 ( 表长=11 ) 19 01 23 14 55 68 19 01 23 14 68 若采用线性探测再散列处理冲突 若采用二次探测再散列处理冲突 11 82 36 55 11 82 36 1 1 2 1 3 6 2 5 1 Hi=RHi(key) i=1, 2, …,k RHi均是不同的哈希函数,当产生冲突时就计算另一个哈希函数,直到冲突不再发生。 优点:不易产生聚集; 缺点:增加了计算时间。 2. 再哈希法 0 1 2 3 4 5 6 ? 11 ? 19 82 68 ? 55 ? 14 36 ? 01 ? 23 ? ASL=(6×1+2×2+3)/9=13/9 例:已知一组关键字{19,01,23,14,55,68,11, 82,36 },按哈希函数H(key)=key MOD 7和链地址法处理冲突构造哈希表。 3.链地址法 将所有哈希地址相同的记录存储在同一链表中。 设立一个指针型向量,每个分量的初始状态都为空指针;凡地址为i的记录都插入到头指针为第i个分量的链表中。 思路:除设立哈希基本表外,另设立一个溢出表。 所有关键字和基本表中关键字为同义词的记录,不管它们由哈希函数得到的地址是什么,一旦发生冲突,都填入溢出表。 4. 建立一个公共溢出区 哈希表查找过程:和造表过程基本一致。 对于给定值 K, 根据造表时设定的哈希函数计算哈希地址 i = H(K); 若表中此位置没有记录,则查找不成功; 否则比较关键字,若和给定K相等则查找成功;否则根据造表时设定的处理冲突的方法找“下一地址”,直至哈希表某个位置为空(查找不成功)或表中所填记录关键字等于给定值时为止(查找成功)。 9.3.4 哈希表的查找及其分析 1) 选用的哈希函数; 2) 选用的处理冲突的方法; 3) 哈希表饱和的程度,装载因子 α=n/m 值的大小 (n—表中填入的记录数,m—HASH表长度) 决定哈希表查找的ASL的因素: 哈希表查找的分析: 从查找过程得知,虽然在关键字和存储位置之间建立了直接映像,但查找过程仍然是一个比较的过程。因此仍需要用ASL度量HASH表的查找效率。 线性探测再散列 链地址法 随机探测再散列、二次探测再散列、再哈希法 可以证明:查找成功时的平均查找长度有下列结果: 从以上结果可见, 哈希表的平均查找长度是?的函数,而不是n的函数。 这说明,用哈希表构造查找表时,可以选择一个适当的装填因子?,使得平均查找长度限定在某个范围内。 —— 这是哈希表特有的性质。
2、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
3、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
4、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
安全生产法律法规考试(四十八)(带答案A3带密封线紧凑页面下载打印就用).doc
电梯安全管理员考试(四十八)(带答案A3带密封线紧凑页面下载打印就用).doc
2023-2024学年广东省佛山市南海区桂城街道四年级(下)期末语文试卷.pdf
第18课《我的白鸽》教学设计 2024—2025学年统编版语文七年级上册.docx
碳酸根 碳酸氢根 氢氧根 方法验证DZT0064.49-93.docx
原创力文档创建于2008年,本站为文档C2C交易模式,即用户上传的文档直接分享给其他用户(可下载、阅读),本站只是中间服务平台,本站所有文档下载所得的收益归上传人所有。原创力文档是网络服务平台方,若您的权利被侵害,请发链接和相关诉求至 电线) ,上传者