散列表平均查找长度

这篇具有很好参考价值的文章主要介绍了散列表平均查找长度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

散列表(Hash Table)是一种用于存储和查找键值对的数据结构,也被称为哈希表、散列映射或字典。它通过将键转换成一个索引来加快查找速度,进而提高了数据处理的效率。

装填因子(Load Factor)是指散列表中已被占用桶(包含一个或多个键值对)的数量与散列表总桶数的比例。它是衡量散列表负载情况的重要指标,通常用于评估散列表的性能和可扩展性。
当装填因子接近 1 时,说明散列表已经非常拥挤,在这种情况下,如果再插入新的键值对,就可能导致碰撞概率增加,并且查询效率也会降低。因此,需要及时采取一些措施,如扩容,以保持散列表的高效性。
通常建议在装填因子达到某个阈值时进行扩容,具体阈值的选择与散列表大小、散列算法等因素有关,一般建议取值为 0.7 到 0.8 之间。
在散列表中,装填因子

的计算方式为:已占用桶数 / 总桶数。

平均查找长度(Average Search Length,ASL)是指在散列表中查找一个键的平均比较次数,也可以称为平均探测长度。它是衡量散列表性能的重要指标之一。
在散列表中查找一个键时,需要经历两个步骤:首先根据散列函数将该键映射到某个桶中,然后在该桶中对键进行比较,直到找到目标键或者确定目标键不存在。
因此,如果一个散列表有 n 个键值对,并且在查找目标键时需要比较 k 次才能找到或者确定不存在,则平均查找长度为:ASL = (k1 + k2 + ... + ki) / n,其中 ki 表示查找第 i 个键时需要的比较次数。

在散列表中,查找成功的平均查找长度(Average Search Length of Successful Search,ASL-S)是指在散列表中查找某个已存在键的平均比较次数。它通常用于评估散列表查找性能的好坏。
假设散列表中有 n 个键值对,在查找某个已存在键时需要比较 k 次才找到,则查找成功的平均查找长度为:
ASL-S = (k1 + k2 + ... + ki) / n
其中 ki 表示查找第 i 个已存在的键时需要的比较次数。
可以看出,查找成功的平均查找长度越小,说明散列表在查找已存在键时效率越高。因此,尽可能地减少散列冲突和提高散列表的装填因子等方法都可以有效地降低查找成功的平均查找长度,提高散列表查找性能。

在散列表中,查找失败的平均查找长度

常考Average Search Length of Unsuccessful Search,ASL-U)是指在散列表中查找某个不存在键的平均比较次数。它也是评估散列表性能的一个重要参数。
假设散列表中有 n 个键值对,在查找某个不存在键时需要比较 k 次才确定不存在,则查找失败的平均查找长度为:
ASL-U = (k1 + k2 + ... + ki) / n
其中 ki 表示查找第 i 个不存在的键时需要的比较次数。
可以看出,查找失败的平均查找长度越小,说明在散列表中查找不存在键的效率越高。常见的提高散列表查找效率的方法包括:合理设计散列函数、使用开放地址法解决冲突、设置合适的装填因子等。

常考的处理冲突的平均查找长度

散列表查找失败的平均查找长度,散列表,哈希算法,数据结构

散列表查找失败的平均查找长度,散列表,哈希算法,数据结构

 如上图所示,这是一道通过线性探测法解决冲突求查找失败的平均查找长度问题。

给定一个所要查找的键值k,若开始通过哈希函数定位到下标为0的位置,将98与k比较,不相等(比较一次)说明这个位置查找失败,继续下一个紧邻的下标为1的位置......直到比较到下标为8的位置为空,至此查找失败,这种情况一共比较了9次;若开始通过哈希函数定位到下标为1的位置,将22与k比较,不相等(比较一次)说明这个位置查找失败,继续下一个紧邻的下标为2的位置......直到比较到下标为8的位置为空,至此查找失败,这种情况一共比较了8次;若开始通过哈希函数定位到下标为2的位置,将30与k比较,不相等(比较一次)说明这个位置查找失败,继续下一个紧邻的下标为3的位置......直到比较到下标为8的位置为空,至此查找失败,这种情况一共比较了7次......若开始通过哈希函数定位到下标为6的位置,将6与k比较,不相等(比较一次)说明这个位置查找失败,继续下一个紧邻的下标为7的位置......直到比较到下标为8的位置为空,至此查找失败,这种情况一共比较了3次,综上所述,查找失败的平均查找长度=(9+8+7+6+5+4+3)/7=6。(分母是7是因为通过对7取余,只能定位到下标0到6的位置。

散列表查找失败的平均查找长度,散列表,哈希算法,数据结构

 如上图所示,这是一道通过线性探测法解决冲突求查找成功的平均查找长度问题。

查找成功的平均查找长度=查找每一个存在的关键字比较的次数/关键字总个数。因为22%7=1(比较一次,所需位置是空的,将22放入这个位置),43%7=1(发现下标为1的位置有22,根据线性探测法放到下标为2的位置,比较了两次),15%7=1(发现下标为1和2的位置均有元素,于是放到下标为3的位置,比较了三次)。分母是3的原因是每个元素被成功查找的概率都是1/3。也就是说成功查找22只需要通过哈希函数定位到下标为1的位置,和22比较一次发现相等即成功,成功查找43通过哈希函数也定位到下标为1的位置,比较一次不相等,继续向后寻找,和43比较发现相等即查找成功,比较了两次。则成功查找15比较了3次。所以查找成功的平均查找长度=(1+2+3)/3=2.

可参考王道相关视频

散列表查找失败的平均查找长度,散列表,哈希算法,数据结构 

散列表查找失败的平均查找长度,散列表,哈希算法,数据结构 

 散列表查找失败的平均查找长度,散列表,哈希算法,数据结构

 这是一道通过链接地址法解决冲突求查找平均查找长度问题。

查找成功的平均查找长度=(1*4+2*3+3*1)/8=13/8,查找33,1,13,38只需要通过哈希函数定位下标比较一次即成功(故1*4),查找22,12,27均需要比较两次才成功(故2*3),查找34需要比较三次才能成功。

查找失败的平均查找长度=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11,通过哈希函数定位到下标为0的位置,与33比较,与22比较均不是关键值,再比较一次发现22后面为空,至此查找失败,一共比较了3次;通过哈希函数定位到下标为1的位置,与1比较,与12,与34比较均不是关键值,再比较一次发现34后面为空,至此查找失败,一共比较了4次;通过哈希函数定位到下标为2的位置,与13比较不是关键值,再比较一次发现13后面为空,至此查找失败,一共比较了2次;通过哈希函数定位到下标为3的位置,比较一次发现为空,至此查找失败,一共比较了1次,同理依次类推即得,分母11为所能定位到的所有的初始地址0到10。

 文章来源地址https://www.toymoban.com/news/detail-677994.html


 

 

到了这里,关于散列表平均查找长度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

    一种很好用,很高效,又一学就会的数据结构,你确定不看看? 莫慌,每个概念都很好理解。 哈希表( Hash Table ),也称为 散列表 ,是一种数据结构, 用于存储键值对(key-value pairs) 。 键值对是一种数据结构,用于将键(key)与对应的值(value)相关联。在键值对中,键

    2024年02月09日
    浏览(63)
  • 哈希表的查找成功的长度和查找不成功的长度(详细讲解)

    例题: 采用哈希函数H(k)=3*k mod 13并用线性探测开放地址法处理冲突,在数列地址空间 0..12 中对序列22,41,53,46,30,13,1,67,51 (1)构造哈希表(画示意图); (2)装填因子;等概率下 (3)成功的和不成功的平均查找长度 答:(1) 散列地址 0 1 2 3 4 5 6 7 8 9 10 11 12 关键

    2024年02月12日
    浏览(35)
  • 数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

    目录 开放地址法(Open Addressing) 线性探测(Linear Probing) 散列表查找性能分析 平方探测(Quadratic Probing)  定理 平方探测法的查找与插入 双散列探测法(Double Hashing)  再散列(Rehashing) 分离链接法(Separate Chaining) 平均查找次数 分离链接法的散列表实现 常用处理冲突的

    2024年02月08日
    浏览(52)
  • 查找-散列表(哈希表)详解篇

    总结 性能总结

    2024年02月14日
    浏览(27)
  • 哈希表-散列表数据结构

    哈希表也叫散列表,哈希表是根据关键码值(key value)来直接访问的一种数据结构,也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度,这种映射关系称之为哈希函数或者散列函数,存放记录的数组称之为哈希表。 哈希表采用的是一种转换思

    2024年01月21日
    浏览(43)
  • 数据结构——单链表的查找、求单链表长度、单链表的创建

    一、单链表的查找 1.按位查找 ==GetElem(L, i): == 按位查找操作,获取表 L 中第 i 个位置的元素的值 ;   平均时间复杂度O(n) 2.按值查找 ==LocateElem(L, e)==: 按值查找操作,在表 L 中查找具有给定值的元素 ; 二、求单链表的长度 == Length(LinkList L)== :计算单链表中数据结点(

    2024年01月21日
    浏览(43)
  • 【数据结构(C++版)】哈希表(散列表)

    目录   1. 散列表的概念 2. 散列函数的构造方法 2.1 直接定址法 2.2 除留余数法 2.3 数字分析法 2.4 平方取中法 3. 处理冲突的方法 3.1 开放定址法 3.1.1 线性探测法 3.1.2 平方探测法 3.1.3 双散列法 3.1.4 伪随机序列法 3.2 拉链法(链接法) 4. 散列查找及性能分析 5. 哈希的应用 5.1 位

    2024年02月15日
    浏览(38)
  • 【Python查找算法】二分查找、线性查找、哈希查找

    目录 1 二分查找算法  2 线性查找算法 3 哈希查找算法         二分查找(Binary Search)是一种用于在有序数据集合中查找特定元素的高效算法。它的工作原理基于将数据集合分成两半,然后逐步缩小搜索范围,直到找到目标元素或确定目标元素不存在。 以下是二分查找的

    2024年02月08日
    浏览(38)
  • 【算法系列 | 9】深入解析查找算法之—哈希表查找

    心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第9讲,讲一下查找算法的哈希表查找 查找算法是计算机科学中的一类

    2024年02月08日
    浏览(39)
  • 数据结构—散列表的查找

    7.4散列表的查找 7.4.1散列表的基本概念 基本思想:记录的存储位置域之间存在对应关系 ​ 对应关系——hash函数 ​ Loc(i)= H(keyi) 如何查找 : 根据散列函数 H(key) = k 查找key=9,则访问H(4)= 18号地址,若内容为18则成功; 若查不到,则返回一个特殊值,如空指针或

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包