散列表的查找 た 入场券 2023-02-28 05:24 134阅读 0赞 对给定的关键字key,用一个函数H(key)计算出元素地址,由此而得散列表(Hash表,哈希表),其中函数H(key)称为散列函数 此函数值称为散列地址。 然而,在实际应用中,会出现这样的情况: k1≠k2,但H(k1)=H(k2) , 称这种现象为冲突现象,k1,k2为同义词。 针对冲突——如何解决冲突呢? 构造好的散列函数,以免冲突 由于冲突不可避免,因此,确切地说是减少冲突 & 妥善处理冲突 -------------------- # 构造散列函数的基本方法 # **直接定址法**:H(k)= k 或者 H(k)= ak+b (a,b为任意正整数) **除留余数法**:H(k)= k % p 其中p≤m,m为数组规模的最大质数。 **平方取中法:** 例:325在平方后取105625中间两位,即56作为它的散列地址。 ![20200720143250937.png][] **折叠法:** 如 身份证号码:340104198805061532 先进行分组:340 104 198 805 061 532 ![20200720143424479.png][] **数值分析法** ![20200720143452263.png][] -------------------- 处理冲突: 开放地址法 Hi(k)=(H(k) + di ) % m,i=1,2,…,q q<=m 线性探测法:Hi(k)=(H(k)+i)%m,m为表的规模最大质数 二次探测法 Hi(k) = ( H(k) + i2 ) % m 伪随机数 拉链法 再散列法 →H(k)→H1(k)→H2(k)→ …… →Hi(k) -------------------- 例:设散列表地址范围为0—9,散列函数H(K)=K%7,采用**线性探测法**处理冲突,将下列数据依次插入下表中: 23,34,56,12,8,14,35,25 ![20200720144007266.png][] ASL=(1+1+1+4+5+1+1+4)/8=18/8 用此法来构造散列表可能会造成数据***堆积*****。** 装填因子——元素占空间的比例,一般建议在0.7-0.85之间 -------------------- 拉链法(链表法)——将同义词构成一个链表 **例**:散列函数H(K)=K%7,采用拉链法将下列数据依次插入下表中 23,34,56,12,8,14,35,25 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RyaWZ0ZXJfR2FsYXh5_size_16_color_FFFFFF_t_70][] ASL=(1\*6+2\*1+3\*1)/8 =11/8 -------------------- 在散列表中查找元素的过程和构造的过程基本一致: 对给定关键字k,由散列函数H计算出该元素的地址H(k)。 若表中该位置为空,则查找失败。 否则,比较关键字,若相等,查找成功,否则根据构造表时所采用的处理方法找下一个地址,直至找到关键字等于k的元素(成功)或者找到空位置(失败)为止。 一般在用链地址法构造的表中进行查找,比在用线性探测法构造的表中进行查找,查找长度要小。 [20200720143250937.png]: /images/20230209/6a3834ee5c7c47278cd9d84eb269ebad.png [20200720143424479.png]: /images/20230209/d9594677237b443982620891bb3c64be.png [20200720143452263.png]: /images/20230209/53de95d9731d4b3581d1b71be6b3e527.png [20200720144007266.png]: /images/20230209/b20c30652a514306a97a60006afb6626.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RyaWZ0ZXJfR2FsYXh5_size_16_color_FFFFFF_t_70]: /images/20230209/6f3ea31d9caa4815ac10fe3b589523a1.png
相关 查找-散列表(哈希表)详解篇 散列表 散列表(Hash Table)是一种基于散列函数(Hash Function)的数据结构,用 于实现快速的数据查找。散列函数将键(Key)映射到存 向右看齐/ 2023年10月14日 10:46/ 0 赞/ 86 阅读
相关 散列表查找 定义 通过散列函数寻找某个关键字所存在的位置,利用散列技术存储在一块连续的存储空间中,这块连续的存储空间称为散列表,对应的存储位置成为散列地址。 ![在这里插入图片描述 柔情只为你懂/ 2023年07月09日 14:26/ 0 赞/ 16 阅读
相关 散列表的查找 对给定的关键字key,用一个函数H(key)计算出元素地址,由此而得散列表(Hash表,哈希表),其中函数H(key)称为散列函数 此函数值称为散列地址。 然而,在实际应用 た 入场券/ 2023年02月28日 05:24/ 0 赞/ 135 阅读
相关 散列表的查找 为什么使用散列表?散列表在查找是有优势的,举例: 1.顺序表查找:一个一个遍历查找 2.有序表:可以通过二分法查找 ....... 那散列表的查找通过一个f(value 迈不过友情╰/ 2022年08月07日 09:41/ 0 赞/ 189 阅读
相关 哈希表(散列表)查找的详解 前言 博客编写人:Willam 博客编写时间:2017/3/29 博主邮箱:2930526477@qq.com(有志同道合之人,可以加qq交流交流编程 怼烎@/ 2022年06月18日 02:42/ 0 赞/ 351 阅读
相关 散列表 1 定义 散列技术是在记录的存储位置和它的关键位置之间建立一个确定的对应关系`f`,使得每个关键字`key`对应一个存储位置`f(key)`,即: 存储位置 = 不念不忘少年蓝@/ 2022年04月04日 06:25/ 0 赞/ 268 阅读
相关 散列表 散列方法不同于顺序查找、二分查找、二叉排序树及B-树上的查找。它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O 一时失言乱红尘/ 2022年03月22日 17:06/ 0 赞/ 440 阅读
相关 散列表 直接寻址表 假设某个动态集合中的每个元素取自于U=\{0,1,2,…,m-1\},这里的m不是一个很大的数,假设没有两个元素具有相同的关键字。我们用一个数组(直接寻址表), 淩亂°似流年/ 2021年09月26日 14:26/ 0 赞/ 426 阅读
还没有评论,来说两句吧...