哈希表查找——成功和不成功时的平均查找长度

2023-11-15

哈希表查找——成功和不成功时的平均查找长度


以下求解过程是按照“计算机统考的计算方法”,不同的老师、教材在“处理冲突”上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考真题的解题方法。

题目

例子:(2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题第一题

将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组。散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表;
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

1.散列表:

          α = 表中填入的记录数/哈希表长度    ==>  哈希表长度 = 7/0.7 = 10
            H(7) = (7x3) MOD 7 = 0           H(8) = (8x3) MOD 7 = 3           H(30) = (30x3) MOD 7 = 6
            H(11) = (11x3) MOD 7 = 5       H(18) = (18x3) MOD 7 = 5       H(9) = (9x3) MOD 7 = 6
            H(14) = (14x3) MOD 7 = 0
           按关键字序列顺序依次向哈希表中填入,发生冲突后按照“线性探测”探测到第一个空位置填入。

  
  
0 1 2 3 4 5 6 7 8 9
7 14 8 11 30 18 9

2.查找长度:

        2.1 查找成功的平均查找长度

       (待查找的数字肯定在散列表中才会查找成功)

        查找数字A的长度 = 需要和散列表中的数比较的次数;
       步骤:
                比如 查找数字:8
                则  H(8) = (8x3) MOD 7 = 3
                哈希表中地址3处的数字为8,进行了第一次比较:8 = 8,则查找成功,查找长度为1;
                比如查找数字:14
                则 H(14) = (14x3) MOD 7 = 0
                哈希表中地址0处的数字为7,进行第一次比较:7≠14
                哈希表中地址1处的数字为14,进行第二次比较:14=14 ,则查找成功,查找长度为2。                             
由此可得到如下数据:【2016年12月26日修改,多谢@一楼的朋友指正】

     
     
0 1 2 3 4 5 6 7 8 9
7 14 8 11 30 18 9
1 2 1 1 1 3 3
所以总的查找成功的平均查找长度= (1+1+1+1+3+3+2)/7 = 12/7

2.2查找不成功的平均查找长度

(待查找的数字肯定不在散列表中)

【解题的关键之处】根据哈希函数地址为MOD7,因此任何一个数经散列函数计算以后的初始地址只可能在0~6的位置
                查找0~6位置查找失败的查找次数为:
            地址0,到第一个关键字为空的地址2需要比较3次,因此查找不成功的次数为3.      
            地址1,到第一个关键字为空的地址2需要比较2次,因此查找不成功的次数为2.
            地址2,到第一个关键字为空的地址2需要比较1次,因此查找不成功的次数为1.
  地址3,到第一个关键字为空的地址4需要比较2次,因此查找不成功的次数为2.
  地址4,到第一个关键字为空的地址4需要比较1次,因此查找不成功的次数为1.
  地址5,到第一个关键字为空的地址2(比较到地址6,再循环回去)需要比较5次,因此查找不成功的次数为5.
  地址6,到第一个关键字为空的地址2(比较到地址6,再循环回去)需要比较4次,因此查找不成功的次数为4.
于是得到如下数据:
    
    
0 1 2 3 4 5 6 7 8 9
7 14 8 11 30 18 9
3 2 1 2 1 5 4
则查找不成功的平均查找长度 = (3+2+1+2+1+5+4)/7 = 18/7

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

四、哈希表的装填因子

装填因子 = (哈希表中的记录数) /  (哈希表的长度)

装填因子是哈希表装满程度的标记因子。值越大,填入表中的数据元素越多,产生冲突的可能性越大。

五、不同处理冲突的平均查找长度

技术分享

 

例:

假设散列表的长度是13,三列函数为H(K) = k % 13,给定的关键字序列为{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。分别画出用线性探测法和拉链法解决冲突时构造的哈希表,并求出在等概率情况下,这两种方法的查找成功和查找不成功的平均查找长度。

(1)线性探测法:

技术分享

查找成功时的查找次数等于插入元素时的比较次数, 查找成功的平均查找长度为:

ASL = (1+2+1+4+3+1+1+3+9+1+1+3)/12 = 2.5

查找成功时的查找次数:第n个位置不成功时的比较次数为:第n个位置到第1个没有数据位置的距离如第0个位置取值为1,第11个位置取值为3,第12个位置取值2

查找不成功的平均查找次数为:

ASL = (1+13+12+11+10+9+8+7+6+5+4+3 + 2)/ 13 = 91/13

哈希表查找不成功怎么计算? 解答:先建好表,然后可以算出每个位置不成功时的比较次数之和,再除以表空间个数

例如:散列函数为hash(x)=x MOD 11,用线性探测,建立了哈希表之后,如何求查找不成功时的平均查找长度!?

       地址:0     1    2    3    4    5    6    7    8    9    10       数据:33     1    13   12  34    38   27   22   -   -   -    成功次数:1     1    1    3    4    1    2    8  不成功次数:9     8    7    6    5    4    3    2    1    1    1

查找成功时的平均查找长度:ASL=(1+1+1+3+4+1+2+8)/8 =47/8 查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+1)/11

说明

第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离。

  如:第0个位置到第1个没有数据位置(8)的距离为9!

(1) 开放定址法
地址: 0    1    2    3    4    5    6    7    8    9    10    11    12        
数据: 39   12   28   15   42   44    6   25   -   -    36    -    38    
成功次数: 1    3    1    2    2    1    1    9                        1           
不成功次数: 9    8    7    6    5    4    3    2    1    1      2    1      10 
查找成功时的平均查找长度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2 
查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54

(2)链地址法

java中的hashMap就是这样一种链表+数组的数据结构,查找方法很简单,先利用散列函数(一般是取余数的方法)定位数组具体哪个点,比如1就是余数为1的点的链表中,然后再遍历链表查找具体数值的位置,如,果是53,那就在链表的第四位置,需要查找四次;同理,27就需要查找3次!

技术分享

查找成功时的平均查找长度:

ASL = (1*6+2*4+3*1+4*1)/12 = 7/4

查找不成功时的平均查找长度:

ASL = (4+2+2+1+2+1)/13

注意:查找成功时,分母为哈希表元素个数,查找不成功时,分母为哈希表长度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希表查找——成功和不成功时的平均查找长度 的相关文章

  • unity物体四种移动方法总结

    目录 一 通过修改位置来实现移动 二 通过物理系统实现位移 三 通过输入控制物体移动 一 通过修改位置来实现移动 利用修改Transform组件的position的两种常用方法 1 使用Translate 函数 2 直接指定新的位置 将上述

随机推荐

  • laravel的安装

    1 环境是linux 2 首先确保你的linux安装了composer http www golaravel com laravel docs 5 1 3 添加PATH变量 a vim etc profile b 在文件末尾加上 expor
  • windows下minikube安装启动

    1 windows下minikube安装启动 1 1 第一版 1 1 1 安装minikube 直接使用官方安装包安装 minikube installer exe 点击运行安装即可 1 1 2 安装kubectl 直接下载放置F kube
  • fname什么意思matlab,matlab中f(:,1)是什么意思 matlab中f(:,:,3)是什么意思?

    导航 网站首页 gt matlab中f 1 是什么意思 matlab中f 3 是什么意思 matlab中f 1 是什么意思 matlab中f 3 是什么意思 相关问题 匿名网友 f 1 就是取f 矩阵的第1列 f 1 2 3 3 4 6 7
  • 神州三层交换机IPV6各种路由配置

    一 基础配置 SW1 CS6200 28X EI gt ena CS6200 28X EI conf CS6200 28X EI config host SW1 SW1 config ipv6 enable SW1 config vlan
  • 关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)

    关系代数 一 前言 二 概述 三 传统的集合运算符 1 概述 2 并 3 交 4 差 5 笛卡儿积 四 专门的关系运算 1 概述 2 记号 3 象集 4 选择 5 投影 6 连接 等值连接 自然连接 7 悬浮元组 外连接 左外连接 右外连接
  • 托管和非托管的区别

    NET Framework 是一种新的计算平台 它简化了在高度分布式 Internet 环境中的应用程序开发 NET Framework 旨在实现下列目标 提供一个一致的面向对象的编程环境 而无论对象代码是在本地存储和执行 还是在本地执行但
  • AIX系统修改系统时间

    linux下用date s 20131215 09 02 25 把时间设为2013年12月15日9点2分25秒 而aix呢 它不认 s这个参数 date n mmddHHMMYY mm表示月分 dd表示日期 HH表示小时 MM表示分钟 YY
  • 关于最近面试的通过2个offer然后被刷

    一个是面试通关了 薪资也谈好了 然后发offer 时候跟我说跟别人名字搞错了 浪费我我的时间 还有一个人面试通过 也给我发了面试通过的 也给我发了offer工资也谈拢了 说需要一周的审批 然后后面问我工作年限 说我不够工作年限 要求之前多少
  • qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...

    原标题 QQ讨论组出现大面积故障 腾讯回应 因服务器异常 已紧急修复 TechWeb报道 8月25日消息 今天上午 大量网友反映称QQ讨论组功能出现Bug 具体症状为 在讨论组内发送一条信息就会被自动创建一个新的讨论组 而且历史消息记录全部
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】最长公共后缀

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 最长公共后缀 知识点排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 编写一个函数来查找字符串数组中的最长公共后缀 如果不存在公共后缀 返回固定字符串 Zero 补
  • matplot 画条形图

    import matplotlib pyplot as plt import numpy as np import pandas as pd plt show America New York 1251 Unknown 521 Americ
  • 18724 二叉树的遍历运算

    先序遍历的顺序是 根左右 中序遍历的顺序是 左根右 l1表示先序遍历的左边界 r1表示先序遍历的右边界 l2表示中序遍历的左边界 r1表示中序遍历的右边界 下面以题目的输入样例为例做分析 输入样例 abcde bcade 当i到达最后落点时
  • 毕设—基于树莓派的家居环境智能监测系统设计与实践

    一 资料查找工具 英文文献 Sci Hub Academic Navigation Site To remove all barriers in the way of science 中文文献 VPN书童图书馆 知网免费下载知网免费入口论文
  • Dropdown 下拉框(el-dropdown-menu)内容过长显示‘...’ 鼠标悬浮显示全部

    问题描述 使用element的Dropdown 下拉框 el dropdown menu 内容过长显示 鼠标悬浮显示全部 有时候内容太长导致文字换行与其它文字折叠展示 如下图所示 解决方案 直接上代码
  • PVE虚拟化平台之安装iStoreOS软路由系统

    PVE虚拟化平台之安装iStoreOS软路由系统 一 iStoreOS介绍 二 登录PVE平台检查系统状态 三 创建虚拟机 1 虚拟机常规设置 2 操作系统配置 3 系统配置 4 磁盘配置 5 CPU配置 6 内存设置 7 网络设置 8 确
  • plt.subplots()

    首先一幅Matplotlib的图像组成部分介绍 在matplotlib中 整个图像为一个Figure对象 在Figure对象中可以包含一个或者多个Axes对象 每个Axes ax 对象都是一个拥有自己坐标系统的绘图区域 所属关系如下 sub
  • Python操作ElasticSearch条件查询

    一 基本操作 1 列表元素之一查询 如 terminalType pc mobile 正确用法 GET http 0 0 0 0 8200 amis action data data search size 10000 查询条件 Ps 数组
  • 【转】内存数据库、关系型数据库和非关系型数据库

    内存数据库 关系型数据库和非关系型数据库 一 内存数据库 关系型数据库和非关系型数据库 1 个人观点 二 内存数据库 Redis MongoDb SQLite Oracle等 三 Raft分布式协议 四 Redis出现宕机 如何保证数据不丢
  • python极限学习机ELM做一个简单的分类

    最近事太多 只能下班后挤时间学习 缓慢更新 华丽的分割线 极限学习机是我们实验室的元老了 是一种单隐层前馈神经网络 SLFN 学习算法 这种算法只需要设置网络的隐层节点个数 执行过程中不需要调整网络的输入权值以及隐元的偏置 并且产生唯一的最
  • 哈希表查找——成功和不成功时的平均查找长度

    哈希表查找 成功和不成功时的平均查找长度 以下求解过程是按照 计算机统考的计算方法 不同的老师 教材在 处理冲突 上可能会有不同的方法 所以最主要的是掌握原理即可 对于考研的朋友最好掌握统考真题的解题方法 题目 例子 2010年全国硕士研究