精华内容
下载资源
问答
  • 二次探测法出现负数怎么办
    2021-11-29 23:33:48

    负数加m
    m为哈希表地址区间长度

    更多相关内容
  • 二次探测法

    万次阅读 多人点赞 2020-05-04 16:02:36
    存在关键码{43,7,29,22,16,92,44,8,19},采用二次探测法处理冲突,建立的hash表为( ) 二次探测法:采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),则哈希函数变为Hash(key) = (Hash(key)...

    设哈希表长为11,哈希函数为Hash (key)=key%11。存在关键码{43,7,29,22,16,92,44,8,19},采用二次探测法处理冲突,建立的hash表为( )
    二次探测法:采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),则哈希函数变为Hash(key) = (Hash(key) + d) % 11,其中d = 1^2, -1^2, 2^2, -2^2, 3^2,……,则开始计算。

    对于43,代入公式为Hash(43) = 43 % 11 = 10, 则地址为10;

    对于7,代入公式为Hash(7) = 7 % 11 = 7,则地址为7;

    对于29,代入公式为Hash(29) = 29 % 11 = 7, 与7冲突,则采用二次探测进行消除冲突, 继续(7 + 1) % 11 = 8,没有冲突,则地址为8;

    对于22,代入公式Hash(22) = 22 % 11 = 0, 则地址为0;

    对于16,代入公式Hash(16) = 16 % 11 = 5, 则地址为5;

    对于92,代入公式Hash(92) = 92 % 11 = 4,则地址为4;

    对于44,代入公式Hash(44) = 44 % 11 = 0, 与22的地址冲突,则继续(0 + 1) % 11 = 1,没有冲突,则地址为1;

    对于8, 代入公式Hash(8) = 8 % 11 = 8, 与29有冲突,则继续(8 + 1) % 11 = 9, 没有冲突,则地址为9;

    对于19,代入公式Hash(19) = 19 % 11 = 8. 与 29有冲突,则继续(8 + 1) * 11 = 9, 与8有冲突,继续(8 - 1) % 11 = 7, 与7有冲突,则继续(8 + 4) % 11 = 1, 与44有冲突,则继续(8 - 4) % 11 = 4, 与92有冲突,则继续(8 + 9) % 11 = 6, 没有冲突,则地址为6.

    所以最后得到的Hash表为下图所示:
    在这里插入图片描述

    展开全文
  • 线性探测法 将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中 (7) Key 7 8 30 11 18 9 14 H(Key) 0 3 6 5 5 5 6 冲突处理:(位置被占有继续往下找) ...二次探测法 f(key) = (f(key)+di

    线性探测法

    将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中 (7)

    Key78301118914
    H(Key)0365556

    冲突处理:(位置被占有继续往下找)

    地址0123456789
    关键字71481130189
    • 线性探测法

    f(key) = (f(key)+di) MOD m (di=1,2,3,…,m-1)

    • 二次探测法

    f(key) = (f(key)+di) MOD m (di = 1^2, -1^2, 2^2, -2^2,……, q^2, -q^2, q <= m/2)

    展开全文
  • 构造哈希表以及二次探测法

    千次阅读 2018-09-16 19:53:39
    构造哈希表(散列表)以及二次探测法 今天做笔试题时,遇到一道构造哈希表的题,hash函数是 k%11 ,然后一个数组记不清了,然后就是问二次探测法进行,问下面那个是正确,懵逼啊,没做过,不知道,乱选直接下...

    今天做笔试题时,遇到一道构造哈希表的题,hash函数是 k%11 ,然后一个数组记不清了,然后就是问二次探测法进行,问下面那个是正确,懵逼啊,没做过,不知道,乱选直接下一题,于是有这个博客,赶紧学习一波。

    网上查询了一下。


    构造哈希表的几种方法

    常用方法是直接定址法除留余数法

    • 直接定址法(取关键字的某个线性函数为哈希地址)

    类似于这样的式子

    f(key) = a × key + b

    • 除留余数法(取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址)

    对于散列表长为m的散列函数公式为:

    f( key ) = key mod p ( p ≤ m )

    mod是取模(求余数)的意思。事实上,这方法不仅可以对关键字直接取模,也可在折叠、平方取中后再取模。

    • 平方取中法

    • 折叠法

    • 随机数法

    • 数学分析法


    哈希冲突(碰撞)以及处理

    哈希冲突:既然有哈希函数Hash(key),在有限的空间里,肯定会产生相同的的值(哈希地址),我们称这种情况为哈希冲突(碰撞)。任意的散列函数都不能避免产生冲突。

    1. 开发定址法

    所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。

    • 线性探测法

    fi(key) = (f(key)+di) MOD m (di=1,2,3,......,m-1)

    用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到找到给定的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探测到开放的地址则表明表中无待查的关键字,即查找失败。

    ep:我们的关键字集合为{12,67,56,16,25,37,22,29,15,47,48,34},表长为12。 我们用散列函数f(key) = key mod 12。

    当计算前S个数{12,67,56,16,25}时,都是没有冲突的散列地址,直接存入:

    这里写图片描述

    计算key = 37时,发现f(37) = 1,此时就与25所在的位置冲突。

    于是我们应用上面的公式f(37) = (f(37)+1) mod 12 = 2。于是将37存入为2的下标位置。

    这里写图片描述

    接下来22,29,15,47都没有冲突,正常的存入:

    这里写图片描述

    到了 key=48,我们计算得到f(48) = 0,与12所在的0位置冲突了,不要紧,我们f(48) = (f(48)+1) mod 12 = 1,此时又与25所在的位置冲突。于是f(48) = (f(48)+2) mod 12=2,还是冲突……一直到 f(48) = (f(48)+6) mod 12 = 6时,存入该位置:

    这里写图片描述

    我们把这种解决冲突的开放定址法称为线性探测法。

    • 二次探测法

    考虑深一步,如果发生这样的情况,当最后一个key=34,f(key)=10,与22所在的位置冲突,可是22后面没有空位置了,反而它的前面有一个空位置,尽管可以 不断地求余数后得到结果,但效率很差。

    因此我们可以改进di = 12, -12, 22, -22,……, q2, -q2 (q <= m/2),这样就等于是可以双向寻找到可能的空位置。

    对于34来说,我 们取di即可找到空位置了。另外增加平方运算的目的是为了不让关键字都聚集在 某一块区域。我们称这种方法为二次探测法。

    f(key) = (f(key)+di) MOD m (di = 1^2, -1^2, 2^2, -2^2,……, q^2, -q^2, q <= m/2)

    注:1^2 表示是 1的平方。

    2. 链地址法

    前面我们谈到了散列冲突处理的开放定址法,它的思路就是一旦发生了冲突,就去寻找下一个空的散列地址。那么,有冲突就非要换地方呢,我们直接就在原地处理行不行呢?

    答案是可以的,就是链地址法,就好比Java里的HashMap的数据结构一样。

    这里写图片描述

    关于HashMap源码分析 ——> https://blog.csdn.net/Stu_zkl/article/details/82714325
    好了,就写到这了。

    展开全文
  • 二次探测法建立hash表

    千次阅读 2019-09-14 16:07:43
    存在关键码{43,7,29,22,16,92,44,8,19},采用二次探测法处理冲突,建立hash表。 由于哈希表长为11,则序号为0~10. Hash(43)=43%11=10, 43地址为10 Hash(7)=7%11=7, 7地址为7 Hash(29)=29%11=8, 29地址为8 ...
  • 二次探测法就是解决这个问题的,二次探测法的解决冲突的方案是 f i ( k e y ) = ( f i − 1 ( k e y ) + d i )   m o d   m ( d i = 1 2 , − 1 2 , 2 2 , − 2 2 . . q 2 , − q 2 , q ≤ m / 2 ) f_i(key)=(f_...
  • //二次探测法 index = (index + iCount*iCount) % Hash->capacity; iCount++; } Hash->arr[index].key = key; Hash->arr[index].state = EXISTED; return 1; } //扩容操作 //如果负载因子超标,则...
  • 哈希算法中的二次探测法(正向)

    千次阅读 2020-05-18 09:36:45
    假设数组hashTable的长度是mSize,用平方探测法插入数字num,每次的位置pos = (num + i * i) % mSize,i的范围是[0, mSize)。 bool flag = false; //未插入 for(int i = 0; i < mSize; i++){ int pos = (num + i...
  • 构造哈希表之二次探测法

    万次阅读 多人点赞 2016-06-08 01:19:00
    HashTable-散列表/哈希表 是根据关键字(key)而直接访问在内存存储位置的数据结构。 它通过一个关键值的函数将所需的数据映射到...2.除留余数(取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址) 3.
  • //偶数冲突向后查找 NewPos = CurrentPos - ( CrashNum / 2 ) * ( CrashNum / 2 ) ; while ( NewPos < 0 ) //等于也不行 { NewPos = NewPos + h - > TableSize...
  • 这是数据结构课程作业,用二次探测再散列解决冲突建立哈希表并查找 从键盘读入 待查找 的权重数值,以除留余数为哈希函数,二次探测再散列解决冲突建立哈希表,基于哈希算法从数组中查找相应的记录,计算相应...
  • 二次探测散列

    千次阅读 2020-12-28 21:36:29
    展开全部二次再散e68a84e8a2ad3231313335323631343130323136353331333431366365列是指第一次散列产生哈希地址冲突,为了解决冲突,采用另外的散列函数或者对冲突结果进行处理的方法。散列函数的选择有两条标准:...
  • 前面的文章分析了开地址法的其中一种:线性探测再散列,这篇文章来讲开地址法的第二种:二次探测再散列(二)、二次探测再散列为改善“堆积”问题,减少为完成搜索所需的平均探查次数,可使用二次探测法。通过某一个...
  • cpp代码-二次探测再散列哈希表
  • 二次探测散列表

    2014-08-06 10:01:25
    数据结构中用c++语言二次探测散列表源代码
  • 哈希表之线性探测和二次探测

    千次阅读 2020-02-29 17:58:35
    哈希表又称散列表。 哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间...开放寻址:Hi=(H(key) + di) MOD m, i=1,2,…, k(k<...
  • HashTable的简单介绍HashTable是根据关键字直接访问在内存存储的数据结构。 HashTable叫哈希表或者散列表。 它通过一个关键值的函数将所需的数据...给定一字符串“abckhdgubhkacdggk”找出第一只出现一的字符。
  • 虽然上文有提到怎么解释的开放地址处理hash冲突,但是当时只是给了个...什么叫平方探测再散列(二次探测再散列); 老师的ppt吧。 给个原始数据如上图。 下面详细解析。 上面的是线性探测再散列。这个简单。
  • 哈希表-开放地址二次探测以及在哈希法)
  • 输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。 输入 测试次数t 每组测试数据格式如下: 哈希表长m、关键字个数n n个关键字 查找次数k k个待查关键字 输出 对每组测试...
  • 二次探测发解决闭散列表中的冲突问题,可供参考
  • 一级目录 级目录 三级目录
  • DS哈希查找—二次探测再散列

    万次阅读 多人点赞 2018-12-04 17:23:03
    输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。 输入 测试次数t 每组测试数据格式如下: 哈希表长m、关键字个数n n个关键字 查找次数k k个待查关键字 输出 对...
  • 为改善“堆积”问题,减少为完成搜索所需的平均探查次数,可使用二次探测法。 通过某一个散列函数对表项的关键码 x 进行计算,得到桶号,它是一个非负整数。  若设表的长度为TableSize = 23,则在线性探测再...
  • Hi=(H(key)+di) MOD m i=1,2,...,k(k 如果di值可能为1,2的平方,3的平方,...,称... * 哈希表的开放地址中的二次探测  */ package com.eleven; public class HashDoubleApp{  public static void main(Stri
  • 平方探测法(quadratic probing)

    万次阅读 2019-02-24 15:43:50
    平方探测法(Quadratic Probing) 二次探测 平方探测法:以增量序列1^2 -1^2, 2^2, -2^2, …… , q^2, -q^2,且 q&lt;= [ TableSize/2 ] 循环试探下一个存储地址。 //其中范围中的q&lt;=TableSize/2,具体是...
  • 平方探测就是冲突函数为二次函数的探测方法。流行的选择函数是F(i)=i²,例如插入89,18,49,58,69可以由下图看出,   空表 插入89 插入18 插入49 插入58 插入69 0       ...
  • 用于解决冲突的两种算法 线性探测再散列 平方探测再散列(二次探测再散列)参考这个blog,写的很好。 http://blog.csdn.net/qq_27093465/article/details/52348366

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,887
精华内容 9,954
关键字:

二次探测法

友情链接: PowerShadow.zip