关于ASL的简单总结

  • 概述
  • 顺序查找中ASL计算
  • 折半查找中ASL计算
  • 哈希表中ASL计算

概述

ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平均查找长度。
它的定义是这样的:

其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。

当然,有查找成功,就有查找不成功,即要查找元素不在查找表中。针对不同查找方式的查找成功与不成功,我接下来会说,这也是一我一开始有点乱的地方。

一个算法的ASL越大,说明时间性能差,反之,时间性能好,这也是显而易见的。

顺序查找中ASL计算

在顺序查找(Sequence Search)表中,查找方式为从头扫到尾,找到待查找元素即查找成功,若到尾部没有找到,说明查找失败。所以说,Ci(第i个元素的比较次数)在于这个元素在查找表中的位置,如第0号元素就需要比较一次,第一号元素比较2次…第n号元素要比较n+1次。所以Ci=i;所以

可以看出,顺序查找方法查找成功的平均 比较次数约为表长的一半。当待查找元素不在查找表中时,也就是扫描整个表都没有找到,即比较了n次,查找失败

折半查找中ASL计算

折半查找(Binary Search),首先待查找表是有序表,这是折半查找的要求。在折半查找中,用二叉树描述查找过程,查找区间中间位置作为根,左子表为左子树,右子表为右子树,,因为这颗树也被成为判定树(decision tree)或比较树(Comparison tree)
查找方式为(找k),先与树根结点进行比较,若k小于根,则转向左子树继续比较,若k大于根,则转向右子树,递归进行上述过程,直到查找成功或查找失败。在n个元素的折半查找判定树中,由于关键字序列是用树构建的,所以查找路径实际为树中从根节点到被查结点的一条路径,因为比较次数刚好为该元素在树中的层数。所以

Pi为查找k的概率,level(Ki)为k对应内部结点的层次。而在这样的判定树中,会有n+!种查找失败的情况,因为将判定树构建为完全二叉树,又有n+1个外部结点(用Ei(0<=i<=n)表示),查找失败,即为从根结点到某个外部结点也没有找到,比较次数为该内部结点的结点数个数之和,所以,

qi表示查找属于Ei中关键字的概率,level(Ui)表示Ei对应外部结点的层次。所以,在一颗有n个结点判定树中,总数
,所以判定树高度为
的满二叉树,第i层上结点个数为
,查找该层上的结点需要进行i次比较,因此,在等概率情况下ASL为 看个例子会更好理解。

例:给11个数据元素有序表(2,3,10,15,20,25,28,29,30,35,40)采用折半查找。则ASL成功和不成功分别是多少?

首先画出判定树,

查找成功时总会找到途中某个内部结点,所以成功时的平均查找长度为
即25查找一次,成功,10,30要查找2次,成功,2,15,28,35要查找3次,成功,3,20,29,40要查找4次,成功。 而不成功的平均查找长度为
,为什么这么算呢,因为内部结点都能查找成功,而查找不成功的就是那些空的外部结点,所以到查询到2的左孩子,15的左孩子,28的左孩子,35的左孩子,3的左右孩子,20的左右孩子,29的左右孩子,40的左右孩子时,都是查找不成功的时候。
如我要找1,比25小,转向左子树,比较一次,比10小,转左子树,2次,比2 小,转左子树,3次,此时2无左子树,所以失败。所以

哈希表中ASL计算

哈希表中的ASL 查找成功的平均查找长度是指查找到哈希表中已有关键字的平均探测次数。而查找不成功的平均查找长度是指在哈希表中找不到待查的元素,最后找到空位置元素的探测次数平均值。

例:散列表长度为13,地址空间为0~12,散列函数H(k) =K mod 13,关键字序列{19,14,23,01,68,20,84,27,55,11,10,79} 所以线性探测结果为:

各位可以手动算一下,加深理解~

根据探测次数,


 

当然成功的很好理解,12个元素,每个元素的探测次数之和除以12就行。而不成功的计算是这样的。散列表长度为13,根据定义,假设待查关键字不在散列表中,要一直找到空元素才算查找失败

如H[0]为空,与待查找元素不等,不成功,比较一次,H[1],此时H[1]的元素与原本放在H[1]的元素不等(假设不在散列表在之中,但也不是空的),继续向后比,与H[2]比也不等,继续向后,一直到H[12],也不等,继续向后时,回到H[0],为空,也不等,查找失败,总计比较13次,然后计算第二号元素,一样的比较,一直把每个位置都统计一遍,从而得出ASL不成功的。


本文转载自https://www.cnblogs.com/ygsworld/p/10238729.html

转载心得:在学习ASL过程中看到了这篇文章,该文章讲述清楚明了,很适合学习,特转载作为自己学习的记录,也希望更多学习该知识点的同伴们看到这篇不错的文章!

关于ASL(平均查找长度)的简单总结相关推荐

  1. hash表的平均查找长度C语言,关于ASL(平均查找长度)的简单总结

    ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数成为平均查找长度. 它的定义是这样的: 其中n ...

  2. 数据结构 顺序查找和折半查找的平均查找长度分析关于ASL(平均查找长度)的简单总结

    顺序查找 折半查找的平均查找长度分析 ASL:平均查找长度 其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数. A S ...

  3. 数据结构:二叉查找树 BST 平均查找长度 ASL 的计算

    平均查找长度 ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平均查找长度. 它的定义是这 ...

  4. 【hash表】hash表平均查找长度(ASL)

      hash 表在处理 collision 的时候有很多种方式,比如 线性探测(linear probing).二次探测(quadratic probing).开链法(seperate chaning ...

  5. 数据结构---平均查找长度ASL的相关计算技巧

    个人总结的有关考研数据结构中平均查找长度ASL的三种计算小技巧: 顺序查找法的平均查找长度为:(n+1)/2 散列表的查找成功和查找不成功的平均查找长度 技巧(线性探测法和链地址法): ① 查找成功时 ...

  6. 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)

    查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...

  7. 计算散列表查找成功和查找不成功的平均查找长度(利用线性探测法处理冲突)

    散列表 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.映射函数叫做 ...

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

    哈希表查找--成功和不成功时的平均查找长度 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原 ...

  9. 折半查找判定树及平均查找长度

    折半查找判定树及平均查找长度 从折半查找的过程看,以有序表的中间记录作为比较对象,并以中间记录将表分割为两个子表,对子表继续上述操作.所以,对表中每个记录的查找过程,可用二叉树来描述,二叉树中的每个结 ...

最新文章

  1. 1.5 使用new创建动态结构和自动, 静态, 动态三种存储方式
  2. 动态规划算法-03背包问题
  3. verilog赋多位值_verilog赋值
  4. java概述_Java 7功能概述
  5. C语言中的自定义类型
  6. Attachments to close incidents
  7. 面试题28:字符串全排列
  8. 用计算机编码原理解释,编码原理
  9. HTML 自动跳转代码
  10. 英汉词典 JaVa_一个Java编写的英汉词典
  11. 电商公司ERP管理软件与旺店通、第三方仓库以及云仓的贯通解决方案
  12. js控制从绿色到红色的渐变
  13. 集合论的创始人康托尔(G.Cantor)的故事
  14. 你好 同样在努力的陌生人
  15. 【正点原子FPGA连载】 第二十章 LCD触摸屏实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
  16. 洛谷P2664 树上游戏 【点分治 + 差分】
  17. Android知乎广告效果
  18. html打开方式怎么没有反应,为什么我点开启程序没反应
  19. QT 项目 智能家居系统 上位机
  20. 关于解决'\u'开头的字符串转中文的方法

热门文章

  1. 十五张思维导图带你快速学习PHP语言基础 1
  2. mysql 证书双向认证_https证书双向验证
  3. 一个Java程序员该有的良好品质
  4. 从JavaScript看字符编码的前世今生!
  5. 图情论文笔记 | 四川大学图书馆关于“十四五”发展规划的初步思考(党跃武)
  6. linux下intel安装教程,在 Ubuntu 15.10 上安装 Intel Graphics 安装器
  7. 深入理解Linux内存管理(0.3)
  8. 基于自动机器学习工具hyperGBM的异常值识别中缺失值填补问题(含2022年全国服务外包大赛实例)
  9. 5. 创建视图vw_vp:查询小米Note2的供应商姓名(vname)、供应商地址(vaddress)、邮政编码(vzip),产品价格(pprice)。
  10. 【转载】osgeo和pyproj:经纬度坐标和高斯坐标互相转换