哈希表的查找成功的长度和查找不成功的长度(详细讲解)

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

线性探测法:

例题:

采用哈希函数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
关键字 13 22 53 1 41 67 46 51 30
比较次数 1 1 1 2 1 2 1 1 1

(2)装填因子:a=n/m 其中n 为关键字个数,m为表长

a=9/13

(3)查找成功的平均查找长度:每个关键字的比较次数之和/关键字的个数(即表中元素的个数)

ASL=(7+2*2)/9=11/9

查找不成功的平均查找长度:比如:查找26,即一开始找到散列地址为0,然后对比关键字后不相等,按照线性探测法向后查找,直到有一个散列地址的关键字为空,则确认查找失败;

查找不成功的平均查找长度就是表中的每个散列地址的比较次数/表长

注意:在最后的散列地址中,如果没有空,就比如该题中的散列地址12,还要往后找,则到了0-->1-->2,总共比较了4次。

1.散列地址为0,从0-->1-->2,比较了3次

2.散列地址为1,从1-->2,比较了2次

3.散列地址为2,关键字为空,比较了1次

4.散列地址为3,从3-->4-->5,比较了3次

5.散列地址为4,从4-->5,比较了2次

6.散列地址为5,关键字为空,比较了1次

7.散列地址为6,从6-->7-->8-->9,比较了4次

8.散列地址为7,从7-->8-->9,比较了3次

9.散列地址为8,从8->9,比较了2次

10.散列地址为9,关键字为空,比较了1次

11.散列地址为10,从10-->11,比较了2次

12.散列地址为11,关键字为空,比较了1次

13.散列地址为12,从12-->0-->1-->2,比较了4次

所以ASL=(3+2+1+3+2+1+4+3+2+1+2+1+4)/13=29/13

链地址法:

例题:

采用哈希函数H(k)=2*k mod 13并用链地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51进行下列工作:

(1)构造哈希表(画示意图);

(2)等概率下成功的和不成功的平均查找长度。

答:(1)

0

13

^

1

46

^

2

53

1

^

3

^

4

41

67

^

5

22

^

6

^

7

^

8

30

^

9

^

10

^

11

51

^

12

^

(2)查找成功的平均查找长度:

ASL=(7*1+2*2)/9=11/9

查找不成功的平均查找长度:(不算关键字空的散列地址的比较次数)

ASL=(5+4)/13=9/13文章来源地址https://www.toymoban.com/news/detail-528009.html

总结:算查找成功的平均查找长度时除以的是表中元素的个数

查找不成功的平均查找长度时除以的是表的长度

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

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

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

相关文章

  • 6-1 线性探测法的查找函数

    试实现线性探测法的查找函数。 函数接口定义: Position Find( HashTable H, ElementType Key ); 其中 HashTable 是开放地址散列表,定义如下: 函数 Find 应根据裁判定义的散列函数 Hash( Key, H-TableSize ) 从散列表 H 中查到 Key 的位置并返回。如果 Key 不存在,则返回线性探测法找到的第一个空

    2024年02月03日
    浏览(63)
  • 【数据结构】哈希表查找失败时的平均查找长度

    0. 题目 设有一组 {19, 1, 23, 14, 55, 20, 84, 27, 68, 11, 10, 77} 哈希函数为: H(key) = key % 13 采用开放地址法的线性探测法处理冲突 试0~18的哈希表中对该序列构造哈希表,并求成功和不成功时的平均查找长度 1. 解答 ASL成功 = (1 + 2 +1 + 4 + 3 + 1 + 1 + 3 + 1 + 1 + 3 + 2) / 12 = 1.92

    2024年02月11日
    浏览(46)
  • C语言 哈希查找(哈希表的创建、处理冲突、查找等)

    哈希查找(Hash Search) 是一种基于哈希表实现的数据查找算法,也可以被称为散列查找。 在哈希查找中,首先根据给定的键值通过哈希函数计算出对应的哈希值,然后利用该哈希值在哈希表中定位到具有相同哈希值的一个桶(Bucket),再在桶中进行线性查找和比较,以确定目

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

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

    2024年01月21日
    浏览(53)
  • 【Python查找算法】二分查找、线性查找、哈希查找

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

    2024年02月08日
    浏览(52)
  • 【C++】“最强查找“哈希表的底层实现

    哈希表的查找的时间复杂度是O(1)~ 文章目录 前言 一、哈希冲突和哈希函数 二、哈希表底层实现 1.开放地址法 2.链地址法 总结 哈希概念: 顺序结构以及平衡树 中,元素关键码与其存储位置之间没有对应的关系,因此在 查找一个元素 时,必须要经过关键码的多次比较 。

    2024年02月06日
    浏览(46)
  • 【哈希表】为什么哈希表的插入/删除/查找时间复杂度为O(1)

    在使用哈希表时,往往会出现哈希冲突,此时就会通过 链表/红黑树 的方法来解决冲突,此时引入 链表/红黑树 那么时间复杂度就不是严格的O(1)。 我们首先要明白N代表什么,N是指问题的规模大小。 在使用哈希表时,所有的数据个数为N,链表的长度肯定不是N,( 因为存在

    2024年03月21日
    浏览(58)
  • 查找:线性表的C语言代码实现(顺序查找、折半查找)

    一、线性表结构 两个类的定义 二、线性表的初始化以及根据输入的元素建立线性表 1.线性表的初始化,初始化一个空的线性表 2.根据用户需求,向线性表中添加元素  三、顺序查找  Search1函数(没有设置哨兵,需要比较两次) 四、顺序查找(设置哨兵,不用再比较是否会越

    2024年02月09日
    浏览(51)
  • 【数据结构】线性表(一)线性表的定义及其基本操作(顺序表插入、删除、查找、修改)

    目录 一、线性表 1. 线性表的定义 2. 线性表的要素 二、线性表的基本操作 三、线性表的顺序存储结构 1. 定义 2. 顺序表的操作       a. 插入操作 b. 删除操作 c. 查找操作 d. 修改操作 e. 代码实例          一个线性表是由零个或多个 具有相同类型的结点 组成的有序集合。

    2024年02月03日
    浏览(70)
  • 线性表的实现(C语言版)——详细代码

    文章目录 前言 一、线性表是什么? 二、实现步骤 1.引入头文件并定义一个宏常量 2.定义顺序表的结构 3.顺序表各种操作的实现(增删改查等) 4.主函数调用实现 5.完整代码 总结       今天对数据结构中的线性表进行了重新的梳理和复盘,有了许多收获,并花了一些时间在

    2024年02月08日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包